Scrapy:在抓取中排除一些文本

时间:2018-07-08 22:51:24

标签: python web-scraping scrapy

我是新手,而且花了很长时间尝试解决我认为应该是两个简单的问题。

(1)我正在尝试抓取此网站:

https://www.reuters.com/article/us-vanburen-iraq-commentary/commentary-the-tragedy-of-the-u-s-victory-in-iraq-idUSKBN1FF2XW

具体来说,我正在尝试仅抓取文章的文字(因此,没有图片,标题,标题等)。我正在使用的代码是:

response.css('div.body_1gnLA p::text').extract()

问题在于,在文章的底部,有一个“关于作者”部分被包含在抓取中,我不想这样做。我不需要的特定文本如下:

”在国务院工作了24年的老将彼得·范布伦(Peter Van Buren)是《我们的意思很好:我如何帮助打败伊拉克人民的心灵和胡珀战争:第二次世界大战的小说》的作者日本@WeMeantWell 本文表达的观点不是路透社的观点。”

(2)在文章中,某些文本是超链接的。例如,在第一句话中

“伊拉克总理海德尔·阿巴迪于2017年12月9日宣布击败伊斯兰国”

宣布胜利已超链接。当我使用上面编写的代码进行抓取时,它会给我

“ 2017年12月9日,伊拉克总理Haider al-Abadi主持伊斯兰国”

注意,超链接部分“宣告胜利”丢失了。我怎样才能解决这个问题?我只希望删除整个句子的全文;我不在乎href部分。

非常感谢任何人能提供帮助!

1 个答案:

答案 0 :(得分:0)

一种可能的方式:

def parse(self, response):

    paragraphs = []

    for p in response.xpath('//div[@class="body_1gnLA"]/p'):
        p_text = p.xpath( 'string(.)' ).extract_first()
        paragraphs.append(p_text)

    article = "\n".join(paragraphs)
    print(article)