Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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 2.7 使用scrapy从flipkart中删除数据_Python 2.7_Selenium_Web Scraping_Scrapy - Fatal编程技术网

Python 2.7 使用scrapy从flipkart中删除数据

Python 2.7 使用scrapy从flipkart中删除数据,python-2.7,selenium,web-scraping,scrapy,Python 2.7,Selenium,Web Scraping,Scrapy,我正试图从flipkart.com上搜集一些信息。为此,我正在使用Scrapy。我需要的信息是flipkart上每种产品的信息 我已经为我的spider使用了以下代码 从scrapy.contrib.spider导入爬行蜘蛛,规则 from scrapy.contrib.linkextractors import LinkExtractor from scrapy.selector import HtmlXPathSelector from tutorial.items import Tuto

我正试图从flipkart.com上搜集一些信息。为此,我正在使用Scrapy。我需要的信息是flipkart上每种产品的信息

我已经为我的spider使用了以下代码 从scrapy.contrib.spider导入爬行蜘蛛,规则

from scrapy.contrib.linkextractors import LinkExtractor
from scrapy.selector import HtmlXPathSelector

from tutorial.items import TutorialItem


class WebCrawler(CrawlSpider):
    name = "flipkart"
    allowed_domains = ['flipkart.com']
    start_urls = ['http://www.flipkart.com/store-directory']
    rules = [
        Rule(LinkExtractor(allow=['/(.*?)/p/(.*?)']), 'parse_flipkart', cb_kwargs=None, follow=True),
        Rule(LinkExtractor(allow=['/(.*?)/pr?(.*?)']), follow=True)
    ]

    @staticmethod
    def parse_flipkart(response):
        hxs = HtmlXPathSelector(response)
        item = FlipkartItem()
        item['featureKey'] = hxs.select('//td[@class="specsKey"]/text()').extract()
        yield item
我的意图是爬过每个产品类别页面(由第二条规则指定),并遵循类别页面内的产品页面(第一条规则)从产品页面中刮取数据

  • 一个问题是我找不到控制爬行和报废的方法
  • 第二个flipkart在其分类页面上使用ajax,当用户滚动到底部时,会显示更多产品
  • 我阅读了其他答案,并评估硒可能有助于解决这个问题。但是我找不到一个合适的方法来将它实现到这个结构中
  • 欢迎提出建议:)

    其他细节 我之前也用过类似的方法

    我使用的第二条规则是

    规则(LinkExtractor(allow=['/(.?)/pr?(.?)']),'parse_category',follow=True)

    现在我对回调“parse_category”或“parse_flipkart”的用法感到困惑

    谢谢你的耐心

  • 不知道你说你找不到控制爬行和刮擦的方法是什么意思。为了这个目的创建一个蜘蛛已经在控制它了,不是吗?如果您创建适当的规则并正确解析响应,那么这就是您所需要的。如果您指的是实际的刮页顺序,那么您很可能不需要这样做。您可以按任意顺序解析所有项目,但可以通过解析项目标题上方的面包屑信息来收集它们在类别层次结构中的位置。您可以使用类似这样的方法在列表中获取面包屑:

    response.css(".clp-breadcrumb").xpath('./ul/li//text()').extract()
    
  • 事实上,你并不需要硒,我相信这对于这个简单的问题来说是一种过分的杀伤力。使用您的浏览器(我目前使用的是Chrome),按F12打开开发者工具。转到其中一个类别页面,并在“开发人员”窗口中打开“网络”选项卡。如果这里有任何内容,请单击“清除”按钮将其清除一点。现在向下滚动,直到您看到正在加载其他项目,您将看到网络面板中列出的其他请求。按文档筛选它们(1),然后单击左窗格中的请求(2)。您可以看到请求的URL(3)和需要发送的查询参数(4)。请注意start参数,它将是最重要的参数,因为您必须多次调用此请求,同时增加此值以获取新项目。您可以在预览窗格(5)中检查响应,您将看到来自服务器的请求正是您所需要的,更多项目。您用于项目的规则也应该选择这些链接

    有关使用Firebug进行刮除的更多详细概述,您可以查看

  • 由于没有必要为您的目的使用硒,因此,如果需要的话,我将添加几个链接来说明如何将硒与Scrapy一起使用:

  • response.css(".clp-breadcrumb").xpath('./ul/li//text()').extract()