全!我正在开发我的第一个网络刮刀,当给它一个"CitedBy“页面像这样时,它从PMC抓取作者的名字、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“的一些文件是:
我在这里列出的前两个,我认为是有问题的,因为"C4“和"F1”实际上是"C下标4“和"F下标1”。对于第三个,“”是一个"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但遗憾的是,这不管用.所以我不太清楚该怎么处理。有人知道如何处理这种特殊情况吗?非常感谢!
发布于 2016-03-15 22:42:56
感谢@LukasGraf,我有答案了!
由于我使用的是BeautifulSoup,所以我可以使用案文()。它的工作原理不同于普通的".string“,因为它还返回标记下面的所有文本,这是下标和"em”标记文本的情况。
https://stackoverflow.com/questions/36023346
复制相似问题