我目前正在构建一个网络刮刀,并遇到了IP被封锁的问题。为了解决这个问题,我尝试使用旋转器,它使用AWS的大型IP池作为代理,生成用于web抓取的伪无限IP。在这个答案之后,我将其实现到代码中,如下所示:
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)的亚马逊网关时,它给我的不是和以前一样的页面,而是来自同一个站点的不同的页面。我对这个问题感到困惑,所以任何帮助都是非常感谢的!
发布于 2022-03-30 23:35:29
当使用AWS网关向"https://secure.runescape.com“域发出get请求时,我注意到,如果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阻塞。
https://stackoverflow.com/questions/71643958
复制相似问题