为什么在使用 requests.get(URL) 时使用亚马逊 API 网关会给出错误的 HTML 页面
Why does using Amazon API gateway give the wrong HTML page when using requests.get(URL)
我目前正在构建网络抓取工具,并且 运行 遇到了 IP 被阻止的问题。为了解决这个问题,我尝试使用 requests_ip_rotator which use AWS API Gateway's large IP pool as a proxy to generate pseudo-infinite IPs for web scraping. Following 我已经将它实现到我的代码中,如下所示:
import requests
from bs4 import BeautifulSoup
from requests_ip_rotator import ApiGateway, EXTRA_REGIONS
url = "https://secure.runescape.com/m=hiscore_oldschool_ironman/a=13/group-ironman/?groupSize=5&page=1"
page1 = requests.get(url)
soup1 = BeautifulSoup(page1.content, "html.parser")
gateway = ApiGateway("https://secure.runescape.com/",access_key_id="****",access_key_secret="****")
gateway.start()
session = requests.Session()
session.mount("https://secure.runescape.com/", gateway)
page2 = session.get(url)
gateway.shutdown()
soup2 = BeautifulSoup(page2.content, "html.parser")
print("\n"+page1.url)
print(page2.url)
print(soup1.head.title==soup2.head.title)
input()
输出:
Starting API gateways in 10 regions.
Using 10 endpoints with name 'https://secure.runescape.com/ - IP Rotate API' (10 new).
Deleting gateways for site 'https://secure.runescape.com'.
Deleted 10 endpoints with for site 'https://secure.runescape.com'.
https://secure.runescape.com/m=hiscore_oldschool_ironman/a=13/group-ironman/?groupSize=5&page=1
https://6kesqk9t6d.execute-api.eu-central-1.amazonaws.com/ProxyStage/m=hiscore_oldschool_ironman/a=13/overall
False
所以我两次使用 .get(url) 方法我都使用相同的 url 但接收不同的页面。 Request.get(url) 给了我想要的页面,但是当我将亚马逊网关与 session.get(url) 一起使用时,它没有给我与以前相同的页面,但是来自同一站点的不同页面。我对问题可能是什么感到难过,因此将不胜感激任何帮助!
当使用 AWS 网关向“https://secure.runescape.com”域发出获取请求时,我注意到如果 URL 路径是:"a=13/group-ironman/?groupSize=5&page=x"
对于任何 x 那么我得到一个 302 响应(重定向响应),它将我重定向到 URL 路径 "/a=13/overall"
。
这让我相信 runescape 服务器正在为某些 URL 重定向 AWS IP,但幸运的是它没有重定向我自己的 IP。
所以我的解决方法是在没有 AWS 网关的情况下使用 requests.get()
来重定向正在重定向的 URL,而对于同一站点的其他 URL,AWS 网关是没有被重定向,所以我仍在使用它来避免被 IP 阻止。
我目前正在构建网络抓取工具,并且 运行 遇到了 IP 被阻止的问题。为了解决这个问题,我尝试使用 requests_ip_rotator which use AWS API Gateway's large IP pool as a proxy to generate pseudo-infinite IPs for web scraping. Following
import requests
from bs4 import BeautifulSoup
from requests_ip_rotator import ApiGateway, EXTRA_REGIONS
url = "https://secure.runescape.com/m=hiscore_oldschool_ironman/a=13/group-ironman/?groupSize=5&page=1"
page1 = requests.get(url)
soup1 = BeautifulSoup(page1.content, "html.parser")
gateway = ApiGateway("https://secure.runescape.com/",access_key_id="****",access_key_secret="****")
gateway.start()
session = requests.Session()
session.mount("https://secure.runescape.com/", gateway)
page2 = session.get(url)
gateway.shutdown()
soup2 = BeautifulSoup(page2.content, "html.parser")
print("\n"+page1.url)
print(page2.url)
print(soup1.head.title==soup2.head.title)
input()
输出:
Starting API gateways in 10 regions.
Using 10 endpoints with name 'https://secure.runescape.com/ - IP Rotate API' (10 new).
Deleting gateways for site 'https://secure.runescape.com'.
Deleted 10 endpoints with for site 'https://secure.runescape.com'.
https://secure.runescape.com/m=hiscore_oldschool_ironman/a=13/group-ironman/?groupSize=5&page=1
https://6kesqk9t6d.execute-api.eu-central-1.amazonaws.com/ProxyStage/m=hiscore_oldschool_ironman/a=13/overall
False
所以我两次使用 .get(url) 方法我都使用相同的 url 但接收不同的页面。 Request.get(url) 给了我想要的页面,但是当我将亚马逊网关与 session.get(url) 一起使用时,它没有给我与以前相同的页面,但是来自同一站点的不同页面。我对问题可能是什么感到难过,因此将不胜感激任何帮助!
当使用 AWS 网关向“https://secure.runescape.com”域发出获取请求时,我注意到如果 URL 路径是:"a=13/group-ironman/?groupSize=5&page=x"
对于任何 x 那么我得到一个 302 响应(重定向响应),它将我重定向到 URL 路径 "/a=13/overall"
。
这让我相信 runescape 服务器正在为某些 URL 重定向 AWS IP,但幸运的是它没有重定向我自己的 IP。
所以我的解决方法是在没有 AWS 网关的情况下使用 requests.get()
来重定向正在重定向的 URL,而对于同一站点的其他 URL,AWS 网关是没有被重定向,所以我仍在使用它来避免被 IP 阻止。