在一些维基百科页面中,在文章标题之后(以粗体显示),括号内有一些文字用于解释标题中单词的发音和语音。例如,在this上,在<p>
中的粗体标题 diglossia 之后,有一个左括号。为了找到相应的右括号,你必须逐个遍历文本节点才能找到它,这很简单。我想要做的是找到下一个href链接并存储它。
这里的问题是(AFAIK),没有办法用闭括号唯一地标识文本节点,然后获得以下href。 是否有任何直接(非复杂)方式将第一个链接置于初始括号之外?
对于此处提供的链接,要存储的href应为:https://en.wikipedia.org/wiki/Dialects,因为这是括号外的第一个链接
答案 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]