首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Scrapy使用Xpath或Css选择器返回空分区

使用Scrapy使用Xpath或Css选择器返回空分区
EN

Stack Overflow用户
提问于 2016-07-28 11:02:45
回答 1查看 2K关注 0票数 0

我正在使用Scrapy爬行一个网页,其中包含一个特定的文章。

我试图用类“返回”来获取存储在div中的信息。当我使用Scrapy或Css选择器时,div返回的大问题总是空的。

我正在尝试提取的Div:

代码语言:javascript
复制
<div class="return">  

                        <p><strong>Conditionnement : </strong></p>
                        <p class="one-product-detail">2 colis :<br>
                        L178xl106xH80&nbsp;72kg<br>L178xl112xH80&nbsp;60kg<br>
                        <span itemprop="weight" alt="3fin" class="hidden" hidden="">132kg</span></p>   

 </div>

我的蜘蛛代码:

代码语言:javascript
复制
import scrapy
from alinea.items import AlineaItem

class AlineaSpider(scrapy.Spider):
    name = "alinea"
    start_urls = [
        "http://www.alinea.fr/",
    ]
    def parse(self, response):
        # ref = input("Enter Item Reference ?\n")
        # 25321050
        # link = "http://www.alinea.fr/alinea_fredhopper/catalogSearch_result/products/search/" + str(ref)
        link = "http://www.alinea.fr/alinea_fredhopper/catalogSearch_result/products/search/" + str(25321050)
        print(link)
        return scrapy.Request(link,
                              callback=self.parse_page2)

    def parse_page2(self, response):
        self.logger.info("Visited %s", response.url)

        for sel in response.xpath('//li[contains(@itemprop,"title")]/text()'):
            print("**************")
            print("Description")
            print(sel.extract())
            print("**************")

        # print("------------------------------------------------------------------")
        #
        # for sel in response.xpath('//*[@class="delivery"]'):
        #
        #     print("**************")
        #     print("Details")
        #     print(sel.extract())
        #     print("**************")

        print("------------------------------------------------------------------")

        for sel in response.css('[class="return"]'):

            print("**************")
            print("Details")
            print(sel.extract())
            print("**************")

我的终端日志:

代码语言:javascript
复制
2016-07-28 12:57:21 [alinea] INFO: Visited http://www.alinea.fr/orca-canape-angle-gauche-droit-convertible-gris.html
**************
Description

                    Orca - Canapé CONVERTIBLE d'angle gauche ou droit gris                
**************
------------------------------------------------------------------
**************
Details
<div class="return">



</div>
**************
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-29 00:33:41

您访问的页面完全没有该div的内容。所以你应该得到你所拥有的。

如果您更改为其他页面,例如http://www.alinea.fr/orca-canape-angle-droit-gris-fonce.html,您将看到div在那里而不是空的。

来自shell的输出:scrapy shell 'http://www.alinea.fr/orca-canape-angle-droit-gris-fonce.html'

代码语言:javascript
复制
In [1]: response.xpath('//div[@class="return"]').extract()
Out[1]: [u'<div class="return">\n\n            \n<p><strong>Conditionnement : </strong></p>\n<p class="one-product-detail">\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t2 colis :<br>\n\t\t\t\t\t\t\t\t\t L178xl106xH80\xa055kg<br>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t L178xl112xH80\xa053kg<br>\t\t\t\t\t\t<span itemprop="weight" alt="3fin" hidden class="hidden">108kg</span></p>\n        \n</div>']

如果您想要文本,可以使用//text(),因为/text()只在div下面直接给出文本,在您的例子中是空格。

代码语言:javascript
复制
In [2]: response.xpath('//div[@class="return"]/text()').extract()
Out[2]: [u'\n\n            \n', u'\n', u'\n        \n']

In [3]: [x.strip() for x in response.xpath('//div[@class="return"]//text()').extract()]                                                                                                                                                             
Out[3]: 
[u'',
 u'Conditionnement :',
 u'',
 u'2 colis :',
 u'L178xl106xH80\xa055kg',
 u'L178xl112xH80\xa053kg',
 u'',
 u'108kg',
 u'']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38634495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档