我正在try 使用BeautifulSoup来查找不同作者的出生年份.我在VS Code工作,如果这是相关的话.这是我第一次try 抓取网页,所以请尽量解释清楚

对于有维基百科页面的作者,我可以使用以下代码成功地找到出生年份:

source_code = requests.get("a_wikipedia_url")
plain_text = source_code.text
soup = BeautifulSoup(plain_text, features="html.parser")
finder = soup.find("span", {"class": "bday"})
if finder is not None:
        birth_year = finder.string[0:4]
        return birth_year

然而,当我用谷歌搜索没有(英文)维基百科页面的作者时,我什么也得不到.

在阅读了这个问题https://stackoverflow.com/questions/62466340/cant-scrape-google-search-results-with-beautifulsoup之后,我向quests.get(我使用的是Chrome版本114.0.5735.134(官方版本)(64位)和Windows 11 Home)添加了一个用户代理响应头,但它所做的只是打印None,而不是给我的AttributeError:‘NoneType’对象没有‘字符串’属性,这是我在添加头之前得到的.

这是我的代码:

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.134 Safari/537.36"}
source_code = requests.get("https://www.google.com/search?q=Guillermo+Saccomanno", headers=headers)
plain_text = source_code.text
soup = BeautifulSoup(plain_text, features="html.parser")
google_finder = soup.find("span", {"class": "LrzXr kno-fv wHYlTd z8gr9e"})
print(google_finder.string)

结果就是无--没有错误消息,但没有文本.

我还try 了标题Chrome Version为Chrome/114.0.0.0,这是我在网上找到的.还是什么都不给.

我不确定我错在哪里,因为语法是相同的,而且我从页面源代码复制了类名?对于这位特定的作者,我认为google_finder.string应该是"1948年6月9日(75岁)".

推荐答案

如果您想要解析出生日期,我会 Select 不同的策略:找到带有文本"Born:"<span>标记,然后找到下一个sibling 姐妹.另外,在URL中添加hl=en参数即可得到英文结果:

import requests
from bs4 import BeautifulSoup

url = 'https://www.google.com/search?q=Guillermo+Saccomanno&hl=en'
headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/114.0'}

soup = BeautifulSoup(requests.get(url, headers=headers).content, 'html.parser')

born = soup.select_one('span:-soup-contains("Born:") + span')
print(born.text)

打印:

June 9, 1948 (age 75 years), Buenos Aires, Argentina

Python相关问答推荐

配置Sweetviz以分析对象类型列,而无需转换

未删除映射表的行

如何记录脚本输出

try 将一行连接到Tensorflow中的矩阵

Pandas:将多级列名改为一级

如何从数据库上传数据到html?

Python Tkinter为特定样式调整所有ttkbootstrap或ttk Button填充的大小,适用于所有主题

如何在两列上groupBy,并使用pyspark计算每个分组列的平均总价值

在方法中设置属性值时,如何处理语句不可达[Unreacable]";的问题?

如何在海上配对图中使某些标记周围的黑色边框

根据Pandas中带条件的两个列的值创建新列

获取PANDA GROUP BY转换中的组的名称

我可以不带视频系统的pygame,只用于游戏手柄输入吗?''

随机森林n_估计器的计算

在任何要保留的字段中添加引号的文件,就像在Pandas 中一样

如果列包含空值,则PANAS查询不起作用

Stats.ttest_ind:提取df值

#将多条一维曲线计算成其二维数组(图像)表示

按最大属性值Django对对象进行排序

在Django REST框架中定义的URL获得404分