首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何避免在从基于登录的站点抓取数据时被禁止?

如何避免在从基于登录的站点抓取数据时被禁止?
EN

Stack Overflow用户
提问于 2021-02-28 20:22:59
回答 6查看 2.2K关注 0票数 3

我正在尝试创建一个脚本,我可以在不被封锁的情况下解析网站上的几个字段。我希望获得数据的网站需要凭据才能访问它的内容。如果不是为了登录,我可以使用代理的旋转绕过速率限制。

当我从一个基于登录的网站上抓取内容时,我试图找出避免被该网站禁止的任何方法,同时从那里抓取数据。To be specific, my script currently can fetch content from that site flawlessly but my ip address gets banned along the way if I keep on scraping

到目前为止,我已经写了(认为下面的站点地址是占位符):

代码语言:javascript
运行
复制
import requests
from bs4 import BeautifulSoup

url = "https://stackoverflow.com/users/login?ssrc=head&returnurl=https%3a%2f%2fstackoverflow.com%2f"

with requests.Session() as s:
    s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
    req = s.get(url)

    payload = {
        "fkey": BeautifulSoup(req.text,"lxml").select_one("[name='fkey']")["value"],
        "email": "some email",
        "password": "some password",
    }
    
    res = s.post(url,data=payload)
    soup = BeautifulSoup(res.text,"lxml")
    for post_title in soup.select(".summary > h3 > a.question-hyperlink"):
        print(post_title.text)

如何避免在从基于登录的站点抓取数据时被禁止?

EN

回答 6

Stack Overflow用户

发布于 2021-03-03 19:45:03

直接说到“的任何有效方法都可以避免被禁止”,就没有办法

我会把这种情况比作鲨鱼袭击。这是鲨鱼的决定不是你的。

然而,你可以用一些技巧来减轻“鲨鱼攻击”.但首先,让我们清楚地表明,你首先要“攻击”鲨鱼,在它的领地游泳。

该技术将是:“创建一个人工刮取脚本”。

这里的单词human指的是有时会犯随机错误。其中一些国家列于下:

  • 在任务之间插入一些随机延迟;
  • 点击一些错误的链接,等待几秒钟,返回;
  • 把你从系统中登出来,等一两分钟,再登录一次;
  • 如果您在页面上有一个链接列表,然后单击并获取每个页面的数据,则不按顺序执行操作;
  • 如果您有一个在页面中显示结果的页面,那么获得结果不按顺序执行(例如)。1、5、2、9、10、3、7、4、8、6)
  • 别着急,每天都能得到很少的数据

然而,最有效的方法是联系网站所有者,如果他们有这种服务的话,通过API或类似的方式提供合作伙伴关系或支付访问数据的费用。

票数 7
EN

Stack Overflow用户

发布于 2021-03-09 13:49:08

我添加了一个类似的问题,使用selenium编写一个库,从网站中获取金融数据。

我发现的唯一有效的方法是在1秒左右添加一个随机延迟来模拟人类的行为,在每个请求之后(在循环结束时)使用下面的命令

代码语言:javascript
运行
复制
time.sleep( 1.0 +  numpy.random.uniform(0,1) )

您将有大约60分钟的请求。您可以调整1.0有一个频率,这是可以的网站。

如果网站计算出你的请求频率,它会发现准确的一分钟,这是非常可疑的,但现在我没有找到一个这样做。

票数 3
EN

Stack Overflow用户

发布于 2021-03-08 16:08:05

当尝试刮不想被刮的网站的时候,是有可能的。你需要为你的代码设置代理来运行。我使用ScrapingHub来主持我的刮刮项目。它将通过代理自动更改其ip地址。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66413511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档