从网站抓取数据时输出被截断

1 投票
2 回答
54 浏览
提问于 2025-04-14 15:39

我正在尝试从这个网址抓取作者信息:https://doi.org/10.1155/2021/2122095

但是我只抓到了3位作者,第四位的名字在输出中被截断了,只显示成了省略号。

这是我写的代码:

import csv
import requests
from bs4 import BeautifulSoup

# URL
url = 'https://doi.org/10.1155/2021/2122095'

# Send a GET request to the URL
response = requests.get(url)

# Parse the HTML content
soup = BeautifulSoup(response.content, 'html.parser')

   
authors = soup.find("meta", {"name": "authors"})['content']
    

print(authors) 

这是输出结果:

Datian Bi | Jingyuan Kong | ... | Junli Yang

为什么会这样呢?谢谢!

2 个回答

1

这里有一个例子,教你如何从页面上获取所有四位作者的信息:

import requests
from bs4 import BeautifulSoup

url = "https://doi.org/10.1155/2021/2122095"
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")

authors = []
for a in soup.select(".articleHeader__authors_author"):
    if a.strong:
        authors.append(a.strong.text)
    else:
        authors.append(a.find_next(string=True))

print(*authors, sep="\n")

输出结果是:

Datian Bi
Jingyuan Kong
Xue Zhang
Junli Yang
2

问题出在你用来查找作者的标签上。请查看这个网页的源代码:view-source:https://www.hindawi.com/journals/jhe/2021/2122095/。在里面只有一个名为 'authors' 的meta标签,它包含了你所获取的字符串。这说明你的程序是正常工作的。

<meta name="authors" content="Datian Bi | Jingyuan Kong | ... | Junli Yang">

我猜想你是想获取所有的作者。要做到这一点,你可以使用:

list(map(lambda x: x.getText(), soup.findAll("span", {"class": "articleHeader__authors_author"})))
# --> ['Datian Bi,1', 'Jingyuan Kong,1', 'Xue Zhang,1', 'and Junli Yang2']

或者

list(map(lambda x: x['content'], soup.findAll("meta", {"name": "citation_author"})))
# --> ['Bi, Datian', 'Kong, Jingyuan', 'Zhang, Xue', 'Yang, Junli']

撰写回答