Urllib爬取同域名多页面内容重复,疑似被识别为机器人求助
解决方法:通过Requests添加请求头伪装浏览器
你遇到的问题是典型的反爬机制——服务器通过检查请求的User-Agent等头部信息,识别出你的请求来自脚本而非真实浏览器,于是返回了重复的第一页内容。用requests库可以很方便地自定义请求头,绕过这个检测。
步骤1:安装Requests(如果还没装)
如果你的环境里没有requests,先通过pip安装:
pip install requests
步骤2:自定义请求头,模拟真实浏览器请求
你需要给请求加上常见的浏览器请求头,比如User-Agent、Accept-Language等,让服务器认为你是真实用户。示例代码如下:
import requests # 定义请求头,这里用Chrome浏览器的示例UA,你也可以换成自己浏览器的UA headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' } # 爬取第一页 response_1 = requests.get(url_1, headers=headers) html_1 = response_1.text # 或者用response_1.content获取二进制内容 # 爬取第三页 response_2 = requests.get(url_2, headers=headers) html_2 = response_2.text # 可以先打印状态码确认请求是否成功(200表示成功) print(response_1.status_code) print(response_2.status_code)
额外注意事项
- 如果还是不行,可以尝试添加更多请求头字段,比如
Referer(表示你是从哪个页面跳转过来的),或者设置cookies(有些网站需要cookie验证)。 - 不要频繁请求,避免触发更严格的反爬(比如IP封禁),可以在请求之间加短暂的延迟:
import time time.sleep(2) # 每次请求后暂停2秒
- 检查URL是否正确:有时候分页参数可能不是直接在URL里的数字,比如有些网站用
page=3但你可能写错了参数名,先确认url_2确实是第三页的正确链接。
内容的提问来源于stack exchange,提问作者DimKoim
相关产品推荐
相关产品推荐

