python - 在 requests.get() 方法的参数中使用 'headers' 是否会更改 HTML 代码或以某种方式影响它?

标签 python web-scraping beautifulsoup python-requests

下面的代码应该从谷歌的搜索结果页面检索链接。

不使用 header 'linkedElems' 有 0 个元素,但是当我使用 header 时 'linkedElems' 有 44 个元素,这意味着使用 header “select('.r”后a')"在页面中找到 44 个元素。使用 header 时页面的 HTML 代码是否会发生变化?

我使用 Firefox 的开发工具检查了页面的 HTML 代码来查找链接并选择它们,因此“select('.r a') 不应返回 0。

代码:

import requests,bs4

print("Search something in google:")
searchKeyword = input()
print("Googling.... " + searchKeyword)

head = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0'}
responseObj = requests.get("https://www.google.com/search?q="+searchKeyword, headers = head)
responseObj.raise_for_status()

print("Status code: " + str(responseObj.status_code))
soupObj = bs4.BeautifulSoup(responseObj.text, features='html.parser')
linkedElems = soupObj.select('.r a')
print(len(linkedElems))

结果(带标题):

Search something in google:
test
Googling.... test
Status code: 200
44

Process finished with exit code 0

结果(无标题):

Search something in google:
test
Googling.... test
Status code: 200
0

Process finished with exit code 0

最佳答案

User-Agent header专门设计用于服务器了解发出请求的客户端的浏览器/操作系统/硬件,以便它可以构建对该特定客户端的正确响应:

The User-Agent request header is a characteristic string that lets servers and network peers identify the application, operating system, vendor, and/or version of the requesting user agent.

如果 Google 的服务器旨在为特定客户端返回特定的 HTML(剧透警告,确实如此),那么答案是“是的,HTML将会因 User-Agent 的不同值而不同“,正如您自己发现的那样。

关于python - 在 requests.get() 方法的参数中使用 'headers' 是否会更改 HTML 代码或以某种方式影响它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59530720/

相关文章:

python - 如何在 django-tastypie 上使用 POST 请求上传文件?

python - pycurl,如何为多选表单发送POST数据?

python - 如何使用标签提取标签内的文本?

python - 如何使用 BeautifulSoup 从源代码获取数组数据?

python - 如何使用 Python 获取 CSS 背景颜色?

javascript - 传递参数(如变量)以在 casperjs 中进行评估并登录站点

python - 将数据分箱

python - Numpy/Python 与 Matlab 相比表现糟糕

python - xpath不能只选择一个html标签

javascript - 无法让我的脚本不断点击按钮