为了账号安全,请及时绑定邮箱和手机立即绑定

为什么最后一个函数没有执行?

为什么最后一个函数没有执行?

明月笑刀无情 2022-01-11 16:58:56
我正在抓取 Dmoz 网站,我抓取了关于页面,但是当我按名称创建另一个函数parse_editor并尝试抓取时,它没有给我结果。from ..items import DmoztutorialItemimport scrapyclass DmozSpiderSpider(scrapy.Spider):    name = 'Dmoz'    start_urls = ['http://dmoz-odp.org/']    about_page = 'http://dmoz-odp.org/docs/en/about.html'    editor = 'http://dmoz-odp.org/docs/en/help/become.html'    def parse(self, response):        # collect data on first page        items = {            'Navbar': response.css('#main-nav a::text').extract(),            'Category_names': response.css('.top-cat a::text').extract(),            'Subcategories': response.css('.sub-cat a::text').extract(),            'About_page': self.about_page,            'Become_an_editor': self.editor        }        # save and call request to another page        yield response.follow(self.about_page, self.parse_about, self.editor, self.parse_editor, meta={'items': items})    def parse_about(self, response):        # do your stuff on second page        items = response.meta['items']         items['Headings'] = response.css('h2::text , #mainContent h1::text').extract()  # add your logics        items['Paragraphs'] = response.css('p::text').extract()        items['3 Projects'] = response.css('li~ li+ li b a::text , li:nth-child(1) b a::text').extract()        items['About Dmoz'] = response.css('.nav ul a::text , li:nth-child(2) b a::text').extract()        items['Languages'] = response.css('.nav~ .nav a::text').extract()        items['You can make a difference'] = response.css('dd::text , #about-contribute::text').extract()        items['Further information'] = response.css('li::text , #about-more-info a::text').extract()        yield items    def parse_editor(self, response):        # do your stuff on third page        editor_items = response.meta['items']        editor_items['Heading'] = response.css('#mainContent h1::text').extract()        yield editor_items
查看完整描述

1 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

你把所有东西都写在一个里面response.follow,那是错误的。它需要一对 url-callback。所以将它们写在两个单独的函数中:


不正确的变体:


yield response.follow(self.about_page, self.parse_about, self.editor, self.parse_editor, meta={'items': items})

正确的变体:


yield response.follow(self.about_page, self.parse_about, meta={'items': items})

yield response.follow(self.editor, self.parse_editor, meta={'items': items})

你可以先写follow在parse函数中;调用parse_about并follow在parse_editor函数中生成第二项并产生最终项。


查看完整回答
反对 回复 2022-01-11
  • 1 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号