如何抓取新闻内容并去除无关部分

1 投票
1 回答
1437 浏览
提问于 2025-06-18 04:08

我想用BeautifulSoup和for循环来抓取100篇新闻文本,并把这些文本存储到一个叫myarticle的列表里。我希望myarticle里面只包含新闻文章的内容,而我发现所有的新闻都有一个h属性。但是,我得到的结果却包含了很多无关的部分,比如:“感谢您联系我们。我们已经收到您的提交。”还有“这篇文章被分享了205,105次。”等等。

另一个问题是,当我print(myarticle[0])时,它给了我很多新闻文章,但我原本只希望它能给我一篇文章。

我想知道如何去掉那些无关的部分,只保留我们在新闻网站上看到的主要内容。还有,我该如何调整代码,让print(myarticle[0])只给我第一篇新闻文章。

其中一篇100篇新闻文章在这个页面上: https://nypost.com/2020/04/21/missouri-sues-china-over-coronavirus-deceit/

我想抓取的其他新闻文章在这个网站上: https://nypost.com/search/China+COVID-19/page/1/?orderby=relevance

以下是与我问题相关的代码行。

            for pagelink in pagelinks:
                #get page text
                page = requests.get(pagelink)
                #parse with BeautifulSoup
                soup = bs(page.text, 'lxml')
                articletext = soup.find_all('p')
                for paragraph in articletext[:-1]:
                    #get the text only
                    text = paragraph.get_text()
                    paragraphtext.append(text)

                #combine all paragraphs into an article
                thearticle.append(paragraphtext)
    # join paragraphs to re-create the article            
    myarticle = [''.join(article) for article in thearticle]
    #show the first string of the list
    print(myarticle[0])

相关问题:

  • 暂无相关问题
暂无标签

1 个回答

1
soup.find_all('p')

这里你可以找到网页中所有的P标签元素。P标签是用来显示大部分文本的,非常常见,所以你会看到一些不是文章的文本。

我会先找到只包含文章的那个div,然后再获取文本,像这样:

container = soup.find("div", class_=['entry-content', 'entry-content-read-more'])
articletext = container.find_all('p')

撰写回答