爬虫学习打卡3——xpath

写在前面的话:每一个实例的代码都会附上相应的代码片或者图片,保证代码完整展示在博客中。最重要的是保证例程的完整性!!!方便自己也方便他人~欢迎大家交流讨论~

Lxml(xpath)

爬虫的抓取方式有好几种,正则表达式,Lxml(xpath)与BeautifulSoup,上一篇讲了用BeautifulSoup来爬取网页图片,这一篇轮到用Lxml(xpath)。继续上实例操作。

xpath简单用法

from lxml import etree
s=etree.HTML(源码) #将源码转化为能被XPath匹配的格式
s.xpath(xpath表达式) #返回为一列表

基础语法

1 // 双斜杠 定位根节点,会对全文进行扫描,在文档中选取所有符合条件的内容,以列表的形式返回。
2 / 单斜杠 寻找当前标签路径的下一层路径标签或者对当前路标签内容进行操作
3/text() 获取当前路径下的文本内容
4/@xxxx 提取当前路径下标签的属性值
5| 可选符 使用|可选取若干个路径 如//p | //div 即在当前路径下选取所有符合条件的p标签和div标签。
6. 点 用来选取当前节点
7.. 双点 选取当前节点的父节点

获取单个页面单条数据

1.获取书名

打开豆瓣读书前250条
豆瓣图书 Top 250 https://book.douban.com/top250
右键审查元素,想我上一篇讲到的一点一点点击下去直到找到标题内容“追风筝的人”,然后对标题的代码(即下图蓝色部分)右键——copy——copy xpath得到标题的xpath
//*[@id="content"]/div/div[1]/div/table[1]/tbody/tr/td[2]/div[1]/a
这里写图片描述
开始写代码爬取

from lxml import etree
import requests
url="https://book.douban.com/top250"
respon=requests.get(url)#得到响应
responHtml=respon.text#打印html内容
s=etree.HTML(responHtml)#将源码转化为能被XPath匹配的格式
#在s.xpath()中填入xpath表达式是要去掉多余的tbody标签,否则返回为空列表
bookTitle=s.xpath('//*[@id="content"]/div/div[1]/div/table[1]/tr/td[2]/div[1]/a')#返回为一列表,列表内容为爬取的标题
print (bookTitle)

运行结果:In[1]中为没有去掉/tbody返回的空列表,In[2]中是去掉之后的返回值
这里写图片描述
完善步骤1:在xpath表达式中再加入/text() 获取当前路径下的文本内容(见基础语法3)
bookTitle=s.xpath('//*[@id="content"]/div/div[1]/div/table[1]/tr/td[2]/div[1]/a/text()')
运行结果:
这里写图片描述
完善步骤2:在xpath表达式中再加入[0]返回列表中的唯一一个元素也就是标题bookTitle=s.xpath('//*[@id="content"]/div/div[1]/div/table[1]/tr/td[2]/div[1]/a/text()')[0]
运行结果:
这里写图片描述

2.获取评分和评分人数

按刚刚说的方法得到xpath

#标题的xpath为//*[@id="content"]/div/div[1]/div/table[1]/tbody/tr/td[2]/div[1]/a
#评分的xpath为//*[@id="content"]/div/div[1]/div/table[1]/tbody/tr/td[2]/div[2]/span[2]
#评价人数的xpath为//*[@id="content"]/div/div[1]/div/table[1]/tbody/tr/td[2]/div[2]/span[3]
from lxml import etree
import requests
url="https://book.douban.com/top250"
respon=requests.get(url)#得到响应
responHtml=respon.text#打印html内容
s=etree.HTML(responHtml)#将源码转化为能被XPath匹配的格式
#在s.xpath()中填入xpath表达式是要去掉多余的tbody标签,否则返回为空列表
bookTitle=s.xpath('//*[@id="content"]/div/div[1]/div/table[1]/tr/td[2]/div[1]/a/text()')[0]#返回为一列表,列表内容为爬取的标题
bookScore=s.xpath('//*[@id="content"]/div/div[1]/div/table[1]/tr/td[2]/div[2]/span[2]/text()')[0]
bookPeople=s.xpath('//*[@id="content"]/div/div[1]/div/table[1]/tr/td[2]/div[2]/span[3]/text()')[0]
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值