有关XPath选择器的问题(对于Scrapy)

时间:2019-06-09 18:52:16

标签: python scrapy web-crawler screen-scraping

目标:从div类list_area daily_all中抓取文本数据。

我首先使用scrapy shell“抓取了”我要从中抓取数据的网站: https://comic.naver.com/webtoon/weekday.nhn

使用“ scrapy shell”脚本: scrapy shell 'https://comic.naver.com/webtoon/weekday.nhn'

然后使用xpath,我要从div类“ list_area daily_all”中抓取所有文本数据:

response.xpath("//div[@id='wrap']/div[@id='container']/div[@class='list_area daily_all']/text()")

但是,以上代码未返回任何内容。 我在做什么错了?

1 个答案:

答案 0 :(得分:1)

由于div[@id='container']div[@class='list_area daily_all']不是父母和孩子,因此您不会获得对象。

再添加一个斜杠,您将成功:

In [1]: response.xpath("//div[@id='wrap']/div[@id='container']//div[@class='list_area daily_all']")
Out[1]: [<Selector xpath="//div[@id='wrap']/div[@id='container']//div[@class='list_area daily_all']" data=u'<div class="list_area daily_all">\r\n     '>]

与文本相同。您选择了非常大的块,并且其中包含很多标签和文本。您可以选择所有文本,例如:

In [2]: response.xpath("//div[@id='wrap']/div[@id='container']//div[@class='list_area daily_all']//text()")
Out[2]: 
[<Selector xpath="//div[@id='wrap']/div[@id='container']//div[@class='list_area daily_all']//text()" data=u'\r\n                \r\n\t\t\t\t'>,
 <Selector xpath="//div[@id='wrap']/div[@id='container']//div[@class='list_area daily_all']//text()" data=u'\r\n\t\t\t\t\t'>,
...

或者在选择器中更精确些。