如何用Python获取真实User Agent?解决requests_html爬取天气崩溃问题
问题:网页天气数据爬取中User Agent导致的崩溃问题
我正在写脚本从网页获取天气数据,现在遇到个问题:用了不符合目标网站要求的User Agent(哪怕UA本身是有效的),工具就会崩溃。
我试过这段代码生成随机UA:
from getuseragent import UserAgent useragent = UserAgent("all") theuseragent = useragent.Random()
大部分时候能用,但偶尔会直接崩溃。所以我想改用自己的真实User Agent,而不是随机或伪造的,求帮忙。
另外我用的是requests_html库和浏览器交互,当前代码片段是这样的:
def prepare_request(city): session = HTMLSession() url = f"https://www.bing.com/search?q=weather+{city}" request = session.get(url, headers={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.6.1 Safari/605.1.15"}) return request
补充:当useragent.Random()生成的UA不合法时,会抛出这个错误:
Traceback (most recent call last): File "/Users/luis-jose/Desktop/cse111/Week 6/what_is_the_weather.py", line 46, in <module> main() File "/Users/luis-jose/Desktop/cse111/Week 6/what_is_the_weather.py", line 10, in main temperature = get_data(request, "div.wtr_currTemp.b_focusTextLarge") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/luis-jose/Desktop/cse111/Week 6/what_is_the_weather.py", line 42, in get_data data = (request.html.find(selector, first=True).text) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'text'
解决方案
1. 获取真实User Agent
打开你常用的浏览器(Chrome、Safari等),按F12打开开发者工具,切换到「网络」标签页,刷新页面后随便选一个请求,在「请求头」里找到User-Agent字段,复制对应的字符串即可。
2. 替换到代码中
把prepare_request函数里的UA换成你复制的真实值,固定使用这个UA就能避免随机UA不符合要求的问题:
def prepare_request(city): session = HTMLSession() url = f"https://www.bing.com/search?q=weather+{city}" # 替换成你复制的真实UA real_user_agent = "你的真实User Agent字符串" request = session.get(url, headers={"User-Agent": real_user_agent}) return request
3. 增加容错处理
为了避免AttributeError崩溃,在get_data函数里加个空值判断:
def get_data(request, selector): element = request.html.find(selector, first=True) if element: return element.text # 没找到元素时返回默认值或抛出明确提示 return "无法获取数据"
内容的提问来源于stack exchange,提问作者LuigiMopi
相关产品推荐
相关产品推荐

