html - 如何使用 Beautiful Soup 按文本内容选择 div?

标签 html web-scraping beautifulsoup

试图从类似这样的东西中抓取一些 HTML。有时我需要的数据在 div[0],有时在 div[1],等等。

假设每个人都上 3-5 节课。其中之一总是生物学。他们的成绩单总是按字母顺序排列的。我想要每个人的生物成绩。

我已经将所有这些 HTML 拼凑成文本,现在如何找出生物成绩?

<div class = "student">
    <div class = "score">Algebra C-</div>
    <div class = "score">Biology A+</div>
    <div class = "score">Chemistry B</div>
</div>
<div class = "student">
    <div class = "score">Biology B</div>
    <div class = "score">Chemistry A</div>
</div>
<div class = "student">
    <div class = "score">Alchemy D</div>
    <div class = "score">Algebra A</div>
    <div class = "score">Biology B</div>
</div>
<div class = "student">
    <div class = "score">Algebra A</div>
    <div class = "score">Biology B</div>
    <div class = "score">Chemistry C+</div>
</div>
<div class = "student">
    <div class = "score">Alchemy D</div>
    <div class = "score">Algebra A</div>
    <div class = "score">Bangladeshi History C</div>
    <div class = "score">Biology B</div>
</div>

我正在使用漂亮的汤,我想我将不得不找到文本包含“生物学”的 div?

这只是为了快速抓取,我愿意在 Excel 或诸如此类的东西中进行硬编码和摆弄。是的,这是一个伪劣的网站!是的,他们确实有一个 API,而我对 WDSL 一无所知。

简短版:http://www.legis.ga.gov/Legislation/en-US/Search.aspx ,查找每张账单的最后行动日期,FWIW。这很麻烦,因为如果法案在第二议院没有赞助商,而不是一个什么都没有的 div,他们根本就没有 div。所以有时时间线在 div 3 中,有时在 2 等中。

最佳答案

(1) 只拿到生物等级,几乎是一个类轮。

import bs4, re
soup = bs4.BeautifulSoup(html)
scores_string = soup.find_all(text=re.compile('Biology')) 
scores = [score_string.split()[-1] for score_string in scores_string]
print scores_string
print scores

输出看起来像这样:

[u'Biology A+', u'Biology B', u'Biology B', u'Biology B', u'Biology B']
[u'A+', u'B', u'B', u'B', u'B']

(2) 您找到标签,也许为了进一步的任务,您需要找到parent:

import bs4, re
soup = bs4.BeautifulSoup(html)
scores = soup.find_all(text=re.compile('Biology'))
divs = [score.parent for score in scores]
print divs

输出看起来像这样:

[<div class="score">Biology A+</div>, 
<div class="score">Biology B</div>, 
<div class="score">Biology B</div>, 
<div class="score">Biology B</div>, 
<div class="score">Biology B</div>]

*总之,您可以使用 find_siblings/parent/...etc 在 HTML 树中移动。*

有关如何 navigate the tree 的更多信息. 祝你工作顺利。

关于html - 如何使用 Beautiful Soup 按文本内容选择 div?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20293792/

相关文章:

javascript - 如何将点击第一个按钮的第二个按钮传递给javascript函数

javascript - 通过 css 居中 msform

python - Scrapy抛出属性错误

css - 通过了解 R 中的 CSS 类来抓取嵌入式交互式 map 的详细信息

python - 从 BeautifulSoup 的表中排除 Span 类

python - NoneType 对象没有属性 find_all 使用 beautiful Soup 时出错

javascript - 我可以纯粹在客户端为图像和 css 提供动态路径吗?

python - 如何使用请求从该页面获取数据?

python - 使用 BeautifulSoup 提取 anchor 标签值

javascript - hover li 和第二个 li 元素