我正在尝试抓一个网站,我在python中使用Tor模块生成代理,然后使用请求模块抓取网站。但是,具有代理的请求模块由网站识别并返回api页面(带有显示某些api信息的消息的html)。但是,当我使用没有代理的请求(使用我的原始IP地址)时,我得到了适当的响应。我的问题是:网站如何正确识别来自代理的呼叫必须被阻止,并且必须接受原始IP(我当前的IP)。
import requests
from stem import Signal
from stem.control import Controller
def renew_connection():
with Controller.from_port(port=9051) as controller:
controller.authenticate(password="my_password")
controller.signal(Signal.NEWNYM)
proxies_http = {
'http': 'http://127.0.0.1:8118'
}
url = 'http://www.websitename.com' #### Not showing real address
page_with_proxy = requests.get(url , headers=random_header , proxies = proxies_http , timeout = 5)
page = requests.get(url , headers=random_header , proxies = None , timeout = 5)
这里page_with_proxy
有一些api信息(得到一些链接并注册api),但page
(其中proxies == None
)有适当的网页信息,包含所有html详细信息(我是能够找到所有的xpaths)。有没有办法绕过这个,或者如果使用代理,网站如何轻易理解请求?
答案 0 :(得分:0)
许多网站明确阻止来自tor节点(以及其他代理和/或vpn服务)的访问,或者至少需要某种额外的验证。它们通常通过将请求的ip地址与已知的tor出口节点列表进行匹配来实现此目的。
除了不通过代理服务传递您的请求之外,还没有一个好的解决方法。