爬虫 lxml 模块
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 模块的更多相关文章
- python3爬虫lxml模块的安装
1:在下载lxml之前,要先查看python的版本信息, 在CMD命令行输入python 再输入import pip; print(pip.pep425tags.get_supported()) -- ...
- 洗礼灵魂,修炼python(71)--爬虫篇—【转载】xpath/lxml模块,爬虫精髓讲解
Xpath,lxml模块用法 转载的原因和前面的一样,我写的没别人写的好,所以我也不浪费时间了,直接转载这位崔庆才大佬的 原帖链接:传送门 以下为转载内容: --------------------- ...
- python爬虫网页解析之lxml模块
08.06自我总结 python爬虫网页解析之lxml模块 一.模块的安装 windows系统下的安装: 方法一:pip3 install lxml 方法二:下载对应系统版本的wheel文件:http ...
- Python爬虫基础——XPath语法的学习与lxml模块的使用
XPath与正则都是用于数据的提取,二者的区别是: 正则:功能相对强大,写起来相对复杂: XPath:语法简单,可以满足绝大部分的需求: 所以,如果你可以根据自己的需要进行选择. 一.首先,我们需要为 ...
- 爬虫(六):XPath、lxml模块
1. XPath 1.1 什么是XPath XPath(XML Path Language) 是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. 1.2 ...
- Python爬虫 XPath语法和lxml模块
XPath语法和lxml模块 什么是XPath? xpath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. X ...
- lxml模块(应用xpath技术)
一.lxml介绍 第三方库lxml是第一款表现出高性能特征的python xml库,天生支持Xpath1.0.XSLT1.0.定制元素类,甚至python风格的数据绑定接口.lxml是通过Cpytho ...
- python爬虫 urllib模块url编码处理
案例:爬取使用搜狗根据指定词条搜索到的页面数据(例如爬取词条为‘周杰伦'的页面数据) import urllib.request # 1.指定url url = 'https://www.sogou. ...
- python 爬虫 urllib模块 目录
python 爬虫 urllib模块介绍 python 爬虫 urllib模块 url编码处理 python 爬虫 urllib模块 反爬虫机制UA python 爬虫 urllib模块 发起post ...
随机推荐
- Centos网卡名称命名
1. vim /etc/sysconfig/grub 编辑/etc/sysconfig/grub文件 添加 net.ifnames=0 biosname=0 GRUB_TIMEOUT= GR ...
- fragment初步认识
- 使用 Eclipse 构建的时候会出现 run as 中没有 maven package 选项
注:该方法来自我学习时别人分享的出现问题的解决方法,并没有亲自测试,仅供参考 是因为建的是普通 java 工程,需要把它转换成 maven project. 1.右键工程--maven--Disabl ...
- Beta冲刺版本第三天
该作业所属课程:https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 作业要求地址:https://edu.cnblogs.com ...
- 理解JavaScript里的 [].forEach.call() 写法
原文: http://www.webhek.com/javascript-foreach-call document.querySelectorAll() 返回的并不是我们想当然的数组,而是 Nod ...
- Beta冲刺——星期四
这个作业属于哪个课程 <课程的链接> 这个作业要求在哪里 <作业要求的链接> 团队名称 飞猪们 这个作业的目标 剩余任务预估,分配任务(开发,测试等).按要求提交当天冲刺报告. ...
- python 获取安装包apk, ipa 信息
# -*- coding:utf-8 -*- import re import os import zipfile from biplist import * from androguard.core ...
- pycharm 快捷键及一些常用设置
pycharm中的快捷键及一些常用设置 在PyCharm /opt/pycharm-3.4.1/help目录下可以找到ReferenceCard.pdf快捷键英文版说明 PyCharm Default ...
- nginx基本概述
上级回顾: 1.NFS 2.Sersync 3.SSH 1.ssh使用两种登录服务器的方式,哪两种? 密码 用户名 + 密码 秘钥 用户名 + 秘钥(私钥) 公钥加密 私钥解密 2.大家常说的 塞ke ...
- CSS基础学习-8.CSS盒子模型_标准盒子&&9.CSS怪异盒子
怪异盒模型 box-sizing:content-box;/*正常盒模型,默认值*/ box-sizing:border-box:/*怪异盒模型,固定了盒子的大小,无论是否添加内边距还是边框,盒子的大 ...