0
点赞
收藏
分享

微信扫一扫

Python 爬虫使用 xpath 获取元素为空


最近刚准备小弄一下爬虫,就遇到了反爬虫制裁,获取元素老是为空。

是这样的,之前QQ群总能看见一分钟简讯新闻的图片,觉得挺好的,就准备弄一个今日快看分类,每天更新。然后找到了 ​​365 资讯简报​​, 准备写一个 python 脚本定时爬取内容并发布到博客。

但是对于爬虫小白来说,却是出师不利,用 xpath 获取不到需要的元素。

首先,我是这样获取的。

import requests
import re
from lxml import etree

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36"}

res = requests.get("https://www.163.com/dy/media/T1603594732083.html",headers=headers)

selector = etree.HTML(res.text)

target = selector.xpath("/html/body/div/div[2]/div[2]/div[1]/div[3]/ul/li[1]/a/@href")

print(target)

结果是获取不到最新文章的链接的。

Python 爬虫使用 xpath 获取元素为空_python

因为 ​​/html/body/div/div[2]/div[2]/div[1]/div[3]/ul/li[1]/a/@href​​ 是这样来的。

Python 爬虫使用 xpath 获取元素为空_html_02

这是经过浏览器渲染后的元素。

后来将源代码保存为 html 元素后发现,浏览器选然后比原来多了一个 div 元素。​​<div id="fixed_line_e12ff311d0" style=""></div>​​ 应该是 js 在后期加上去的。

将​​/html/body/div/div[2]/div[2]/div[1]/div[3]/ul/li[1]/a/@href​​​ 改为 ​​/html/body/div/div[2]/div[2]/div[1]/div[2]/ul/li[1]/a/@href​​,问题顺利解决。

Python 爬虫使用 xpath 获取元素为空_开发语言_03

这是因为反爬虫的机制,提高了爬虫的门槛,所以还是不能直接复制 xpath 地址,需要把源代码下载下来进行分析。


举报

相关推荐

0 条评论