为什么要用start_requests在rawspspider中引发NotImplementedError来解析爬网蜘蛛的回调?

问题描述

登录到我自己的帐户后,我试图从stackoverflow网站上删除问题和发布日期。这是为了练习带有飞溅的刮擦。

成功登录帐户后,我可以访问问题页面。但是,我在数据提取过程中陷入困境。我已经使用抓取蜘蛛来管理提取,但是它抛出了错误

NotImplementedError:未定义StackdataSpider.parse回调

这是我到目前为止的进展:

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider,Rule
from scrapy_splash import SplashRequest
from scrapy.utils.response import open_in_browser

#docker run -it -p 8050:8050 --rm scrapinghub/splash
class StackdataSpider(CrawlSpider):
    name = 'stackData'
    allowed_domains = ['stackoverflow.com']
    user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/86.0.4240.75 Safari/537.36"

    script='''
        function main(splash,args)
            splash.private_mode_enabled = false
            url=args.url
            assert(splash:go(url))
            splash:set_viewport_full()
            assert(splash:wait(1))
            email_Box = assert(splash:select("#email"))
            email_Box:focus()
            email_Box:send_text("test@test.com")
            assert(splash:wait(1))
            password_Box = assert(splash:select("#password"))
            password_Box:focus()
            password_Box:send_text("testpassword")
            assert(splash:wait(1))
            submit_button = assert(splash:select("#submit-button"))
            submit_button:mouse_click()
            assert(splash:wait(5))
            user_profile = assert(splash:select("a[href $='gopal-kisi']"))
            user_profile:mouse_click()
            assert(splash:wait(5))
            questions_summary = assert(splash:select("a[href $='tab=questions']"))
            questions_summary:mouse_click()
            assert(splash:wait(5))
            return splash:html()

        end
    '''

    def start_requests(self):
        yield SplashRequest(
            url="https://stackoverflow.com/users/login",headers={
                'User-Agent':self.user_agent
            },callback=self.parse,endpoint="execute",args={
                'lua_source':self.script
            }
        )
    rules = (
        Rule(LinkExtractor(restrict_xpaths="//a[@class='question-hyperlink']"),callback='parse_item',follow=True,process_request="set_user_agent"),)

    def set_user_agent(self,request):
        request.headers['User-Agent']=self.user_agent
        return request

    def parse_item(self,response):
        yield {
            'questions':response.xpath("//a[@class='question-hyperlink']/text()").get(),'asked_date':response.xpath("(//span[@class='relativetime'])[1]/text()").get()
        }

根据到目前为止的经验,当我们使用start_requests函数时,不需要使用parse函数。但是,如果我重命名要解析的parse_item,它将仅提取一个问题而没有任何错误

questions.json

这是错误的,因为它破坏了爬网蜘蛛,并从初始页面给出的响应页面中给出结果。我不想要那个。

我认为,这是使用scrapspider引发的问题,但是我不确定,即使我的猜测是正确的,我也不知道这是什么以及如何解决

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...