Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.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 如何从所有页面获取数据?_Python_Scrapy_Frameworks - Fatal编程技术网

Python 如何从所有页面获取数据?

Python 如何从所有页面获取数据?,python,scrapy,frameworks,Python,Scrapy,Frameworks,这是我第一次在python中使用Scrapy框架 所以我做了这个代码 # -*- coding: utf-8 -*- import scrapy class SpiderSpider(scrapy.Spider): name = 'spider' start_urls = [ 'https://www.emag.ro/televizoare/c' ] def parse(self, response): for i in re

这是我第一次在python中使用Scrapy框架

所以我做了这个代码

# -*- coding: utf-8 -*-
import scrapy


class SpiderSpider(scrapy.Spider):
    name = 'spider'
    start_urls = [
        'https://www.emag.ro/televizoare/c'
    ]

    def parse(self, response):
        for i in response.xpath('//div[@class="card-section-wrapper js-section-wrapper"]'):
            yield {
                'product-name': i.xpath('.//a[@class="product-title js-product-url"]/text()')
                                .extract_first().replace('\n','')
            }

        next_page_url = response.xpath('//a[@class="js-change-page"]/@href').extract_first()
        if next_page_url is not None:
            yield scrapy.Request(response.urljoin(next_page_url))
当我在网站上看到它有超过800种产品。但我的脚本只占用了前2页近200个产品

我尝试使用css选择器和xpath,两者都是相同的错误

有人能找出问题出在哪里吗


谢谢大家!

您尝试爬网的网站正在从API获取数据。当您单击分页链接时,它会向API发送ajax请求,以获取更多产品并在页面上显示它们

Scrapy不模拟浏览器环境本身

所以一种方法就是你

  • 在浏览器网络选项卡中分析请求,以检查端点和参数

  • 在scrapy中自己构建类似的请求

  • 使用适当的参数调用该端点以从API获取产品


  • 此外,您还需要从API获得的json响应中提取下一页。通常有一个名为pagination的键,其中包含与总页面、下一页等相关的信息。

    我终于想出了如何做

    # -*- coding: utf-8 -*-
    import scrapy
    from ..items import ScraperItem
    
    
    class SpiderSpider(scrapy.Spider):
        name = 'spider'
        page_number = 2
        start_urls = [
            'https://www.emag.ro/televizoare/c'
        ]
    
        def parse(self, response):
    
            items = ScraperItem()
    
            for i in response.xpath('//div[@class="card-section-wrapper js-section-wrapper"]'):
    
                product_name = i.xpath('.//a[@class="product-title js-product-url"]/text()').extract_first().replace('\n                        ','').replace('\n                    ','')
    
                items["product_name"] = product_name
    
                yield items
    
                next_page = 'https://www.emag.ro/televizoare/p' + str(SpiderSpider.page_number) + '/c'
    
                if SpiderSpider.page_number <= 28:
                    SpiderSpider.page_number += 1
                    yield response.follow(next_page, callback = self.parse)
    
    #-*-编码:utf-8-*-
    进口羊瘙痒
    从..项导入ScraperItem
    蜘蛛蛛类蜘蛛(刮毛蜘蛛):
    名称='spider'
    页码=2
    起始URL=[
    'https://www.emag.ro/televizoare/c'
    ]
    def解析(自我,响应):
    items=ScraperItem()
    对于响应中的i.xpath('//div[@class=“card section wrapper js section wrapper”]'):
    product_name=i.xpath('.//a[@class=“product title js product url”]/text()).extract_first().replace('\n','').replace('\n','')
    项目[“产品名称”]=产品名称
    收益项目
    下一页https://www.emag.ro/televizoare/p“+str(蜘蛛蛛.页码)+”/c”
    if SpiderSpider.page_编号