You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:18:17