全部!我正在开发我的第一个网络爬虫,当给定“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)
当我运行这部分代码时,我的抓取工具会给出以下结果:
- 寻找并比较拟南芥及其外类群木瓜、杨树和葡萄的同线性区域:CoGe 与 Rosids
- 呃
- 控制结瘤过程的 bean 科植物基因的综合比较基因组和转录组分析
- 呃
- 植物中RPL9的剂量敏感性和核糖体蛋白基因的协同进化
整个页面依此类推...
此页面上我得到“UHOH”的一些论文是:
我认为我在这里列出的前两个是有问题的,因为“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
但遗憾的是,这不起作用......所以我不太确定如何解决这个问题。有谁知道如何处理此类特殊情况?太感谢了!
感谢@LukasGraf,我有了答案!
由于我使用的是 BeautifulSoup,所以我可以使用 node.get_text() 。它的工作方式与普通的“.string”不同,因为它还返回标签下的所有文本,下标和“em”HTML 标记文本就是这种情况。
我是一名优秀的程序员,十分优秀!