如何使用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

这是HTML源代码的摘录,我想在其中提取文本“ zwischen beratzhausen(95)和Parsberg(94)”

 </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>

我希望从

HTML标记内的子类“ f1vbk p-msg-head-body”中抓取文本,但是输出为空数组。

与“ td-msg-head-heading”类相比,有什么区别?如何获取纯文本?

jieke_mao 回答:如何使用python webcrawler获取HTML子类的文本?输出似乎是一个空数组

也许您可以使用类似这样的东西:

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

不确定您要对类做什么,但是我会选择header和message的父元素,并将那些提取header和message的子元素循环。不知道为什么要在那里睡一觉。

P.S。使用比我更多的描述性变量名称。

from  bs4 import BeautifulSoup
import requests,time

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,"lxml")

        for item in doc.select('.msg-content-cell'):
            heading = item.select_one('.p-msg-head-heading').text.strip()
            message = item.select_one('.msg-content-cell .p-msg-head-body:not(.pull-right)').text.strip()
            crawled = CrawledArticle(heading,message)
            articles.append(crawled)

        return articles

a = ArticleFetcher()
b = a.fetch()
for item in b:
    print(item.heading,'\n',item.message)

示例输出:

enter image description here

本文链接:https://www.f2er.com/3145431.html

大家都在问