我正在尝试使用python的requests
来搜索谷歌新闻搜索结果,以获取不同文章的链接。我使用Beautiful Soup
获取链接。
我得到的问题是,尽管在浏览器的源视图中所有链接看起来都很正常,但在操作后它们会被更改 - 所有以“/ url?q =”开头并且在链接的“核心”之后完成是一串以“&”开头的字符。此外 - 链接中的某些字符也会更改 - 例如url:
http://www.azonano.com/news.aspx?newsID=35576
更改为:
http://www.azonano.com/news.aspx%newsID%35576
我正在使用标准的“入门”代码:
import requests, bs4
url_list = list()
url = 'https://www.google.com/search?hl=en&gl=us&tbm=nws&authuser=0&q=graphene&oq=graphene&gs_l=news-cc.3..43j0l9j43i53.2022.4184.0.4322.14.10.3.1.1.1.166.884.5j5.10.0...0.0...1ac.1.-Q2j3YFqIPQ'
res = requests.get(url)
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, 'html.parser')
for link in soup.select('h3 > a'):
url_list.append(link.get('href'))
# First link on google news page is:
# https://www.theengineer.co.uk/graphene-sensor-could-speed-hepatitis-diagnosis/
print url_list[0] #this line will print url modified by requests.
我知道使用selenium
可以解决这个问题,但是我想知道requests
这个问题的根本原因在哪里(或者更合理的是requests
但我正在使用它的方式)。
感谢您的帮助!
答案 0 :(得分:1)
您正在将浏览器中看到的内容与生成的请求进行比较(即没有用户代理标头)。如果在发出初始请求之前指定此项,则会反映您在Web浏览器中看到的内容。 Google以不同的方式提供请求:
url = 'https://www.google.com/search?hl=en&gl=us&tbm=nws&authuser=0&q=graphene&oq=graphene&gs_l=news-cc.3..43j0l9j43i53.2022.4184.0.4322.14.10.3.1.1.1.166.884.5j5.10.0...0.0...1ac.1.-Q2j3YFqIPQ'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'} # I just used a general Chrome 41 user agent header
res = requests.get(url, headers=headers)