Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scrapy不解析所有项_Python_Scrapy_Scrapy Spider - Fatal编程技术网

Python Scrapy不解析所有项

Python Scrapy不解析所有项,python,scrapy,scrapy-spider,Python,Scrapy,Scrapy Spider,我正在尝试为电子商务站点构建一个简单的scrapy爬虫 它遵循链接,似乎通过XPath找到了所有需要的元素。然而,出于某种原因,它只解析了1200个条目,而不是1531个,就像它有某种限制一样。 我尝试过切换选择器,甚至在selenium中模拟下一页的点击,但都没有成功 以下是完整的爬虫程序代码: import scrapy from scrapy.loader import ItemLoader from scrapy.crawler import CrawlerProcess class

我正在尝试为电子商务站点构建一个简单的scrapy爬虫

它遵循链接,似乎通过XPath找到了所有需要的元素。然而,出于某种原因,它只解析了1200个条目,而不是1531个,就像它有某种限制一样。 我尝试过切换选择器,甚至在selenium中模拟下一页的点击,但都没有成功

以下是完整的爬虫程序代码:

import scrapy
from scrapy.loader import ItemLoader
from scrapy.crawler import CrawlerProcess


class Product(scrapy.Item):
    category=scrapy.Field()
    price = scrapy.Field()
    name = scrapy.Field()


class ObiSpider(scrapy.spiders.CrawlSpider):
    name = "obi_spider"
    start_urls = ["https://www.obi.ru/vsyo-dlya-doma/lakokrasochnye-materialy/c/296"]


    def parse(self, response):
        for link in response.xpath("//ul[@class='first-level dashed']/li/a/@href").extract():
            yield scrapy.Request(response.urljoin(link), callback=self.parse_page)   


    def parse_page(self, response):
        ans=response.xpath("//li[@class='product large']")
        for prod in ans:
            loader = ItemLoader(item=Product(), selector=prod)
            loader.add_xpath('category', "//div[@class='head dashed selectable']/a/text()")
            loader.add_xpath('name', ".//span[@class='description']/p/text()")
            loader.add_xpath('price', ".//span[@class='price']/span/@data-csscontent")
            yield loader.load_item()
        path = response.xpath("//div[@id='PaginationLinks']/a/@href").extract()
        for link in path:
            if "?page" in link:
                yield scrapy.Request(response.urljoin(link), callback=self.parse_page)



process = CrawlerProcess()
process.crawl(ObiSpider)
process.start()

感谢您的帮助。提前谢谢。

我想这不是你蜘蛛的问题,而是产品数量的计算问题。 您可以在第页中看到产品列表:

有些产品有一些组合,但列表中只有一个链接。 等:

请提供更多详细信息:刮擦日志是否显示任何错误或非200响应代码?如果是,在这里张贴日志。另外,请检查刮板是否实际访问了它应该访问的所有页面。1200的偶数限制听起来像是在某个时候被阻止了(在访问了20个页面,每个页面有60个产品)并且无法访问所有页面。