使用lxml解析文章内容时缺少一些文本,这是什么问题?

时间:2019-05-24 00:21:45

标签: python parsing html-parsing lxml article

我正在使用以下代码来解析来自法国新闻网站的文章。获取所有段落时,我一直缺少一些文字。这是为什么?

这是我的代码:带有XX的代码与其他部分最相关,只是我将其放在自己的结构中以供使用。

def getWordList(sent,wordList):
    listOfWords = list((sent).split())
    for i in listOfWords:
       i = i.replace("."," ")
       i = i.replace(","," ")
       i = i.replace('\"'," ")
       valids = re.sub(r"[^A-Za-z]+", '', i)
       if(len(i) > 3 and (i.lower() not in stopWords) and i.isnumeric() != 
True and valids):
           wordList[valids] = {}
           wordList[valids]["definition"] = ""
           wordList[valids]["status"] = ""
def parse(link):

    page = requests.get(link)

    tree = html.fromstring(page.content)
    XXword = tree.xpath('//*[@class="article__content  old__article-content-single"]')
    articleContent = {}
    articleContent["words"] = {}
    articleContent["language"] = "French";
    wordList = articleContent["words"]
    contentList = []
    XXpTag = word[0].xpath('//*')
    pText = {}
    for x in range(len(pTag)):
        #print(pTag[x].get("class"))
        if(pTag[x].text != None):
            if(pTag[x].tail != None):
                print("tail")
                XXtext = pTag[x].text + pTag[x].tail
            else:
                print("no tail")
                XXtext = pTag[x].text
            XXif(pTag[x].get("class") == "article__paragraph "):
                print(pTag[x].get("class"))
                print(text)
                getWordList(text,wordList)
                pText[text] = {}
                pText[text]["status"] = ""
                pText[text]["type"] = "p"
            XXelif(pTag[x].get("class") == "article__sub-title"):
                print(pTag[x].get("class"))
                getWordList(text,wordList)
                pText[text] = {}
                pText[text]["status"] = ""
                pText[text]["type"] = "h2"

这是示例文章链接:https://www.lemonde.fr/economie/article/2019/05/23/vivendi-chercherait-a-ceder-universal-music-group-au-chinois-tencent_5466130_3234.html

我成功获取了所有突出显示的文本,但其余部分丢失了, 不是中间的文本,我成功地避免了这一点。我只希望其中的文本不包括在内。 enter image description here

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您正在尝试获取包含其他标签的标签的内容。例如,<em>段落标签中有<p>个强调文本标签。

使用text_content()方法而不是text来获取段落的全部内容:

text = pTag[x].text_content() + pTag[x].tail

text = pTag[x].text_content()