Python 提取其第一个标记匹配内容的HTML标记数据

Python 提取其第一个标记匹配内容的HTML标记数据,python,beautifulsoup,Python,Beautifulsoup,我刚刚开始学习Beautiful soup,我正在从一个网页中提取数据,该网页上有如下标签: <tr > < td class = "review2" width = "23%" > Overall rating: < /td><td> </td > < td class = "review3" > < img hight = "18px"

我刚刚开始学习Beautiful soup,我正在从一个网页中提取数据,该网页上有如下标签:

<tr > < td class = "review2"
width = "23%" > Overall rating: < /td><td>  </td > < td class = "review3" > < img hight = "18px"
src = "/img/red_star.gif" width = "18px" / > < img hight = "18px" src = "/img/red_star.gif" width = "18px" / > < /td></tr >
<tr > < td class = "review2" > Effectiveness: < /td><td>  </td > < td class = "review3" > Highly Effective < /td></tr >
谁能帮忙吗

谢谢

如果
中没有其他图像,您可以使用此示例获取计数:

from bs4 import BeautifulSoup


html_doc = """
<tr> <td class = "review2"
width = "23%"> Overall rating: </td><td>  </td> <td class = "review3"> <img hight = "18px"
src = "/img/red_star.gif" width = "18px" /> <img hight = "18px" src = "/img/red_star.gif" width = "18px" /> </td></tr>
<tr> <td class = "review2"> Effectiveness: </td><td>  </td> <td class = "review3"> Highly Effective </td></tr>
"""

soup = BeautifulSoup(html_doc, "html.parser")

imgs = soup.select('td:contains("Overall rating:") ~ td > img')
print("Rating:", len(imgs))

编辑:要获取更多信息,请执行以下操作:

import requests
from bs4 import BeautifulSoup


url = "http://www.druglib.com/ratingsreviews/abilify/"
soup = BeautifulSoup(requests.get(url).content, "html.parser")

for h2 in soup.select("h2"):
    print(h2.text)
    print(
        "Rating:",
        len(
            h2.find_next(class_="review3").find_all(
                lambda tag: tag.name == "img"
                and "red_star" in tag.get("src", "")
            )
        ),
    )
    print(
        "Review:",
        h2.find_next("td", text="Benefits:").find_next(class_="review3").text,
    )
    print(
        "Side effects:",
        h2.find_next(
            lambda tag: tag.name == "td" and "Reported Results" in tag.text
        )
        .find_next("td", text="Side effects:")
        .find_next(class_="review3")
        .text,
    )
    print("-" * 80)
印刷品:

26岁女性患者的Abilify回顾 评级:3 评论:我根本没有注意到任何好处。据说,这有助于保持我的情绪平衡。最重要的是,我关注的是非常明显和普遍的副作用。 副作用:非常不舒服的内心不安是最严重的副作用。我觉得我必须不断地站起来走动,但这根本没用。我不能静静地坐着,晚上睡眠有很大问题,体重开始增加。 -------------------------------------------------------------------------------- 29岁女性患者的Abilify回顾 评级:8 回顾:我有严重的抑郁症伴躁动和混合状态双相躁狂。我失眠了。我服用了5毫克的阿比林3个月,然后我把它增加到10毫克。 副作用:我变得昏昏欲睡,然而,有了充足的睡眠(10小时),就没有宿醉的影响,例如,不像zyprexa。我也经历了一些认知迟钝——也就是说,我不能很好地思考我的脚 -------------------------------------------------------------------------------- 43岁女性患者的Abilify回顾 评级:10 回顾:在服用Abilify和Lexapro的鸡尾酒后的一周内,一个极度无组织的人……变得有组织。我现在能够记住约会时间,履行我的日常职责……这是一个救命稻草 副作用:未发现任何副作用 -------------------------------------------------------------------------------- 50岁女性患者的Abilify回顾 评级:2 回顾:在abilify上,我可以诚实地说抑郁症已经解决了, 副作用:但它导致了记忆丧失,再次引发了零售盗窃事件。这起零售盗窃案发生在服用5毫克阿比利夫的时候。这影响了我的判断/推理能力,因为我没有告诉我的医生&当我变得极度不安时,他允许我继续增加剂量至15mg。无法坐下,踱了几个小时&为此打电话给我的医生。另外,在我服用这种药物的两个月里,我的信用卡上没有余额,我收取了15000多英镑。如果有人这样做的话,不到300美元。我目前仍然失业&由于去年的犯罪记录,我很难找到注册护士的工作。如果我在服用抗精神病药物之前有问题,那么与我现在的情况相比,这些问题算不了什么。 -------------------------------------------------------------------------------- 50岁男性患者的Abilify回顾 评级:2 回顾:由于服药时间短,没有。 副作用:第一天早上4点头痛,服用Excedrin后缓解。偏头痛伴呕吐持续14小时。那天不能上班,就不吃了。 -------------------------------------------------------------------------------- 52岁女性患者的Abilify回顾 评级:6 回顾:我才用了一个星期,但我已经注意到一个变化。我更清醒了,好像雾已经散去了。我想得更清楚了,也不觉得那么沮丧。 副作用:目前没有。 -------------------------------------------------------------------------------- 52岁女性患者的Abilify回顾 评级:6 回顾:我才用了一个星期,但我已经注意到一个变化。我更清醒了,好像雾已经散去了。我想得更清楚了,也不觉得那么沮丧。 副作用:目前没有。 -------------------------------------------------------------------------------- 52岁女性患者的Abilify回顾 评级:6 回顾:我才用了一个星期,但我已经注意到一个变化。我更清醒了,好像雾已经散去了。我想得更清楚了,也不觉得那么沮丧。 副作用:目前没有。 --------------------------------------------------------------------------------
谢谢Andrej。惊人的解决方案。我能再问一个问题吗。因此,我正试图根据一位患者的回顾来提取数据,我需要提取评分、益处和副作用。我看到每一个药物的评价都在一个表格里,我怎么能一个一个地提取每个表格的上述细节呢?天哪。这太棒了。我在尝试其他事情。谢谢你,伙计。你太棒了。我会多练习。
import requests
from bs4 import BeautifulSoup


url = "http://www.druglib.com/ratingsreviews/abilify/"
soup = BeautifulSoup(requests.get(url).content, "html.parser")

for h2 in soup.select("h2"):
    print(h2.text)
    print(
        "Rating:",
        len(
            h2.find_next(class_="review3").find_all(
                lambda tag: tag.name == "img"
                and "red_star" in tag.get("src", "")
            )
        ),
    )
    print(
        "Review:",
        h2.find_next("td", text="Benefits:").find_next(class_="review3").text,
    )
    print(
        "Side effects:",
        h2.find_next(
            lambda tag: tag.name == "td" and "Reported Results" in tag.text
        )
        .find_next("td", text="Side effects:")
        .find_next(class_="review3")
        .text,
    )
    print("-" * 80)