【问题标题】:Question Regarding XPath Selectors (For Scrapy)关于 XPath 选择器的问题(对于 Scrapy)
【发布时间】:2019-06-09 18:52:16
【问题描述】:

目的:从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()")

但是,上面的代码没有返回任何内容。 我做错了什么?

【问题讨论】:

    标签: python scrapy web-crawler screen-scraping


    【解决方案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'>,
    ...
    

    或者在您的选择器中更精确。

    【讨论】:

    • 谢谢,我现在完全理解 xpath 的工作原理了。
    猜你喜欢
    • 2016-03-12
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 2020-04-23
    相关资源
    最近更新 更多