В чем проблема при разборе содержимого статьи с помощью lxml? - PullRequest
0 голосов
/ 24 мая 2019

Я использую следующий код для разбора статьи с французского новостного сайта.Когда я получаю все параграфы, я пропускаю какой-то текст.это почему?

Вот мой код: код с ХХ наиболее актуален, остальные части просто я помещаю его в свою собственную структуру для использования.

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 голосов
/ 25 мая 2019

Вы пытаетесь получить содержимое тегов, содержащих другие теги. Например, в тегах абзаца <p> есть выделенные текстовые теги <em>.

Используйте метод text_content() вместо text, чтобы получить полное содержание ваших абзацев:

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

и

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