【问题标题】:missing some text when parsing article content with lxml, what is the issue?使用 lxml 解析文章内容时缺少一些文本,这是什么问题?
【发布时间】:2019-05-24 00:21:44
【问题描述】:

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

这是我的代码:带有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

我成功地获得了所有突出显示的文本,但其余的都丢失了,不是中间的文本我成功地避免了这种情况。我只想要其中不包含的文本。

感谢您的帮助!!

【问题讨论】:

  • “不是中间的文字,我成功地避免了”是什么意思?是不是以“Lire aussi”开头的那一段?
  • 是的,我不知道该评论是否有必要,我只是想确保人们不会因为试图获取这些链接而陷入困境。我只是主要段落中的文字之一。
  • 什么是getWordList()
  • 我用来将句子中的每个单词都放入列表的功能,效果很好
  • 即使运行良好,也需要发布,否则无法检查您上面的代码。

标签: python parsing html-parsing lxml article


【解决方案1】:

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

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

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

text = pTag[x].text_content()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 2016-04-25
    相关资源
    最近更新 更多