新手入门之xpath实战讲解

上篇讲解了pyquery库的入门讲解,今天讲解用xpath解析网页的实战

首先,运用xpath时,我们先导入这个库。

from lxml import etree

因为这次算是上次的延续,所以我们仍用https://www.duanwenxue.com作为目标网页。
用requests库请求网页

url = 'https://www.duanwenxue.com'
headers = {
    'User - Agent': 'Mozilla / 5.0(Windows NT 10.0;WOW64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 55.0.2883.87Safari / 537.36'
}
r = requests.get(url,headers = headers)
html = r.text

仍然提取的内容也是上篇的,如图
新手入门之xpath实战讲解
蓝色部分就是我们要提取的东西,首先开发者工具定位,发现它是a标签里的href属性值,我们采用以下代码定位到a标签,定位前要先用etree中的HTML方法把我们得到的文本转换为xpath能解析的格式。然后我们分析网页,发现它在div标签下ul标签下的li标签下的a标签。因为div这个标签有很多,所以我们加个[@属性]的方法定位含有确定属性的div标签,这个方法有点像beautifulsoup中定位方法。

methods = etree.HTML(html)
hre = methods.xpath('//div[@class = "subnav"]/ul/li/a')

用print输出一下,可以得到

[<Element a at 0x1f8d588cdc8>, <Element a at 0x1f8d58d7a88>, <Element a at 0x1f8d58d7908>, <Element a at 0x1f8d58d7ac8>, <Element a at 0x1f8d58d7b08>, <Element a at 0x1f8d58d7b88>, <Element a at 0x1f8d58d7bc8>, <Element a at 0x1f8d58d7c08>, <Element a at 0x1f8d58d7c48>, <Element a at 0x1f8d58d7b48>, <Element a at 0x1f8d58d7c88>, <Element a at 0x1f8d58d7cc8>, <Element a at 0x1f8d58d7d08>, <Element a at 0x1f8d58d7d48>, <Element a at 0x1f8d58d7d88>, <Element a at 0x1f8d58d7dc8>, <Element a at 0x1f8d58d7e08>, <Element a at 0x1f8d58d7e48>, <Element a at 0x1f8d58d7e88>, <Element a at 0x1f8d58d7ec8>, <Element a at 0x1f8d58d7f08>, <Element a at 0x1f8d58d7f48>]

输出会是一种格式,接着我们用text()将其输出

hre = methods.xpath('//div[@class = "subnav"]/ul/li/a/text()')

将以列表形式得到

['散文随笔', '美文欣赏', '感人故事', '爱情文章', '心情随笔', '抒情散文', '诗歌大全', '爱情诗句', '伤感文字', '人生感悟', '人生哲理', '经典语录', '唯美句子', '励志文章', '生活随笔', '爱情语录', '故事会', '伤心的句子', '感人的话', '表白的话', '经典话语', '句子大全']

而我们想要的是href属性,所以我们把text()去掉,用之前的代码,用for把里面的内容单独分析,用get(‘属性’)的方法获取。

for hre in hre :
    print(hre.get('href'))

输出一下

/sanwen/suibi/
/qinggan/meiwen/
/shanggan/ganrengushi/
/qinggan/aiqing/
/diary/suibi/
/sanwen/shuqing/
/shige/
/shige/aiqingshiju/
/rizhi/shangganwenzi/
/jingdian/ganwu/
/jingdian/zheli/
/yuju/yulu/
/yuju/weimei/
/jingdian/lizhi/
/jingdian/shenghuo/
/yulu/aiqing/
/jingdian/gushi/
/yuju/shangxin/
/huayu/ganren/
/huayu/biaobai/
/huayu/
/juzi/

就是我们要的属性值了,接着再把它拼接成我们想要的网页即可。