【发布时间】:2017-05-15 00:40:24
【问题描述】:
我正在使用 Beautiful Soup 在网站上搜索一组整数值,并生成一个与名称匹配的列表。但是,我遇到的问题是该网站对我需要的元素(“列表项”)使用了一些非常模糊的类名,这些元素在其他元素中重现,我不想抓住这些元素。到目前为止,我的代码如下所示:
from bs4 import BeautifulSoup as bs
import requests
url = "http://beautifulnumberssite.com/"
html = requests.get(url).text
soup = bs(html)
names = soup.findAll("h1", class_="th1")
stats = soup.findAll("li", class_="list-item")
print(names, stats)
但是,这也返回了一大堆我不想要的东西。有没有办法让它变得如此 Beautiful Soup 只返回后跟某个字符串的元素的内容?因此,如果网页包含如下部分:
<li class='list-item'>
<strong>65</strong>
Important Values
</li>
<li class='list-item'>
<strong>49</strong>
Useless Values
</li>
我希望能够设置 Beautiful Soup/Python 来解析像“重要值”这样的字符串,并直接在它之前获取元素(忽略任何换行符或空格),或者更好的是其中包含的值元素。所以在这种情况下,Beautiful Soup 会打印:
<strong>65</strong>
或者,更优选地,只是:
65
这可能吗?
【问题讨论】:
-
当然,接受哪个答案是您的选择,但如果您选择当前接受的答案,您的问题就会过于复杂。如果您可以直接获得所需的值,为什么要遍历所有列表项?另外,如果可以获取文本并直接将其转换为
int,为什么还要获取contents列表? -
好点。我将查看新答案并找出最适合我的答案。感谢您抽出宝贵时间提供额外的答案。非常感激。我敢肯定,如果我目前能够的话,我会同时投两票。但你也说得对,我应该花时间好好检查一下新的。
标签: python string python-2.7 parsing beautifulsoup