首页 > 解决方案 > 如何使用 python webcrawler 获取 HTML 子类的文本?输出似乎是一个空数组

问题描述

我想从子类中抓取文本

带有 BeautifulSoup 的 HTML 标记,但输出是一个空数组。

我已经尝试只使用上层类(msg-content-cell)和子类(f1vbk p-msg-head-body),最后没有标签 p。

这是我的python程序:

class CrawledArticle():
def __init__(self, heading, message):
    self.heading = heading
    self.message = message

class ArticleFetcher():
def fetch(self):
    url = "https://www.verkehrsinformation.de/?road=A8&region=%25"
    articles = []
    time.sleep(1)
    r = requests.get(url)  
    doc = BeautifulSoup(r.text, "html.parser")

    for heading in doc.select(".td-msg-head-heading"):
        heading = heading.select(".td-msg-head-heading")
        for message in doc.select(".msg-content-cell"):
            message = message.select(".msg-content-cell .f1vbk p-msg-head-body p")

            crawled = CrawledArticle(heading, message)
            articles.append(crawled)

    return articles

这是我要在其中抓取文本“zwischen Beratzhausen (95) und Parsberg (94)”的 HTML 源代码的摘录

 </div>
        <div id="a3itHKyCfOGlFAIL" class="table-row newmsg">
        <div class="msg-content-cell">
            <div class="row bg-white cursor-pointer" onclick="window.location.href='/staumeldung/?token=a3itHKyCfOGlFAIL&sp=ro:%|re:2|pg:1'">
                <div class="td-msg-head-heading">
                    <p class="f1vbk p-msg-head-heading">
                        A3 Passau Richtung Nürnberg:
                    </p>
                </div>
                <div class="td-msg-head-info">
                    &nbsp;                    </div>
            </div>
            <div class="row bg-white cursor-pointer" onclick="window.location.href='/staumeldung/?token=a3itHKyCfOGlFAIL&sp=ro:%|re:2|pg:1'">
                <p class="f1vbk p-msg-head-body">
                    zwischen Beratzhausen (95) und Parsberg (94) Wanderbaustelle.&nbsp;
                    <!--<a class="extendlink l1vbku">Mehr</a>...//-->
                </p>
                <p class="p-msg-head-body pull-right f1vbk">
                                        <a class="extendlink l1vbku">Kartenansicht</a>&nbsp;|
                    <a class="extendlink l1vbku">Alle Details</a>
                                    </p>
                                </div>
        </div>

我希望从子类“f1vbk p-msg-head-body”中抓取文本

HTML 标记,但输出是一个空数组。

与“td-msg-head-heading”类相比,区别在哪里?如何获取纯文本?

标签: pythonhtmlpython-3.xweb-scrapingbeautifulsoup

解决方案


也许你可以使用这样的东西:

doc.find("p", class_="f1vbk p-msg-head-body").string

推荐阅读