Python爬虫Xpath和lxml类库系列之九
来源:互联网 发布:excel如何导入外部数据 编辑:程序博客网 时间:2024/04/30 11:10
Num01–XPath类库知识
1,介绍
XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历。
2,XPath 开发工具
- 开源的XPath表达式编辑工具:XMLQuire(XML格式文件可用)
- Chrome插件 XPath Helper
- Firefox插件 XPath Checker
3,常用路径表达式
4,谓语(Predicates)
谓语用来查找某个特定的节点或者包含某个指定的值的节点,被嵌在方括号中。
5,选取未知节点
XPath 通配符可用来选取未知的 XML 元素。
6,选取若干路径
通过在路径表达式中使用“|”运算符,您可以选取若干个路径。
7,XPath的运算符
Num02–lxml类库知识
1,介绍
lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 数据。
lxml和正则一样,也是用 C 实现的,是一款高性能的 Python HTML/XML 解析器,我们可以利用之前学习的XPath语法,来快速的定位特定元素以及节点信息。
需要安装C语言库,可使用 pip 安装:pip install lxml
Num03–爬取贴吧图片案例
from urllib import request, parse# 导入lxml库的etree类用来处理HTML源文件,注意此处导入的是lxml的3.7.1版本from lxml import etreeclass TiebaSpider(object): def __init__(self): self.tieba_name = input('请输入要爬取的贴吧的名字:') self.begin_page = int(input('请输入要爬取的起始页:')) self.end_page = int(input('请输入要爬取的终止页:')) self.baseURL = 'https://tieba.baidu.com/f?' self.headers = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)'} def tieba_spider(self): '''贴吧爬虫调度器,用来构造url''' # 组合搜索的关键字 keyword_name = {'kw': self.tieba_name} # 对关键字进行编码,后面加不加encode(’utf-8‘),要尝试才只知道的 kw_name = parse.urlencode(keyword_name) # 组合请求路径 url = self.baseURL + kw_name # 分页处理的爬虫,range()函数是包左不包右 for page in range(self.begin_page, self.end_page + 1): pn_page = (page - 1) * 50 pn = parse.urlencode({'pn': pn_page}) # 组合最全的url路径 fullurl = url + '&' + pn html = self.load_request(fullurl) self.deal_page(html) def load_request(self, url): '''发送请求,返回html页面''' req = request.Request(url, headers=self.headers) try: response = request.urlopen(req) return response.read() except: print('亲!下载失败...') def deal_page(self, html): '''处理贴吧每一页''' # 转换为html的dom html = etree.HTML(html) # 提取每一页里面每条帖子的链接,/p/1234567890,返回一个列表 link_page = html.xpath('//div[@class="t_con cleafix"]/div/div/div/a/@href') for every_page in link_page: print('正在处理第%s页' % every_page) # 拼接url url_page = 'https://tieba.baidu.com' + every_page # 发送请求,返回每个帖子的响应文件 html = self.load_request(url_page) self.load_image(html) def load_image(self, html): '''处理每个帖子的文件,提取图片链接,发送图片请求''' html_image = etree.HTML(html) link_image = html_image.xpath('//img[@class="BDE_Image"]/@src') for every_image in link_image: # 发送图片请求链接 data = self.load_request(every_image) self.write_image(data, every_image[-10:]) def write_image(self, data, param): print('正在保存图片%s' % param) '''把提取到的图片存放到本地磁盘文件''' with open(param, 'wb') as f: f.write(data)if __name__ == '__main__': spider = TiebaSpider() spider.tieba_spider()
阅读全文
0 0
- Python爬虫Xpath和lxml类库系列之九
- Python爬虫之Xpath与lxml库的用法
- python爬虫之XPath与lxml的使用
- Python爬虫利器三之Xpath语法与lxml库的用法
- Python爬虫利器三之Xpath语法与lxml库的用法
- python爬虫入门笔记:XPath与lxml库
- 三.Python爬虫Xpath语法与lxml库的用法
- python网络爬虫系列教程——python中lxml库应用全解(xpath表达式)
- python爬虫之lxml
- 爬虫工具lxml库的使用和Xpath语法
- XPATH(lxml)爬虫测试
- Python的lxml库学习之XPATH语法
- python之xpath爬虫
- python爬虫之xpath
- Java调用python之lxml解析xpath
- python爬虫攻略(6):lxml与xpath
- python xpath语法与lxml库
- Python lxml xpath
- web项目bug总结
- The first time
- acl权限验证
- Feel Good POJ
- Win+Debian下更改硬盘分区的影响及解决办法
- Python爬虫Xpath和lxml类库系列之九
- HDU-5367 digger(线段树区间合并)
- c++中new/delete与malloc/free的区别与联系
- 菱形继承
- git--多人合作
- 【BZOJ】3343 教主的魔法 分块
- UVA
- nfs的初探
- android_在线播放器