当前位置: 首页 > 知识库问答 >
问题:

刮痕爬行蜘蛛不连接

范福
2023-03-14

我在这里和其他网站上读了很多关于scrapy的文章,但我无法解决这个问题,所以我问你:P希望有人能帮助我。

我想在主客户端页面中验证登录名,然后解析所有类别和所有产品,并保存产品的标题、类别、数量和价格。

我的代码:

# -*- coding: utf-8 -*-

import scrapy
from scrapy.item import Item, Field
from scrapy.spiders import CrawlSpider
from scrapy.spiders import Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.loader.processors import Join
from scrapy.contrib.spiders.init import InitSpider
from scrapy.http import Request, FormRequest
import logging

class article(Item):
    category = Field()
    title = Field()
    quantity = Field()
    price = Field()

class combatzone_spider(CrawlSpider):
    name = 'combatzone_spider'
    allowed_domains = ['www.combatzone.es']
    start_urls = ['http://www.combatzone.es/areadeclientes/']

    rules = (
        Rule(LinkExtractor(allow=r'/category.php?id=\d+'),follow=True),
        Rule(LinkExtractor(allow=r'&page=\d+'),follow=True),
        Rule(LinkExtractor(allow=r'goods.php?id=\d+'),follow=True,callback='parse_items'),
    )

def init_request(self):
    logging.info("You are in initRequest")
    return Request(url=self,callback=self.login)

def login(self,response):
    logging.info("You are in login")
    return scrapy.FormRequest.from_response(response,formname='ECS_LOGINFORM',formdata={'username':'XXXX','password':'YYYY'},callback=self.check_login_response)

def check_login_response(self,response):
    logging.info("You are in checkLogin")
    if "Hola,XXXX" in response.body:
        self.log("Succesfully logged in.")
        return self.initialized()
    else:
        self.log("Something wrong in login.")

def parse_items(self,response):
    logging.info("You are in item")
    item = scrapy.loader.ItemLoader(article(),response)
    item.add_xpath('category','/html/body/div[3]/div[2]/div[2]/a[2]/text()')
    item.add_xpath('title','/html/body/div[3]/div[2]/div[2]/div/div[2]/h1/text()')
    item.add_xpath('quantity','//*[@id="ECS_FORMBUY"]/div[1]/ul/li[2]/font/text()')
    item.add_xpath('price','//*[@id="ECS_RANKPRICE_2"]/text()')
    yield item.load_item()

当我在终端上运行scrapy爬行蜘蛛时,我得到以下信息:

刮痒的)pi@raspberry:~/SCRAPY/combatzone/combatzone/spiders$SCRAPY crawl combatzone_spider/home/pi/SCRAPY/combatzone/combatzone/spiders/combatzone_spider.py:9:ScrapydePreaction警告:模块SCRAPY.contrib.spider已被弃用,使用scrapy.spider而不是从scrapy.contrib.spider.init导入InitSpider/home/pi/scrapy/combatzone/combatzone/spider/combatzone\u spider.py:9:scrapydePreaction警告:模块scrapy.contrib.spider.init不推荐使用,使用scrapy.spider.init而不是从scrapy.contrib.spider.init导入InitSpider 2018-07-24 22:14:53[scrapy.utils.log]信息:scrapy 1.5.1启动(bot:combatzone)2018-07-24 22:14:53[scrapy.utils.log]信息:版本:lxml 4.2.3.0,libxml2.9.8,csselect 1.0.3,parsel 1.5.0,w3lib 1.19.0,Twisted Python 18.7.0,2.7.13(默认,2017年11月24日,17:33:09)[GCC 6.3.0 20170516],pyOpenSSL 18.0.0(OpenSSL 1.1.0h 2018年3月27日),加密技术2.3,平台Linux-4.9.0-6-686-i686-with-debian-9.5 2018-07-24 22:14:53[scrapy.crawler]信息:覆盖的设置:{'NEWSPIDER_模块:'combatzone.SPIDER','SPIDER_模块':['combatzone.SPIDER'],“日志级别”:“信息”,“机器人名称”:“战斗地带”}2018-07-24 22:14:53[scrapy.middleware]信息:启用的扩展:[“scrapy.extensions.memusage.MemoryUsage”,“scrapy.extensions.logstats.logstats”,“scrapy.extensions.telnet.TelnetConsole”,“scrapy.extensions.corestats.corestats”]2018-07-24 22:14:53[scrapy.middleware]信息:已启用下载程序中间件:['scrapy.DownloaderMiddleware.httpauth.HttpAuthMiddleware'、'scrapy.DownloaderMiddleware.downloadtimeout.DownloadTimeoutMiddleware'、'scrapy.DownloaderMiddleware.defaultheaders.DefaultHeadersMiddleware'、'scrapy.DownloaderMiddleware.useragent.UserAgentMiddleware'、'scrapy.DownloaderMiddleware.retry.RetryMiddleware'、'scrapyres.redirect.MetaRefreshMiddleware',scrapy.DownloaderMiddleware.httpcompression.HttpCompressionMiddleware',scrapy.DownloaderMiddleware.redirect.RedirectMiddleware',scrapy.DownloaderMiddleware.cookies.cookies中间件',scrapy.DownloaderMiddleware.httpproxy',scrapy.DownloaderMiddleware.stats.DownloaderStats']2018-07-24 22:14:53[scrapy.middleware]信息:启用的蜘蛛中间件:[“scrapy.SpiderMiddleware.httperror.HttpErrorMiddleware”,“scrapy.SpiderMiddleware.offsite.offsite.OffsiteMiddleware”,“scrapy.SpiderMiddleware.referer.RefererMiddleware”,“scrapy.SpiderMiddleware.UrlLengthMiddleware”,“scrapy.SpiderMiddleware.DepthMiddleware”]2018-07-24 22:14:53[scrapy.middleware]信息:启用的项目管道:[]2018-07-24 22:14:53[scrapy.core.engine]信息:蜘蛛打开2018-07-24 22:14:53[scrapy.extensions.logstats]信息:爬网0页(以0页/分钟),刮网0项(以0项/分钟)2018-07-24 22:14:54[scrapy.core.engine]信息:关闭蜘蛛(完成)2018-07-24 22:14:54[scrapy.statscollectors]信息:倾销scrapy统计数据:{'downloader/request\u bytes':231,'downloader/request\u count':1,'downloader/request\u method\u count/GET':1,'downloader/response\u bytes':7152,'downloader/response\u count':1,'finish\u reason':'finish\u time':datetime.datetime(2018,7,24,21,14,54,410938)“日志计数/信息”:7,“内存使用情况/最大值”:36139008,“内存使用情况/启动”:36139008,“收到的响应计数”:1,“调度程序/退出队列”:1,“调度程序/退出队列/内存”:1,“调度程序/加入队列/内存”:1,“启动时间”:datetime.datetime(2018,7,24,21,14,53,998619)2018-07-24 22:14:54[scrapy.core.engine]信息:十字轴关闭(完成)

蜘蛛似乎不工作了,你知道为什么吗?非常感谢各位朋友:D

共有1个答案

沈冠宇
2023-03-14

有2个问题:

  • 第一个是正则表达式,应该转义“?”。例如:/category.php?id=\d应更改为/category.php\?id=\d(注意“\?”
  • 第二,您应该缩进所有方法,否则在combatzone_spider类中找不到它们

至于登录,我试图让你的代码工作,但我失败了。在爬网之前,我通常会覆盖start\u请求以登录。

代码如下:

# -*- coding: utf-8 -*-

import scrapy
from scrapy.item import Item, Field
from scrapy.spiders import CrawlSpider
from scrapy.spiders import Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.loader.processors import Join
from scrapy.contrib.spiders.init import InitSpider
from scrapy.http import Request, FormRequest
import logging

class article(Item):
    category = Field()
    title = Field()
    quantity = Field()
    price = Field()

class CombatZoneSpider(CrawlSpider):
    name = 'CombatZoneSpider'
    allowed_domains = ['www.combatzone.es']
    start_urls = ['http://www.combatzone.es/areadeclientes/']

    rules = (
        # escape "?"
        Rule(LinkExtractor(allow=r'category.php\?id=\d+'),follow=False),
        Rule(LinkExtractor(allow=r'&page=\d+'),follow=False),
        Rule(LinkExtractor(allow=r'goods.php\?id=\d+'),follow=False,callback='parse_items'),
    )

    def parse_items(self,response):
        logging.info("You are in item")

        # This is used to print the results
        selector = scrapy.Selector(response=response)
        res = selector.xpath("/html/body/div[3]/div[2]/div[2]/div/div[2]/h1/text()").extract()
        self.logger.info(res)

        # item = scrapy.loader.ItemLoader(article(),response)
        # item.add_xpath('category','/html/body/div[3]/div[2]/div[2]/a[2]/text()')
        # item.add_xpath('title','/html/body/div[3]/div[2]/div[2]/div/div[2]/h1/text()')
        # item.add_xpath('quantity','//*[@id="ECS_FORMBUY"]/div[1]/ul/li[2]/font/text()')
        # item.add_xpath('price','//*[@id="ECS_RANKPRICE_2"]/text()')
        # yield item.load_item()

    # login part
    # I didn't test if it can login because I have no accounts, but they will print something in console.

    def start_requests(self):
        logging.info("You are in initRequest")
        return [scrapy.Request(url="http://www.combatzone.es/areadeclientes/user.php",callback=self.login)]

    def login(self,response):
        logging.info("You are in login")

        # generate the start_urls again:
        for url in self.start_urls:
            yield self.make_requests_from_url(url)

        # yield scrapy.FormRequest.from_response(response,formname='ECS_LOGINFORM',formdata={'username':'XXXX','password':'YYYY'},callback=self.check_login_response)

    # def check_login_response(self,response):
    #     logging.info("You are in checkLogin")
    #     if "Hola,XXXX" in response.body:
    #         self.log("Succesfully logged in.")
    #         return self.initialized()
    #     else:
    #         self.log("Something wrong in login.")
 类似资料:
  • 我试着在一个. asp网站上运行一个蜘蛛,它需要登录授权和一些爬行到同一个网站内的不同页面。我昨天成功地使用我的蜘蛛登录,并正在用不同的功能抓取数据,当我在更改了as功能后再次运行蜘蛛时,蜘蛛停止了工作。我不知道发生了什么,我对网络抓取相当陌生。下面是代码: 以下是日志: 代码曾经能够尝试从页面中抓取一些我想要的数据,但没有成功,但我相信这只是因为我使用了错误的css选择器。现在它只是打开和关闭而

  • 我正试着测试这只痒痒的爬行蜘蛛,但我不明白它为什么不爬行。它应该做的是在wikipedia的数学页面上爬行一个深度级别,然后返回每个爬行页面的标题。我错过了什么?非常感谢您的帮助! 设置: 日志:

  • 我无法更改分析方法中的爬行器设置。但这肯定是一种方式。 例如: 但是项目将由FirstPipeline处理。新项目参数不工作。开始爬网后如何更改设置?提前谢谢!

  • 我试图刮一个网站,并保存信息,我目前有两个问题。 首先,当我使用硒点击按钮(在这种情况下是加载更多结果按钮)时,它直到最后才点击,我似乎不知道为什么。 另一个问题是它没有保存到parse_article函数中的csv文件中。 以下是我的代码:

  • 简介 渗透测试可以通过多种途径完成,例如黑盒、灰盒和白盒。黑盒测试在测试者没有任何应用的前置信息条件下执行,除了服务器的 URL。白盒测试在测试者拥有目标的全部信息的条件下执行,例如它的构造、软件版本、测试用户、开发信息,以及其它。灰盒测试是黑盒和白盒的混合。 对于黑盒和灰盒测试,侦查阶段对测试者非常必然,以便发现白盒测试中通常由应用所有者提供的信息。 我们打算采取黑盒测试方式,因为它涉及到外部攻

  • 蜘蛛记录分为两部分: 时间筛选 和 蜘蛛记录 (详情) 1.时间筛选 便捷按钮有今日、昨日、前日、上周 X、近七天,并且能自定义选择时间段来得出想要的结果报表 2.蜘蛛记录 (时间段详情) 1)蜘蛛记录便是搜索引擎通过蜘蛛爬行所留下的痕迹,蜘蛛记录中的细分做的非常的详细, 包含蜘蛛IP地址、访问URL、蜘蛛类型、来访时间 2)搜索引擎爬取网页时,只有触发js统计代码才能被统计,故数据仅供参考