我一直在尝试制作一个脚本从网络上获取一些天气数据。问题是,当我使用错误的用户代理时,我使用的工具会崩溃,这意味着它可能是有效的,但如果不是正确的,它会崩溃。
我试着:
from getuseragent import UserAgent
useragent = UserAgent("all")
theuseragent = useragent.Random()
,大多数情况下都有效。但它并不总是工作,当它不工作时,它会崩溃。
所以我只是想要一种方法来获得我的实际用户代理,而不是一个假的或随机的。有人能帮我吗?
顺便说一下,我正在使用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()
中获得错误的用户代理时得到的错误。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'
我可以与您的问题相关,当我试图从SEC加载数据时,我遇到了同样的问题。
我的第一个解决方案是谷歌搜索"什么是我的用户代理"。然后手动将提供的字符串输入到我的脚本中,这有点烦人。
这里是旧的代码,我使用request .get()从web获取数据:
from requests import get
# enter user-agent here manually
useragent = {'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"}
try:
answer = get(link_to_sec_text, headers=useragent, timeout=5)
except ConnectionError as con_error:
print(con_error)
在做了一些研究和尝试之后,我发现了一个简单的解决方案,使用Selenium并用3行代码替换上面的useragent行:
from selenium import webdriver
driver = webdriver.Chrome()
useragent = driver.execute_script("return navigator.userAgent")
driver.quit()
我有一个Windows操作系统,但我想这也适用于MacOS,你只需要改变你的主浏览器的webdriver.Chrome()调用。