python - 为什么Python的请求会转换部分源代码?

标签 python html

我正在尝试使用 python 的 requests 来抓取谷歌新闻搜索结果,以获取不同文章的链接。我通过使用 Beautiful Soup 获取链接。

我遇到的问题是,虽然在浏览器的源代码 View 中所有链接看起来都很正常,但在操作之后它们被更改了 - 所有以“/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 而是我使用它的方式)。

感谢您的帮助!

最佳答案

您正在将在浏览器中看到的内容与请求生成的内容进行比较(即没有用户代理 header )。如果您在发出初始请求之前指定此项,它将反射(reflect)您在 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)

关于python - 为什么Python的请求会转换部分源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44048700/

相关文章:

python - 在 Flask-SQLAlchemy 中自动格式化 db.Datetime 值

javascript - HTML5 视频 : need to find viewed time from "play" to "pause" with javascript

html - 图像在 IE 中显示像素化

javascript - 使用 jQuery 更改特定 Div 标签内的 TD 值

python - 如何在 Django 中查询为 GROUP BY?

python - 如何将平流扩散 react 偏微分方程与 FiPy 耦合

python - 无法弄清楚如何使用Python SDK修改Azure负载均衡器后端池

Python 运行时 : recompiling and reusing C library

html - 仅使用 css 更改页面布局(不更改 DOM 位置)

html - CSS 不适用于 IE 中已部署的应用程序