当前位置: 首页 > 知识库问答 >
问题:

Python刮擦:有什么方法可以使用漂亮的汤刮擦这行代码吗?(查找包含特定标签/字符串的标签内容)

孙鑫鹏
2023-03-14

假设源代码如下所示:

<tr> ... </tr><tr> ... </tr><tr> ... </tr><tr> ... </tr><tr><td class="field2 mcFont" style="width: 220px; vertical-align:top">PE<div class="icon-edu icon-general-terms" style="display:none" data-key="PE Ratio"></div></td><td class="mcFont cls">7.18</td></tr><tr> ... </tr><tr> ... </tr><tr> ... </tr><tr> ... </tr><tr>

你好我正在尝试使用beautifulsoup在表行tr标记中刮取一行特定的代码(请参见下面我想要实现的最终结果),但是由于tr标记不包含任何像其他标记一样的属性,而页面中有数百万个tr标记,因此我是否可以使用soup。查找_all(“tr”)以删除所有tr标记的内容,其中包括带有字符串“PE”或class=“field2 mcFont”的td标记?

我想要达到的最终结果是:

<td class="field2 mcFont" style="width: 220px; vertical-align:top">PE<div class="icon-edu icon-general-terms" style="display:none" data-key="PE Ratio"></div></td><td class="mcFont cls">7.18</td> 

共有1个答案

单嘉泽
2023-03-14

搜索标签

from bs4 import BeautifulSoup

html_doc = """<tr> ... </tr><tr> ... </tr><tr> ... </tr><tr> ... </tr><tr><td class="field2 mcFont" style="width: 220px; vertical-align:top">PE<div class="icon-edu icon-general-terms" style="display:none" data-key="PE Ratio"></div></td><td class="mcFont cls">7.18</td></tr><tr> ... </tr><tr> ... </tr><tr> ... </tr><tr> ... </tr><tr>"""
soup = BeautifulSoup(html_doc, "html.parser")

pe = soup.find(lambda t: t.name == "td" and "PE" == t.text).find_next("td")
print(pe.text)

打印:

7.18

或使用CSS选择器:

pe = soup.select_one('td:-soup-contains("PE") + td')
print(pe.text)

 类似资料:
  • 我有一小段代码来从web站点中提取表数据,然后以csv格式显示。问题是for循环多次打印记录。我不确定是不是因为 标签。顺便说一句,我是Python新手。谢谢你的帮助!

  • 我已经获得了刮取第一页的代码,但是url从: https://www.expansion.com/empresas-de/ganaderia/granjas-en-general/index.html -- 如何创建从第2页到第65页的循环?非常感谢!

  • 我试图刮此页上Flipkart: http://www.flipkart.com/moto-x-play/p/itmeajtqp9sfxgsk?pid=MOBEAJTQRH4CCRYM 我试图找到的div类"fk-ui-ccarousel超级容器相同的vreco部分reco-carousel-边界-顶部sameHorizontalReco",但它返回空结果。 divs是空的。我使用inspect元

  • 问题内容: 我取这个页面与该请求库中的Node.js,并使用解析身体cheerio。 调用已解析的响应正文,发现该页面的title属性为: …什么时候应该: 我尝试将请求库的选项设置为include ,但这似乎并没有改变任何东西。 如何保留这些字符? 问题答案: 该页面似乎是用iso-8859-1编码的。您需要通过传递并使用诸如node- iconv之 类的东西来告诉您退回未编码的缓冲区。 如果要

  • 问题内容: 到目前为止,我一直只使用scrapy并编写自定义类来使用ajax处理网站。 但是,如果我要使用scrapy-splash,据我所知,它会在javascript之后刮擦呈现的html,那么对我的抓取工具的速度会产生重大影响吗? 用scrapy刮擦香草html页面与使用scrapy-splash渲染javascript html所花费的时间之间的比较是什么? 最后,scrapy-splas

  • 我有一个带有div标签的页面源,如下面的示例页面源。我想像下面的例子一样刮掉所有的网址,并将它们保存在列表中。 示例url: 来自: 我尝试使用下面的代码从href中刮取网址。我试图使用span类来过滤只包含作业卡search__easy飞机的div标签。代码不返回任何网址,只是一个空列表。我对美丽的汤和硒不熟悉。如果有人能指出我的问题是什么,并提出一个解决方案,我会很高兴。特别是如果你也能给出一