【问题标题】:get a lot of HTML pages with python url requests获取大量带有 python url 请求的 HTML 页面
【发布时间】:2021-10-27 12:23:23
【问题描述】:

我正在尝试从某个网站下载大量 HTML 页面,并使用以下 python 代码使用“请求”包:

FROM = 547495 
TO = 570000
for page_number in range(FROM, TO):
    url = DEFAULT_URL + str(page_number)
    response = requests.get(url)
    if response.status_code == 200:
            with open(str(page_number) + ".html", "wb") as file: 
                file.write(response.content)
    time.sleep(0.5)

我设置了一个 sleep(0.5) 命令,以便网络服务器不会认为这是 DDOS 攻击。

大约 20,000 个页面后,我开始只收到 403 禁止 http 状态码,并且我无法再下载页面。 但是,如果我尝试在浏览器中打开相同的页面,它会很好地打开,所以我猜网络服务器并没有阻止我。 有人有想法是什么原因造成的吗?我该如何处理?

谢谢

【问题讨论】:

  • DEFAULT_URL 意识到您正在抓取它并阻止您。尝试使用代理。
  • 另外,请阅读他们的 TOS,或许可以找到 API。当 ppl 刮你并且你有一个 API 时,这真的很烦人
  • 你可以更改标题吗?
  • 它可能希望你使用一些标题。
  • @mplungjan 他们没有 API。

标签: python html httprequest


【解决方案1】:

使用标头使其看起来像是您的浏览器,并在需要会话时设置 cookie ID,这是一个示例。您可以在访问页面时通过检查浏览器中的“网络”选项卡来检索标题的值。

with requests.session() as sess:
        sess.headers["User-Agent"]= "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0"
        sess.get(url)
        sess.headers["Cookie"] = "eZSESSID={}".format(sess.cookies.get("eZSESSID"))
        for page_number in range(FROM, TO):
            if response.status_code == 200:
                with open(str(page_number) + ".html", "wb") as file: 
                    file.write(response.content)
            time.sleep(0.5)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    相关资源
    最近更新 更多