爬虫必备技能之网页解析库:xpath用法和实战

环-境设置
1.本文运用的python版本是python3
2.运用到的依赖包以下
requests
scrapy
在安置 scrapy 以前必-要先安置 Twisted 位置
https://www.lfd.uci.edu/~gohlke/pythonlibs/twisted啦。下载吻合自己版本的 Twisted,然后将其放入 python 安置纲发中,先运用下令安置 pip install Twisted啦。安置完之后,scrapy 就很简易安置了,安置下令以下 pip install scrapy啦。
本文亮点
1.xpath 基本语法和用法示例
2.运用 xpath 爬取《盗墓笔-记》实例
xpath 基本语法
xpath,全称 XML Path Language,即 XML 途径语言,她是一门在 XML 文档中查找信息的语言啦。
xpath 的选择功效十分强盛,她供应了十分简练清晰的途径选择讲明式,全部一切咋们要定位的节点都能够用 xpath 来选择啦。一最先的时刻咋们来看下 xpath 的基本语法啦。
在这里列出了xpath的经常使用结婚谋划,比如 / 代表选取直-接子节点,// 代表选择一切子孙节点,. 代表选取现在节点,.. 代表选取现在节点的父节点,@ 则是加了属性的,选取结婚属性的特定节点啦。
xpath 用法举例
接下去咋们以豆瓣电影为按例,来熟习一下 xpath 基本用法
掀开网页
/top250
豆瓣电影top250
一最先的时刻必-要找出咋们所结婚的内容在 html 中的职位啦。
从图片中能够看到榜单第一的电影题目是在标签为 div,class 属性为 *hd中的 a 标签中一切的 span 标签内里!
然后咋们必-要一级一级往上面找,由于这个层级太深了,有一些时刻候会结婚不到咋们所必-要的内容啦。
咋们最最先结婚的标签要知足她的一切特色加起身是惟一的啦。
很简易看到属性为 article 即是咋们所必-要的标签!由于找不到第两个 div 标签且class 属性为 article 的标签!
由于是文本内容,因此要用 text(),获取电影题目语法以下
1html.xpath(".//div[@class='article']/ol/li[1]//div[@class='hd']/a//span[1]/text()")
同理,咋们获取电影真相链接的语法,由于是属性,因此要用 @属性值
1html.xpath(".//div[@class='article']/ol/li[1]//div[@class='hd']/a/@href")
咋们能够将其参与到爬虫代码中,结局以下
豆瓣电影爬虫
运用 xpath 爬取盗墓笔-记
目的位置:
盗墓笔-记全篇 /
所有思绪
1.剖析网页结构,取出咋们必-要的题目,和下一步必-要用到的链接
2.依照章节的链接位置,再爬取出章节小说
一最先的时刻剖析咋们必-要爬取的内容,在网页中的职位啦。
通过上面的解说,信赖我们很简易就能写出 xpath 的语法啦。由于咋们是要爬取一切小说内容,因此咋们要重复一切 li 标签内里的内容!
1html.xpath(".//div[@class='box']/ul//li")
遍历这个列表,取出咋们所必-要的章节,一五一十链接
1li_list = selector.xpath(".//div[@class='box']/ul//li")
2 for text in li_list:
3 title = text.xpath("./a/text()").extract_first('')
4 href = text.xpath('./a/@href').extract_first('')
接下去,从真相链接中取出小说内容,即完结了这个小爬虫!
1p_list = selector.xpath(".//div[@class='content-body']//p")
2 for data in p_list:
3 content += data.xpath("./text()").extract_first('')
最主要的剖析部-分完结了,接下去主要即是将一切的内容放入代码中,然后保留到当地就完结了啦。
最终爬虫代码以下
1 coding: utf-8
2from scrapy import Selector
3import requests
4
5
6class KeyEnum(object):
7 TITLE = "title"
8 CONTENT = "content"
9 HREF = "href"
10
11
12class NovelSpider(KeyEnum):
13
14 def __init__(self):
15 self.headers = {
16 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
17 "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
18 }
19
20 def spider(self):
21 url = '/'
22 response = requests.get(url, headers=self.headers)
23 selector = Selector(text=response.content)
24 data_list = []
25 li_list = selector.xpath(".//div[@class='box']/ul//li") 章节列表
26 for text in li_list:
27 title = text.xpath("./a/text()").extract_first('') 题目
28 href = text.xpath('./a/@href').extract_first('') 链接
29 content = self._content_spider(href) 真相页面爬虫
30 data_list.append(
31 {
32 KeyEnum.HREF: href,
33 KeyEnum.TITLE: title,
34 KeyEnum.CONTENT: content,
35 }
36 )
37
38 return data_list
39
40 def _content_spider(self, url):
41 content = ''
42
43 for _ in range(5): 由于没用代庖,如果失利,再重试5次
44 if url: 加个url是否为空的判断
45 response = requests.get(url, headers=self.headers)
46 if response.status_code 麽!= 200:
47 continue
48 selector = Selector(text=response.content)
49
50 p_list = selector.xpath(".//div[@class='content-body']//p")
51 for data in p_list:
52 content += data.xpath("./text()").extract_first('')
53
54 return content
55
56 def main(self):
57 data_list = self.spider()
58 for i in data_list:
59 with open('盗墓笔-记.txt', 'a', encoding='utf-8')as f:
60 f.write(i['content'])
61
62
63if __name__ == '__main__':
64 spider = NovelSpider()
65 spider.main()
总结
本文主要推荐了 python 中剖析库 xpath 的运用办法和示例,用法一开始很简易,主要在于多多训练!下篇短文计划分享另一位剖析库 css 的用法,和和 xpath 之中的区分,迎接体贴!
如果以为不错或者对你有帮-助,请分享给更多人
体贴[Python编程与实战]
从零最先学Python,提升Python技术


除非特别注明,本站所有文字均为原创文章,作者:admin

No Comment

留言

电子邮件地址不会被公开。 必填项已用*标注

感谢你的留言。。。