一、工作背景1、简单回顾一下之前的知识获取思路:从搜狗下载心理词库,然后爬取这些词的百度百科页面。但是这些词只有3600个。现在我们需要丰富实体,为下一阶段的命名实体识别做准备。2、下一步工作计划step1:爬取百度百科心理分类下的所有名词;step2:对所有集成词汇进行人工分类;step3:爬取《壹心理》中的文章,分词,标注,命名实体识别(为关系抽取做准备)ps:其实这个计划因为一些原因被放弃了(因为这篇文章是草稿,这段是两周后补上的)3.本文主要内容:递归爬取下图(百度百科打开分类页)中的所有标签及子类目下的所有标签(相关分类栏目除外):目标:①②③中的词条上图是我们需要添加到词库的词条,②下面的词条需要进一步到下级链接进行爬取。注意:③下的项目不够完整,需要到下一页爬取,下面会详细说明步骤。二、工作记录1、本爬虫有根节点,所以start_urls中只有一个url:start_urls.append('http://baike.baidu.com/fenlei/psychology')2、我想迭代爬取一个labelAlltagsunder:main_sub=response.xpath("./div[@class='category-title']/*")#使用星号,然后:forsubinmain_sub:nexthref=sub.xpath("./@href")if(nexthref!=[]):nexthref=nexthref.extract()[0].strip()nexthref=response.urljoin(nexthref)yieldresponse.follow(nexthref,callback=self.parse)print(nexthref)title=sub.xpath("string(.)").extract()[0].strip()if(title!="|"andtitle!="sub-category"):item['名称']=titleyielditem就够了;3、以上代码中,无论在程序的哪个位置,只要拿到url,就可以对其执行parse和yield:详情1、关于如何爬取下一节的内容,附上解决方案问题链接《scrapy中如何获取下一页链接》注意:不能在start_urls中的append()中手动添加新链接,因为队列在解析的时候已经入内存了。2.parseyieldresponse.follow(nexthref,callback=self.parse)中两种继续爬取链接的方式yieldscrapy.Request(nexthref,callback=self.parse)3.解决递归爬取链接无效的bug:解决方法:1.第一次不能因为allowed_domains的限制。2、第二次是因为div标签下有两个链接:
