python - 如何绕过机器人检测并使用 python 抓取网站
问题描述
问题
我是网络抓取的新手,我正在尝试创建一个抓取器,它查看播放列表链接并获取音乐和作者的列表。
但是该站点一直拒绝我的连接,因为它认为我是一个机器人,所以我使用 UserAgent 创建了一个假的 useragent 字符串来尝试绕过过滤器。
它有点工作?但问题是,当你通过浏览器访问网站时,你可以看到播放列表的内容,但是当你尝试通过请求提取 html 代码时,播放列表的内容只是一个很大的空白。
Mabye 我必须等待页面加载?还是有更强大的机器人过滤器?
我的代码
import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
ua = UserAgent()
melon_site="http://kko.to/IU8zwNmjM"
headers = {'User-Agent' : ua.random}
result = requests.get(melon_site, headers = headers)
print(result.status_code)
src = result.content
soup = BeautifulSoup(src,'html.parser')
print(soup)
网站链接
使用请求时得到的 html
解决方案
刮痧时要记住的要点
1)使用一个好的用户代理.. ua.random 可能会返回一个被服务器阻止的用户代理
2)如果你正在做太多的抓取,请限制你的抓取速度,使用 time.sleep() 这样服务器可能不会被你的 IP 地址加载,否则它会阻止你。
3)如果服务器阻止您尝试使用 IP 轮换。
推荐阅读
- python - Python 脚本在 crontab 中不起作用,但在其他情况下调用时起作用
- php - 为什么isset函数不更新我的数据库?
- javascript - 将每个对象的 X、Y 坐标获取到 fabric.js 中的数组
- c# - 删除 ListBox WPF 中的选择
- javascript - 在 jQuery 中调整大小
- iis - 301重写规则导致SEO警报
- token - 从外部文件调用电报令牌
- java - 如何防止选择不同的 JTable 行?
- android - 为什么在尝试 getBearing() 时 getAccuracyBearingDegrees() 返回 0.0?
- python - 模型的属性