【问题标题】:Python Scrapy not going through all the tagsPython Scrapy 没有遍历所有标签
【发布时间】:2017-10-12 03:17:32
【问题描述】:

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

但由于某种原因,脚本会转到下一页,但不是通过页面上的每个项目,我认为我已经正确编写了选择器

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

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

对于每个页面,scrapy 只需要一个项目,它应该一个接一个地把所有项目都拿走

我用过 xpath 选择器.//ul[@id="ListViewInner"]/li id 为 ListViewInnerul 及其下的每个 li

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

仅从页面中获取 1 项后停止 我正在为每个项目部分打印我在这里(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 个产品

这是页面中的检查元素

并放大

我在这里做错了什么?

【问题讨论】:

    标签: python html xpath css-selectors scrapy


    【解决方案1】:

    大胆猜测:在 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% 基于您的代码)...我有一个长长的 URL 列表:

    [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']
    #.....
    

    ...这是你所期望的。

    我在您的代码中看到的另一个问题是您如何通过将 response.url 与链接连接来创建请求 URL,而链接已经包含完整的链接。最好在这里使用 Scrapy 的链接提取器,因为它们可以开箱即用地处理此类情况。

    PS:请以文本格式发布您的日志,便于搜索和比较。

    【讨论】:

      猜你喜欢
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 2015-09-08
      相关资源
      最近更新 更多