一切!我正在制作我的第一个网络刮刀,当给出“CitedBy”页面like this
时,它会从PMC获取作者姓名,URL和纸质名称。我的程序可以很好地获取作者姓名和URL,但是我只能得到一些论文题目,我怀疑是由于下标和上标。
这是我到目前为止所得到的:
import requests
from bs4 import BeautifulSoup
import re
url = 'http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2593677/citedby/?page=0'
req = requests.get(url)
plain_text = req.text
soup = BeautifulSoup(plain_text, "lxml") #soup object
titles_list = []
for items in soup.findAll('div', {'class': 'title'}):
title = items.string
if title is None:
title = ("UHOH") #Problems with some titles
#print(title)
titles_list.append(title)
当我运行这段代码时,我的刮刀给了我这些结果:
等整个页面......
本页的一些论文中我得到的是“UHOH”:
从头构建的远距离球形朝鲜蓟的基因组序列包含F1子代的相位感知低通测序策略
拟南芥和Medic藜苜蓿之间非生物应激反应基因的跨家系翻译基因组学
我在此列出的前两个我认为是有问题的,因为“C4”和“F1”实际上是“C下标4”和“F下标1”。对于第三个,“Medicago truncatula”是一个“em”HTML标签,所以我怀疑这就是为什么我的刮刀不能刮掉它。
我想到的唯一替代解决方案是让我的“soup.findAll”更具体,但这并没有最终帮助我。我试过了:
for items in soup.findAll('div', {'class': 'title'}):
title = items.string
if title is None:
for other in soup.findAll('a', {'class': 'view'}):
title = other.string
但遗憾的是,这不起作用......所以我不确定如何处理这个问题。有谁知道如何处理这些特殊情况?非常感谢!
答案 0 :(得分:1)
感谢@LukasGraf,我有答案!
由于我使用的是BeautifulSoup,我可以使用node.get_text()。它与普通的“.string”不同,因为它还返回标记下面的所有文本,这是下标和“em”HTML标记文本的情况。