Pythonanywhere 上的网页抓取

ahm*_*234 -1 python user-agent beautifulsoup web-scraping pythonanywhere

在我的项目中,我从亚马逊抓取数据。我将其部署在 Pythonanywhere 上(我使用付费帐户)。但是有一个问题,当我在 Pythonanywhere 上尝试时,代码(我使用的是 BeautifulSoup4)无法获取网站的 html。它获得了亚马逊的“出问题了”网站。但在我本地它工作得很好。我认为它与用户代理有关。在我的本地,我使用我自己的用户代理。部署时我应该使用哪个用户代理?我该如何解决这个问题?

这是我的代码:

            URL = link    ##some amazon link
            headers = {"User-Agent": " ##my user agent"}

            page = requests.get(URL, headers=headers)
            soup1 = BeautifulSoup(page.content, 'html.parser')
            soup2 = BeautifulSoup(soup1.prettify(), "html.parser")
Run Code Online (Sandbox Code Playgroud)

有什么办法可以在 Pythonanywhere 上做到这一点吗?

小智 5

您的代码在我的家用机器上完美运行,因此问题可能是:

  • PythonAnywhere 机器的 IP 被亚马逊阻止(正如其他人提到的)
  • 机器访问互联网的另一个问题(尝试抓取另一个网站来测试这一点)

为了解决前者,您可能需要尝试代理连接来更改您访问 Amazon 的 IP(我建议您检查 PythonAnywhere 和 Amazon 的服务条款以了解任何风险)。用法看起来像这样:

import requests
proxies = { 
    "http": "http://IP:Port", # HTTP
    "https": "https://IP:Port", # HTTPS
    'http': 'socks5://user:pass@IP:Port' # SOCKS5
}
URL = "https://api4.my-ip.io/ip" # Plaintext IPv4 to test
page = requests.get(URL, proxies=proxies)
print(page.text)
Run Code Online (Sandbox Code Playgroud)

寻找可用的代理需要进行几次谷歌搜索,但困难的部分是偶尔更换它们,因为它们不会永远持续下去。