如何找到以特定字符串开头的所有“名称”元素?

时间:2017-08-18 03:04:02

标签: python beautifulsoup

我正在制作一个个人项目,但遇到了一些麻烦。

我正在使用Beautiful Soup从网页上删除一些用户回复。我想在他们的帖子上专门删掉downvotes和upvotes的数量,但我没能成功地这样做。

下面是包含用户帖子的upvotes数量的HTML。每个用户都有一个不同的name元素ID,如171119643所示,所以我对如何抓取所有name元素感到困惑。

<strong id="cmt_o_cnt_171119643" name="cmt_o_cnt_171119643">756</strong>

我注意到每个名字都以相同的字符串开头:cmt_o_cnt_。有没有办法可以使用下面的代码来搜索以该字符串开头的元素?

for url in soup.find_all('strong', name_=''):

2 个答案:

答案 0 :(得分:1)

非正则表达式解决方案是检查子串"cmt_o_cnt_"是否在tag['name']中:

for tag in soup.find_all('strong'):
    if "cmt_o_cnt_" in tag['name']:
        print(tag['name'])  # or do your stuff

答案 1 :(得分:0)

通过使用CSS选择器,您可以删除所需的名称元素。

from bs4 import BeautifulSoup
html = '''
  <strong id="cmt_o_cnt_171119643" name="cmt_o_cnt_171119643">756</strong>
  <strong id="cmt_o_cnt_171119644" name="cmt_o_cnt_171119644">256</strong>
  <strong id="cmt_o_cnt_171119645" name="cmt_o_cnt_171119645">123</strong>
'''
soup = BeautifulSoup(html,"lxml")
for tag in soup.select('strong[name*="cmt_o_cnt_"]'):
  print(tag['name'])

您可以查看css选择器here

的一些用法