用Python爬行WoS

2024-09-27 02:17:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从WoS(科学网)数据库下载信息。我需要诸如文章名称、作者、引用次数、卷数等信息 enter image description here

这是我的代码:

import sys 
from BeautifulSoup import BeautifulSoup
import urllib
import re
    var = raw_input("Link WoS: ")
    conn = urllib.urlopen(var)
    html = conn.read()
    soup = BeautifulSoup(html)
    titles = re.findall('<value lang_id="">(.+?)</value>',str(soup))
    volume = re.findall('Volume: </span><span class="data_bold"><value>(.+?)</value>', str(soup))
    print(volume)

它非常适合获得头衔。然而,我有问题得到以下信息:卷,问题,页数,日期(出版)和引用次数。这是网页的来源:

^{pr2}$

我想我有问题是因为数据是数字的。。。你能帮帮我吗?在


Tags: importre信息valuevarhtmlurllibconn
3条回答

我终于做到了!我刚写了这个:

numericValues= re.findall('<value>(.+?)</value>', str(soup)) 

结果如下:

^{pr2}$

第一个号码我不知道是什么,但下一个号码是我需要的。然后我重复这些值:

i = 0
while i < len(numericValues):
    columnVolume.append(numericValues[i+1])
    columnIssue.append(numericValues[i+2])
    columnPages.append(numericValues[i+3])
    columnDate.append(numericValues[i+4][-4:])
    i = i + 5

谢谢大家的帮助!在

美体会帮你做很多重活的。Regex通常是HTML关注的最后手段。最好使用该产品的最新版本,如下面的代码所示。在

HTML = '''\
<value>
<span class="htmllite">EDUCATIONAL RESEARCH</span>
</value>
</span>&nbsp;&nbsp;<span class="label">Volume: </span><span class="data_bold">
<value>29</value>
</span>&nbsp;&nbsp;<span class="label">Issue: </span><span class="data_bold">
<value>2</value>
</span>&nbsp;&nbsp;<span class="label">Pages: </span><span class="data_bold">
<value>26-152</value>
</span>&nbsp;&nbsp;<span class="label">Published: </span><span class="data_bold">
<value>JUN 1987</value>
'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(HTML, "html.parser")

items = soup.findAll('span', attrs = {'class': 'label' })
for item in items:
    label = item.contents[0]
    sibling = item.find_next_sibling('span')
    value = sibling.select('value')[0].text
    print (label, value )

结果:

^{pr2}$

我写这篇文章时不尝试一些失败的可能性,这是远远不够聪明的。您是否使用IDLE之类的工具来建议替代方案并尝试代码片段以查看它们给出的结果?在

注:当你再次回到这个问题上来时,请把HTML和其他文本作为文本(而不是图像文件)发布,这样回答者就可以使用剪切和粘贴了。在

beauthulsoup有自己的regex功能

html = '<html><span>Volume: </span><span class="data_bold"><value>20</value></span></html>'
soup = BeautifulSoup(html)
matches = soup.findAll(text=re.compile('Volume'))
for match in matches:
    element = match.parent 
    #o/p: <span>Volume: </span>
    sibling_tag = element.findNextSibling()
    #o/p: <span class="data_bold"><value>20</value></span>
    print sibling_tag.find('value').text
    #o/p: u'20'

注意:这只是一个没有实际html访问权限的例子

相关问题 更多 >

    热门问题