requests_html中proxies参数失效问题求助
解决requests-html中proxies参数在render时不生效的问题
我一眼就看出问题所在啦——你设置的proxies只对session.get()发起的初始HTTP请求生效,但当你调用r.html.render()时,requests-html会启动无头浏览器(基于Pyppeteer)重新加载页面,这部分浏览器请求并没有继承你设置的代理配置,所以才会返回你的本地IP。
要解决这个问题,你需要直接给render()方法配置代理,因为它是独立于requests的请求流程的。具体处理方式如下:
- 确保你的代理IP支持HTTPS请求(谷歌搜索是HTTPS站点,HTTP代理可能无法处理HTTPS流量)
- 在
render()中通过proxy参数传递代理地址,格式为http://ip:port(如果代理需要认证,格式为http://username:password@ip:port)
修改后的完整代码如下:
from requests_html import HTMLSession # 谷歌搜索IP的目标URL url = 'https://www.google.com/search?q=what+is+my+IP&oq=what+is+my+IP&aqs=chrome..69i57j0l7.13217j0j7&sourceid=chrome&ie=UTF-8' session = HTMLSession() # 初始请求同时配置http和https代理,避免初始请求走本地IP r = session.get(url, proxies={'http': 'http://161.202.226.194:80', 'https': 'http://161.202.226.194:80'}) # 给render方法传入代理参数,确保无头浏览器请求走代理 r.html.render(timeout=25, proxy='http://161.202.226.194:80') # 注意:xpath返回的是元素列表,需取第一个元素再获取文本内容 ip = r.html.xpath("//span[@style='font-size:20px']")[0].text print(ip)
另外补充几个关键细节:
- 初始请求的
proxies最好同时配置http和https,避免初始页面加载走本地IP - 你原代码中xpath查询直接调用
.text会报错,因为返回的是元素列表,我已经帮你修正为取第一个元素 - 务必确认你的代理IP是可用且未被谷歌封禁的,公开免费代理通常生命周期很短,建议先单独测试代理的连通性
内容的提问来源于stack exchange,提问作者fardV
相关产品推荐
相关产品推荐

