规范化通过Scrapy中的xpath选择器收集的字符串列表

a1o7rhls  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(120)

我正在使用Scrapy从this one等文章中抓取信息。
下面的结果是一个字符串列表,但也有换行符和白色,我希望避免这样。

>>> response.xpath('//div[@data-area="body"]/div[@data-sara-click-el="body_element" and @data-area="text"]//p//text()').getall()
['Bei Schüssen in Indianapolis im US-Bundesstaat ', 'Indiana', ' sind drei niederländische Soldaten verletzt worden. Einer von ihnen befinde sich in kritischem Zustand, teilte das Verteidigungsministerium in Den Haag mit. Die beiden anderen seien bei Bewusstsein und ansprechbar.', 'Die Soldaten befanden sich für eine Übung im US-Bundesstaat Indiana. Zu der Schießerei kam es vor ihrem Hotel in der Großstadt Indianapolis, zu diesem Zeitpunkt waren die Soldaten aber in ihrer Freizeit unterwegs. Der Hintergrund war zunächst unklar. Die Polizei nahm Ermittlungen auf, bisher habe es noch keine Festnahmen gegeben, ', 'meldete das Verteidigungsministerium\xa0', '\n    ', '\n    ', '\n', '.', 'Mehrere US-Medien berichteten unter Berufung auf die Polizei, Beamte seien in der Nacht zum Samstag gegen 3.30 Uhr (Ortszeit) zu dem Hotel in der Innenstadt gerufen worden. Dort hätten sie die drei Männer mit Schusswunden gefunden.', 'Nun würden mehrere Zeugen befragt, und die Polizei gehe verschiedenen Hinweisen nach, heißt es. Eine Beschreibung der potenziellen Täter sei noch nicht veröffentlicht worden. Ein lokaler Fernsehsender berichtete, dass es das zweite Mal in einer Woche gewesen sei, dass es in Indianapolis zu Schüssen mit Verletzten gekommen sei.']

我试着像这样使用normalize-space():

2022-08-29 17:48:16 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.spiegel.de/panorama/indianapolis-drei-niederlaendische-soldaten-durch-schuesse-in-usa-verletzt-a-1009ecf0-2022-44e5-8dd4-784ebad040b1> (referer: None)
>>> article_text_list = response.xpath('normalize-space(//div[@data-area="body"]/div[@data-sara-click-el="body_element" and @data-area="text"]//p//text())').getall()
>>> article_text_list
['Bei Schüssen in Indianapolis im US-Bundesstaat']
>>>

这并没有像我预期的那样起作用,因为normalize-string()只对第一个字符串起作用。然后我发现normalize-space()至少在Xpath 2.0版本中可以放在Xpath的末尾,所以我尝试了不同的组合,但每次都得到一个无效表达式错误。这就是我所尝试的:
第一个
解析器只是使用Xpath 1.0吗?
在任何情况下,我如何着手删除不需要的字符?
我需要将列表连接成一个字符串,我可以用''.join()来完成,但是我应该完全放弃Xpath方法,而是在以后处理字符串吗?

pftdvrlh

pftdvrlh1#

如果你只是想去掉前导和尾随的空格,你可以使用内置的Python字符串方法strip

[text.strip() for text in response.xpath('//div[@data-area="body"]/div[@data-sara-click-el="body_element" and @data-area="text"]//p//text()').get_all()]

相关问题