scrapy实现二级页面爬取(以小说为例)

1.scrapy图解在这里插入图片描述
2.创建项目

scrapy startproject 项目名

创建后的目录
在这里插入图片描述
3.编写字段
在items.py中编写需要的字段,这里就写小说的章节和内容

class XiaoshuoItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()


    #章节
    page = scrapy.Field()
    #内容
    content = scrapy.Field()

4.创建爬虫文件

scrapy genspider 文件名  域名

创建成功之后,在spiders中将会出现一个文件
在这里插入图片描述
文件里面是这样的
在这里插入图片描述
注意:parse方法不能修改名字,不然会报错,用来实现爬取网页
下面是案例:
由于小说每章的内容在下一个页面,我们需要进入下一个页面爬取数据需要重新再定义一个方法。同时,parse方法需要将下一个页面的路径和数据等传递给第二个方法。

class WangyouSpider(scrapy.Spider):
    name = 'wangyou'
    allowed_domains = ['www.800txt.net']
    start_urls = ['https://www.800txt.net/book_112506/']

    def parse(self, response):
		#节点
        node_list = response.xpath("//dl/dd")
        for obj in node_list:
        	#章节
            page = obj.xpath('./a/text()')[0].extract()
            #二级页面路径
            page_href = obj.xpath('./a/@href')[0].extract()
            page_href = self.start_urls[0]+page_href
			#将page赋值给item中,用来之后的抛出
            item = XiaoshuoItem()
            item['page'] = page

            yield scrapy.Request(url=page_href,callback=self.sec_handler,meta={'item':item})
scrapy.Request的常用参数:
url:下一个页面的路径
callback:指定该请求返回的Response,由那个函数来处理。
meta:比较常用,在不同的请求之间传递数据使用的。字典dict型

第二个方法:用来爬取小说的内容

    def sec_handler(self,response):
        item = response.meta['item']
		#获取内容
        content_list = response.xpath('//div[@id="content"]/text()')
        #处理,把字符串提取出来,并去掉空格
        conecnt = ''
        for data in content_list:
            conecnt+=data.extract().replace(' ','')
		#赋值并抛出item
        item['content'] = conecnt
        return item

5.启动爬虫

scrapy crawl 爬虫名 -o 文件名.格式

格式有以下几种:
在这里插入图片描述
到此为止,就成功了!

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值