共计 918 个字符,预计需要花费 3 分钟才能阅读完成。
最近刚准备小弄一下爬虫,就遇到了反爬虫制裁,获取元素老是为空。
是这样的,之前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)
结果是获取不到最新文章的链接的。
因为 /html/body/div/div[2]/div[2]/div[1]/div[3]/ul/li[1]/a/@href
是这样来的。
这是经过浏览器渲染后的元素。
后来将源代码保存为 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
,问题顺利解决。
这是因为反爬虫的机制,提高了爬虫的门槛,所以还是不能直接复制 xpath 地址,需要把源代码下载下来进行分析。
提醒:本文发布于786天前,文中所关联的信息可能已发生改变,请知悉!
AD:【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年
正文完