Web刮刮维基百科页面

时间:2017-03-31 06:12:48

标签: python web-scraping request

在一些维基百科页面中,在文章标题之后(以粗体显示),括号内有一些文字用于解释标题中单词的发音和语音。例如,在this上,在<p>中的粗体标题 diglossia 之后,有一个左括号。为了找到相应的右括号,你必须逐个遍历文本节点才能找到它,这很简单。我想要做的是找到下一个href链接并存储它。

这里的问题是(AFAIK),没有办法用闭括号唯一地标识文本节点,然后获得以下href。 是否有任何直接(非复杂)方式将第一个链接置于初始括号之外?

修改

对于此处提供的链接,要存储的href应为:https://en.wikipedia.org/wiki/Dialects,因为这是括号外的第一个链接

1 个答案:

答案 0 :(得分:1)

这是你想要的吗?

import requests
rs = requests.get('https://en.wikipedia.org/wiki/Diglossia', verify=False)
parsed_html = BeautifulSoup(rs.text)
print parsed_html.body.findAll('p')[0].findAll('a')[0]

这给出了:

<a href="/wiki/Linguistics" title="Linguistics">linguistics</a>

如果你想提取href,你可以使用它:

parsed_html.body.findAll('p')[0].findAll('a')[0].attrs[0][1]

<强>更新 看来你想要括号后的href而不是之前的href。 我已经为它编写了脚本。试试这个:

import requests
from BeautifulSoup import BeautifulSoup
rs = requests.get('https://en.wikipedia.org/wiki/Diglossia', verify=False)
parsed_html = BeautifulSoup(rs.text)

temp = parsed_html.body.findAll('p')[0]

start_count = 0
started = False
found = False

while temp.next and found is False:
    temp = temp.next
    if '(' in temp:
        start_count += 1
        if started is False:
            started = True
    if ')' in temp and started and start_count > 1:
        start_count -= 1
    elif ')' in temp and started and start_count == 1:
        found = True

print temp.findNext('a').attrs[0][1]