从网站抓取数据时输出被截断
我正在尝试从这个网址抓取作者信息: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']