0

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

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

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

具体来说,我试图只抓取文章的文本(所以没有图片、标题、标题等......)。我正在使用的代码是:

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

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

“在国务院任职 24 年的老兵彼得·范布伦是《我们的意思是:我如何帮助输掉伊拉克人民的心灵和思想的战斗:二战日本小说》的作者。@WeMeantWell 观点本文所表达的并非路透社新闻。”

(2) 文章中,部分文字带有超链接。例如,在第一句话

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

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

“伊拉克总理海德尔·阿巴迪于 2017 年 12 月 9 日对伊斯兰国提出异议”

请注意,缺少超链接部分“宣布胜利”。我怎样才能解决这个问题?我只希望完整句子的文本被刮掉;我不在乎 href 部分。

如果有人可以提供帮助,将不胜感激!

4

1 回答 1

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)
于 2018-07-09T01:21:05.367 回答