XPath
什么是XPath
1、解析HTML的语言
2、几乎所有语言都能使用
3、不是唯一手段,还有BeautifulSoup、lxml等
XPath语法
XPath语法其实只有3大类
层级
/ 直接子集,从根节点中选取
// 跳级,从匹配的当前节点选择文档中的节点,而不考虑他们的位置
.选取当前节点
…选取当前节点的父节点
属性
@进行属性访问
函数
contains()用于检测包含
text()文本节点,通过text来提取
能复制就复制呗,手打其实也ok,不过还是复制之后改一下比较方便啦
不过还是要懂里面的路径之类的,找到里面的路径就可以开心地爬取了
使用XPath
在浏览器中使用XPath
作业1
import requests
from lxml import etree
import lxml
import re
from bs4 import BeautifulSoup
url="https://movie.douban.com/cinema/nowplaying/hangzhou/"
resp =requests.get(url)
html =resp.text
res=etree.HTML(html)
#提取正在上映的电影名
res.xpath("""//*[@id="nowplaying"]/div[2]/ul/li/ul/li[2]/a/text()""")
#提取即将上映的电影名
res.xpath("""//*[@id="upcoming"]/div[2]/ul/li/ul/li[2]/a/text()""")
#两者一起提取
res.xpath("""//ul/li[2]/a/text()""")
在这里有一个疑惑,就是空格和换行符的去除
之前接触到的去除空格是rstrip,尝试之后得出一个错误提示,也就是列表不能够使用,在百度以后,尝试了normalize-space,输出结果只显示了第一个“阿拉丁”。这个问题尚待解决。
输出结果1
输出结果2
作业2
import requests
from lxml import etree
import lxml
url="https://www.bilibili.com/ranking/all/0/0/1"
resp=requests.get(url)
html=resp.text
res=etree.HTML(html)
type(res)
res.xpath("""//*[@id="app"]/div[2]/div/div[1]/div[2]/div[3]/ul/li/div[2]/div[2]/a/text()""")
结果