python请求bot检测?

时间:2014-04-09 15:10:30

标签: python web-scraping python-requests

我一直在使用requests库来挖掘这个网站。我在10分钟内没有提出过多请求。说25.突然之间,网站给了我404错误。

我的问题是:我在某处读到,使用浏览器获取网址与获取类似requests之类的网址不同。因为requests fetch不会获取cookie和浏览器的其他内容。 requests中是否有选项可以模拟浏览器,因此服务器并不认为我是机器人?或者这不是问题吗?

3 个答案:

答案 0 :(得分:5)

基本上,您可以做的至少一件事是发送User-Agent标题:

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0'}

response = requests.get(url, headers=headers)

requests之外,您可以使用selenium模拟真实用户 - 它使用真实浏览器 - 在这种情况下,显然没有简单的方法可以区分您的自动用户与其他用户。 Selenium也可以使用“无头”浏览器。

另外,检查您正在抓取的网站是否提供了API。如果没有API或您没有使用它,请确保您知道该网站是否真的允许这样的自动网络抓取,研究Terms of use。你知道,在一段时间内请求过多后,他们可能会阻止你。

另见:

答案 1 :(得分:1)

总的来说可以帮助您的事情:

  • 标题应类似于常见的浏览器,包括:
  • 导航:
    • 如果您有多个请求,请在它们之间放置一个随机超时
    • 如果打开页面中找到的链接,请相应地设置 Referer 标头
    • 或者更好的方法是模拟鼠标活动以移动,单击并跟随链接
  • 图像应启用
  • JavaScript 应该已启用
    • 检查是否在客户端JavaScript页面上下文中设置了“ navigator.plugins ”和“ navigator.language
  • 使用代理

答案 2 :(得分:0)

第一个答案是使用selenium模块的范围有点可检测,然后请求模块selenium在Webdriver上工作,而不是在您使用的普通浏览器上工作,它既不发送也不接收Cookie,并且停用了javascript,这使其更容易要使网站检测到最佳的赌注,一个完整的无法检测到的机器人将是puppeteer和js,然后其他所有东西都可以被检测到,但是总有一种欺骗任何东西的方式

相关问题