【问题标题】:Get final url after timed delay or redirect定时延迟或重定向后获取最终 url
【发布时间】:2017-11-17 18:09:27
【问题描述】:

我正在尝试抓取一个网站,但是当我打开网页时,它有 5 秒的重定向延迟,即您必须等待 5 秒,然后才能加载真正的页面。 我试过下面的代码。

from bs4 import BeautifulSoup
import time
import requests

r=requests.get("https://etherscan.io/address/0xc257274276a4e539741ca11b590b9447b26a8051",timeout=6)
time.sleep(5) 
print(r.history)

data=r.text

soup=BeautifulSoup(data)

print(soup.prettify())

但是当我运行代码时,我得到的是重定向页面,而不是最终页面。感谢您的帮助

【问题讨论】:

  • 我认为抓取这个网站更适合 Selenium。BeautifulSoup 几乎没有 JavaScript 功能
  • 是的,看起来它正在使用 cloudflare,selenium 将是您最简单的方法
  • Etherscan 拥有an API。您可能应该使用它,除非您无法获得所需的信息。

标签: python web-scraping beautifulsoup python-requests


【解决方案1】:

看起来 etherscan.io 受 Cloudflare 保护,而 Cloudflare 导致了您所看到的延迟重定向。 Cloudflare 的目的之一是防止机器人向站点发出自动请求(这看起来很像您正在做的事情)。

绕过 Cloudflare 并非易事。首先,您需要让您的请求“看起来像”它们来自真实的浏览器 - 这意味着您用来发出这些请求的工具需要呈现与真实浏览器相同的请求标头,处理 cookie 之类的浏览器会像浏览器一样运行 javascript,等等。

即使您成功完成上述所有操作,Cloudflare 也可能会在一段时间内发出一定数量的请求后阻止您的请求(或质疑它们)。

【讨论】:

    【解决方案2】:

    如果您真的打算使用 selenium 或 API 以外的其他东西(这是最有意义的),您可以查看 this。这是一个用于处理 cloudflare 站点的爬虫,但它需要一些其他的东西(尤其是 Node.js)才能运行。虽然这很简洁,但当有更简单的解决方案时似乎很痛苦。

    【讨论】:

      猜你喜欢
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 2015-09-08
      • 2013-05-02
      • 1970-01-01
      • 2022-09-28
      • 2017-07-11
      相关资源
      最近更新 更多