使用bs4查找特定的链接文本

2024-10-01 11:21:16 发布

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

我正在尝试刮一个网站,并找到一个提要的所有标题。我在获取我需要的a标记的文本时遇到了问题。下面是一个html示例。在

<td class="m" id="b1"><a href="/QSYcfT" id="c1" target="_blank" onClick="vPI('https://www.youtube.com/watch?v=BFNH-6K10Ic', 'QSYcfT', this.id); this.blur(); return false;">TF4 - Oreos</a> <a href="#" onClick="return lkP('1', 'QSYcfT');" id="x1"><font class="bp">(0)</font></a>
<td class="m" id="b2"><a href="/zXHNvp" id="c2" target="_blank" onClick="vPI('https://www.youtube.com/watch?v=0vjcGwZGBYI', 'zXHNvp', this.id); this.blur(); return false;">Awesome Game Boy Facts</a> <a href="#" onClick="return lkP('2', 'zXHNvp');" id="x2"><font class="bp">(0)</font></a>

我试图获取id为c的每个a标记的文本,并将每个标记打印到一个新行上。在

我的输出应该是这样的。在

^{pr2}$

到目前为止我已经试过了。在

soup = bs4.BeautifulSoup(html)
links = soup.find_all('a',{'id' : 'c'})
for link in links:
    print link.text

但它找不到或打印任何东西?在


Tags: 标记文本idtargetreturnhtmlthisclass
3条回答

您可以在对^{}的调用中传递一个regular expression对象

import re
import bs4

html = '''
<td class="m" id="b1"><a href="/QSYcfT" id="c1" target="_blank" onClick="vPI('https://www.youtube.com/watch?v=BFNH-6K10Ic', 'QSYcfT', this.id); this.blur(); return false;">TF4 - Oreos</a> <a href="#" onClick="return lkP('1', 'QSYcfT');" id="x1"><font class="bp">(0)</font></a>
<td class="m" id="b2"><a href="/zXHNvp" id="c2" target="_blank" onClick="vPI('https://www.youtube.com/watch?v=0vjcGwZGBYI', 'zXHNvp', this.id); this.blur(); return false;">Awesome Game Boy Facts</a> <a href="#" onClick="return lkP('2', 'zXHNvp');" id="x2"><font class="bp">(0)</font></a>
'''

soup = bs4.BeautifulSoup(html)
for links in soup.find_all('a', {'id' : re.compile('^c') }):
    print ''.join(links.find_all(text=True))

输出

^{pr2}$

可以用pass a regular expression代替属性值:

links = soup.find_all('a', {'id': re.compile('^c\d+')})

^表示字符串的开头,\d+匹配一个或多个数字。在

演示:

^{pr2}$

没有带有属性ca标记,而是c1和{}。在

links = soup.find_all('a',{'id' : 'c1'})

如果要查找所有具有以^{开头的属性的a,则需要传递正则表达式:

^{pr2}$

相关问题 更多 >