Xpath

在 XML 文档中查找信息的语言, 同样适用于 HTML

辅助工具

Xpath Helper

Chrome插件   快捷键 Ctrl + shift + x

XML Quire

xpath 编辑工具

Xpath 表达式

//   查找所有节点

//book

查找所有的book节点

/   查找当前节点

//book/title

查找所有book节点下的title子节

@   获取属性筛选

//book//title/@lang="en"

查找book节点下所有的title节点中,lang属性值为 "en"

[]  当前节点的限制

//bookstore/book[2]/title

查找bookstore下的第2个book节点下的title子节点

//title[@lang]

查找含有 lang 属性的 title节点

|   匹配多路径 (或匹配)

xpath表达式1 | xpath表达式2 | ... 

contains()  匹配一个属性值中包含某些字符串的节点

//div[contains(@id,'qiushi_tag_')]

text()  匹配文本值

 //book/title/text()="羊驼"

查找 book 下的 title 下文本为"羊驼"节点

lxml

安装

pip install lxml

使用

导入模块

from lxml import etree

创建解析对象

parse_html = etree.HTML(html)

调用 xpath 匹配

r_list = parse_html.xpath('xpath 表达式')

ps: 返回结果以列表形式

示例

抓取指定贴吧所有图片

  • 获取贴吧主页URL,下一页,找URL规律
  • 获取1页中所有帖子URL地址
  • 对每个帖子链接发请求,获取图片URL
  • 对每个图片链接发请求,以wb方式写入本地
import requests
from lxml import etree class BaiduSpider(object):
def __init__(self):
self.baseurl = 'http://tieba.baidu.com/f?'
# 使用IE的User-Agent
self.headers = {
'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)'} # 获取帖子链接
def get_turl(self, params):
res = requests.get(
self.baseurl,
params=params,
headers=self.headers
)
res.encoding = 'utf-8'
html = res.text
# 提取帖子链接
parse_html = etree.HTML(html)
t_list = parse_html.xpath('//div[@class="t_con cleafix"]/div/div/div/a/@href')
print(t_list)
# t_list : ['/p/23232/','/p/923423']
for t in t_list:
url = 'http://tieba.baidu.com' + t
# 提取图片链接,对图片链接发请求保存到本地
self.get_imgurl(url) # 获取图片链接
def get_imgurl(self, url):
res = requests.get(url, headers=self.headers)
res.encoding = 'utf-8'
html = res.text
# 提取图片链接列表
parse_html = etree.HTML(html)
# 图片链接列表
img_list = parse_html.xpath(
'//div[@class="d_post_content j_d_post_content clearfix"]/img[@class="BDE_Image"]/@src | //div[@class="video_src_wrapper"]/embed/@data-video')
# 视频链接列表
# img_list = parse_html.xpath('//div[@class="video_src_wrapper"]/embed/@data-video')
print(img_list)
for img in img_list:
self.write_img(img) # 把图片保存到本地
def write_img(self, img):
res = requests.get(img, headers=self.headers)
res.encoding = 'utf-8'
html = res.content
# 保存到本地
filename = img[-10:]
with open(filename, 'wb') as f:
f.write(html)
print('%s下载成功' % filename) # 主函数
def main(self):
name = input('贴吧名:')
begin = int(input('起始页:'))
end = int(input('终止页:'))
for page in range(begin, end + 1):
pn = (page - 1) * 50
# 定义查询参数
params = {
'kw': name,
'pn': str(pn)
}
self.get_turl(params) if __name__ == '__main__':
spider = BaiduSpider()
spider.main()

猫眼电影信息爬取

from urllib import request
import time
import csv
from lxml import etree class MaoyanSpider(object):
def __init__(self):
self.baseurl = 'https://maoyan.com/board/4?offset='
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'}
# 爬取页数计数
self.page = 1 # 获取页面
def get_page(self, url):
req = request.Request(url, headers=self.headers)
res = request.urlopen(req)
html = res.read().decode('utf-8')
# 直接调用解析函数
self.parse_page(html) # 解析页面
def parse_page(self, html):
parse_html = etree.HTML(html)
# 基准xpath,匹配每个电影信息节点对象列表
dd_list = parse_html.xpath('//dl[@class="board-wrapper"]/dd')
# dd_list : [<element dd at xxx>,<...>]
for dd in dd_list:
name = dd.xpath('./a/@title')[0].strip()
star = dd.xpath('.//p[@class="star"]/text()')[0].strip()
time = dd.xpath('.//p[@class="releasetime"]/text()')[0].strip()
print([name, star, time]) # 保存数据(存到csv文件)
def write_page(self, r_list):
# r_list : [(),(),()]
with open('猫眼.csv', 'a') as f:
writer = csv.writer(f)
for rt in r_list:
film = [
rt[0].strip(),
rt[1].strip(),
rt[2].strip()
]
writer.writerow(film) # 主函数
def main(self):
# 用range函数可获取某些查询参数的值
for offset in range(0, 41, 10):
url = self.baseurl + str(offset)
self.get_page(url)
print('第%d页爬取成功' % self.page)
self.page += 1
time.sleep(1) if __name__ == '__main__':
spider = MaoyanSpider()
spider.main()

爬虫 lxml 模块的更多相关文章

  1. python3爬虫lxml模块的安装

    1:在下载lxml之前,要先查看python的版本信息, 在CMD命令行输入python 再输入import pip; print(pip.pep425tags.get_supported()) -- ...

  2. 洗礼灵魂,修炼python(71)--爬虫篇—【转载】xpath/lxml模块,爬虫精髓讲解

    Xpath,lxml模块用法 转载的原因和前面的一样,我写的没别人写的好,所以我也不浪费时间了,直接转载这位崔庆才大佬的 原帖链接:传送门 以下为转载内容: --------------------- ...

  3. python爬虫网页解析之lxml模块

    08.06自我总结 python爬虫网页解析之lxml模块 一.模块的安装 windows系统下的安装: 方法一:pip3 install lxml 方法二:下载对应系统版本的wheel文件:http ...

  4. Python爬虫基础——XPath语法的学习与lxml模块的使用

    XPath与正则都是用于数据的提取,二者的区别是: 正则:功能相对强大,写起来相对复杂: XPath:语法简单,可以满足绝大部分的需求: 所以,如果你可以根据自己的需要进行选择. 一.首先,我们需要为 ...

  5. 爬虫(六):XPath、lxml模块

    1. XPath 1.1 什么是XPath XPath(XML Path Language) 是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. 1.2 ...

  6. Python爬虫 XPath语法和lxml模块

    XPath语法和lxml模块 什么是XPath? xpath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. X ...

  7. lxml模块(应用xpath技术)

    一.lxml介绍 第三方库lxml是第一款表现出高性能特征的python xml库,天生支持Xpath1.0.XSLT1.0.定制元素类,甚至python风格的数据绑定接口.lxml是通过Cpytho ...

  8. python爬虫 urllib模块url编码处理

    案例:爬取使用搜狗根据指定词条搜索到的页面数据(例如爬取词条为‘周杰伦'的页面数据) import urllib.request # 1.指定url url = 'https://www.sogou. ...

  9. python 爬虫 urllib模块 目录

    python 爬虫 urllib模块介绍 python 爬虫 urllib模块 url编码处理 python 爬虫 urllib模块 反爬虫机制UA python 爬虫 urllib模块 发起post ...

随机推荐

  1. 【转】awk学习笔记

    Awk学习笔记 整理:Jims of 肥肥世家 <jims.yang@gmail.com> Copyright © 2004 本文遵从GPL协议,欢迎转载.修改.散布. 第一次发布时间:2 ...

  2. deep_learning_Function_os.makedirs()

    Python 3.2+ os.makedirs(path, exist_ok=True) python 3.2创建目录新增了可选参数existok,把existok设置True,创建目录如果已经存在则 ...

  3. 菜鸟宝典之Windows Server 2012 R2上PHP、MySQL环境搭建

    原文来自:https://www.jb51.net/article/59280.htm 上车准备一.准备工具服务器操作系统:Windows Server 2012PHP版本:5.6.9(根据自己需要) ...

  4. systemd自启动tomcat

    tomcat自启动service [Unit] Description=Tomcat After=network.target [Service] Type=forking PIDFile=/usr/ ...

  5. centos nginx https 配置

    1,如果想配置一个域名到指定目录咋弄呢?下面这个 server { listen ; server_name 这里换成你的域名,例如baidu.com; set $root_path '/home/w ...

  6. phpStorm中使用xdebug工具调试docker容器中的程序

    前提准备 phpstorm开发软件 + dnmp(docker + nginx + mysql +php) 配置好hosts 映射比如 /etc/hosts      127.0.0.1 tp5.de ...

  7. zoj 4122 Triangle City 2019山东省赛J题

    题目链接 题意: 给出一个无向图,类似三角形的样子,然后给出边的权值,问找一条从第一个点到最后一个点的路径,要求每一条边只能走一次,并且权值和最大,点可以重复走. 思路: 首先观察这个图可以发现,所有 ...

  8. zencart后台管理中选项名称和选项内容和属性控制页面出错解决办法 WARNING: An Error occurred, please refresh the page and try again

    后台管理中选项名称和选项内容和属性控制出现以下错误的解决办法WARNING: An Error occurred, please refresh the page and try again zen ...

  9. java-udp编程

    TCP/IP UDP都是基于传输层的:而udp发送数据会出现丢包的情况,发送一个数据不管对方接收不接收,发送过去就完事了: udp的特点:将数据源和目的封装成数据包中,不要建立连接:(Datagram ...

  10. Java WEB框架——SSM迈向M之登录

    1.pom.xml 关于pom.xml,<version>等标签先暂时不谈,<dependency> 的作用主要是添加相应的支持包,比如spring,servlet,jdbc等 ...