Python Scrapy没有通过所有标签

时间:2017-05-12 17:59:00

标签: python html xpath css-selectors scrapy

我正在尝试编写一个ebay脚本,该脚本遍历页面中的每个产品并转到下一页并执行相同的操作

但由于某种原因,脚本将进入每个下一页但不通过页面上的每个项目,我认为我已经选择了正确的选择器

ul 包含代表网页上每个项目的所有 li 元素

但问题是scrapy只通过页面中的第一个链接跳过页面的其余部分并转到下一页

对于每个页面scrapy只需要一个项目,它应该逐个采取所有项目

我使用了 xpath 选择器.//ul[@id="ListViewInner"]/li 标识为ListViewInner li ul

我使用了css选择器.sresult.lvresult.clearfix.li.shic类,每个li都有,但在每种情况下

从页面中仅获取1个项目后停止

here  我正在打印 我在这里 每个项目部分(scrapy应该进入)但是只有在第一个元素没有通过其余部分之后才退出页面中有49个项目

这是简单的代码

class EbayspiderSpider(scrapy.Spider):
    name = "ebayspider"
    #allowed_domains = ["ebay.com"]
    start_urls = ['http://www.ebay.com/sch/hfinney/m.html?item=132127244893&rt=nc&_trksid=p2047675.l2562']


    def parse(self, response):

        DEF_SELECTOR = './/*[@id="ListViewInner"]/li'

        for attr in response.xpath(DEF_SELECTOR):

            #item = EbayItem()
            #linkse = 'a.vip ::attr(href)'
            #link = attr.css(linkse).extract_first()
            #yield scrapy.Request(urljoin(response.url, link), callback=self.parse_link, meta={'item': item})"""

            print '\n\n\tI AM HERE!!'
        #next_page = '.gspr.next ::attr(href)'
        #next_page = response.css(next_page).extract_first()
        #if next_page:
            #yield scrapy.Request(urljoin(response.url, next_page), callback=self.parse)

我评论了执行部分因为程序甚至没有通过每页50个产品

这是页面中的inspect元素

here 并扩大 here

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

疯狂猜测:在settings.py中设置ROBOTSTXT_OBEY=False

您的日志显示scrapy正在下载robots.txt,如果它遵循其内容,它肯定不会再进行抓取。

除此之外,我还没有看到您的解析功能无法提取多个项目/链接的原因。

当我在scrapy shell(没有ROBOTSTXT_OBEY)中运行时:

for attr in response.xpath('//*[@id="ListViewInner"]/li'):
    print attr.css('a.vip ::attr(href)').extract()

(这是100%基于您的代码)...我有一长串网址:

[u'http://www.ebay.com/itm/Cat-Caterpillar-Excavator-Monitor-320B-320BL-320BLN-321B-322BL-325BL-151-9385-/361916086833?hash=item5443e13a31:g:NMwAAOSwX~dWomWJ']
[u'http://www.ebay.com/itm/257954A1-New-Case-580SL-580SM-580SL-Series-2-Backhoe-Loader-Hydraulic-Pump-/361345120303?hash=item5421d8f82f:g:KQEAAOSwBLlVVP0X']
#.....

......这就是你所期望的。

我在您的代码中看到的另一个问题是您通过将link.url与链接相关联来创建请求网址的方式,而链接已经包含完整链接。最好在这里使用Scrapy的linkextractors,因为他们可以开箱即用。

PS:请以文本格式发布日志,使搜索和差异更容易。