Scrapy抓取类别链接到产品页面

时间:2015-12-28 16:00:47

标签: python-2.7 web-scraping scrapy

你好我试图抓一个电子商务网站,用滚动加载数据并加载更多按钮我跟着这个How to scrape website with infinte scrolling?链接但是当我尝试代码它关闭蜘蛛而没有产品可能是结构已经改变了我希望得到一些帮助让我开始我对webscraping很新。

编辑问题 好吧,我正在抓这个网站[链接] http://www.jabong.com/women/有子类别,我试图刮掉我尝试上面代码的所有子类别产品但是没有工作,所以做了一些研究后我创建了一个有效但不满足的代码我的目标。到目前为止,我已经尝试了这个

` import scrapy
#from scrapy.exceptions import CloseSpider

from scrapy.spiders import Spider
#from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.http import Request
from koovs.items import product
#from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import Selector    

class propubSpider(scrapy.Spider):
name = 'koovs'
allowed_domains = ['jabong.com']
max_pages = 40

def start_requests(self):
    for i in range(self.max_pages):
         yield scrapy.Request('http://www.jabong.com/women/clothing/tops-tees-shirts/tops/?page=%d' % i, callback=self.parse)

def parse(self, response):
    for sel in response.xpath('//*[@id="catalog-product"]/section[2]'):
        item = product()
        item['price'] = sel.xpath('//*[@class="price"]/span[2]/text()').extract()
        item['image'] = sel.xpath('//*[@class="primary-image thumb loaded"]/img').extract()
        item['title'] = sel.xpath('//*[@data-original-href]/@href').extract()
     `

以上代码适用于一个类别,如果我指定页数,上面的网站有很多产品给定类别,我不知道他们居住了多少页面,所以我决定使用爬行蜘蛛浏览所有类别和产品页面并获取数据但我非常新的scrapy任何帮助将非常感激

1 个答案:

答案 0 :(得分:1)

首先要了解的是网站的DOM结构经常发生变化。因此,过去编写的刮刀现在可能也可能不适合您。

因此,抓取网站时最好的方法是找到一个隐藏的api或隐藏的网址,这只能在您网站的网络流量延迟时看到。这不仅为您提供了可靠的抓取解决方案,而且还节省了带宽,这在进行广泛爬行时非常重要,因为大部分时间您都不需要下载整个页面。

让我们以您正在抓取的网站为例,以获得更清晰的信息。当您访问此page时,您会看到显示Show More Product的按钮。转到浏览器的开发人员工具,然后选择网络分析器。当您单击该按钮时,您将看到浏览器向此link发送GET请求。检查响应,您将在第一页看到所有产品的列表。现在,当您分析此链接时,您可以看到它具有参数page=1。将其更改为page=2,您将在第二页中看到所有产品的列表。

现在继续写蜘蛛。它将类似于:

import scrapy
from scrapy.exceptions import CloseSpider
from scrapy.spider import BaseSpider
from scrapy.http import Request
from jabong.items import product

class aqaqspider(BaseSpider):
    name = "jabong"
    allowed_domains = ["jabong.com"]
    start_urls = [
    "http://www.jabong.com/women/clothing/tops-tees-shirts/tops/?page=1&limit=52&sortField=popularity&sortBy=desc",
]
    page = 1

    def parse(self, response):
        products = response.xpath('//*[@id="catalog-product"]/section[2]/div')
        if not products:
            raise CloseSpider("No more products!")

        for p in products:
            item = product()
            item['price'] = p.xpath('a/div/div[2]/span[@class="standard-price"]/text()').extract()
            item['title'] = p.xpath('a/div/div[1]/text()').extract()
            if item['title']:
                yield item

        self.page += 1
        yield Request(url="http://www.jabong.com/women/clothing/tops-tees-shirts/tops/?page=%d&limit=52&sortField=popularity&sortBy=desc" % self.page,
                  callback=self.parse, 
                  dont_filter=True)  

N.B .- 此示例仅用于教育目的。在抓取/抓取/存储网站上的任何数据之前,请参阅网站Terms and Conditions/Privacy Policy/Robots.txt