#今日目标

**scrapy之盗墓笔记三级页面爬取**

今天要爬取的是盗墓笔记小说,由分析该小说的主要内容在三级页面里,故需要我们
一一解析 *代码实现* daomu.py ```
import scrapy
from ..items import DaomuItem class DaomuSpider(scrapy.Spider):
name = 'daomu'
allowed_domains = ['daomubiji.com']
start_urls = ['http://www.daomubiji.com/'] # 解析一级页面的parse函数
def parse(self, response):
# link_list: ['http://xxx/dao-mu-bi-ji-1','','','']
link_list = response.xpath('//ul[@class="sub-menu"]/li/a/@href').extract()
for link in link_list:
# 交给调度器
yield scrapy.Request(
url = link,
callback = self.parse_two_html
) # 解析二级页面函数(圈名 章节数 章节名 链接)
def parse_two_html(self,response):
# 基准xpath
article_list = response.xpath('//article')
for article in article_list:
# 创建item对象
item = DaomuItem()
# info_list: ['七星鲁王','第一章','血尸']
info_list = article.xpath('./a/text()').get().split()
if len(info_list) == 3:
item['volume_name'] = info_list[0]
item['zh_num'] = info_list[1]
item['zh_name'] = info_list[2]
else:
item['volume_name'] = info_list[0]
item['zh_name'] = info_list[1]
item['zh_num'] = '' # 提取链接并发给调度器入队列
item['zh_link'] = article.xpath('./a/@href').get()
yield scrapy.Request(
url = item['zh_link'],
# meta参数: 传递item对象到下一个解析函数
meta = {'item':item},
callback = self.parse_three_html
) # 解析三级页面(小说内容)函数
def parse_three_html(self,response):
# 获取上一个函数传递过来的item对象
item = response.meta['item']
# content_list: ['段落1','段落2','','']
content_list = response.xpath(
'//article[@class="article-content"]//p/text()'
).extract() item['zh_content'] = '\n'.join(content_list) yield item ``` items.py ``` import scrapy class DaomuItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
# 卷名
volume_name = scrapy.Field()
# 章节数
zh_num = scrapy.Field()
# 章节名称
zh_name = scrapy.Field()
# 章节链接
zh_link = scrapy.Field()
# 小说内容
zh_content = scrapy.Field() ``` pipelines.py ```
class DaomuPipeline(object):
def process_item(self, item, spider): filename = '/home/tarena/daomu/{}_{}_{}'.format(
item['volume_name'],
item['zh_num'],
item['zh_name']
) with open(filename,'w') as f:
f.write(item['zh_content']) return item ```

scrapy之盗墓笔记三级页面爬取的更多相关文章

  1. 【图文详解】scrapy爬虫与动态页面——爬取拉勾网职位信息(2)

    上次挖了一个坑,今天终于填上了,还记得之前我们做的拉勾爬虫吗?那时我们实现了一页的爬取,今天让我们再接再厉,实现多页爬取,顺便实现职位和公司的关键词搜索功能. 之前的内容就不再介绍了,不熟悉的请一定要 ...

  2. 爬虫系列5:scrapy动态页面爬取的另一种思路

    前面有篇文章给出了爬取动态页面的一种思路,即应用Selenium+Firefox(参考<scrapy动态页面爬取>).但是selenium需要运行本地浏览器,比较耗时,不太适合大规模网页抓 ...

  3. 爬虫系列4:scrapy技术进阶之多页面爬取

    多页面爬取有两种形式. 1)从某一个或者多个主页中获取多个子页面的url列表,parse()函数依次爬取列表中的各个子页面. 2)从递归爬取,这个相对简单.在scrapy中只要定义好初始页面以及爬虫规 ...

  4. scrapy中使用selenium来爬取页面

    scrapy中使用selenium来爬取页面 from selenium import webdriver from scrapy.http.response.html import HtmlResp ...

  5. 使用requests简单的页面爬取

    首先安装requests库和准备User Agent 安装requests直接使用pip安装即可 pip install requests 准备User Agent,直接在百度搜索"UA查询 ...

  6. python爬爬爬之单网页html页面爬取

    python爬爬爬之单网页html页面爬取 作者:vpoet mail:vpoet_sir@163.com 注:随意copy 不用告诉我 #coding:utf-8 import urllib2 Re ...

  7. Scrapy 通过登录的方式爬取豆瓣影评数据

    Scrapy 通过登录的方式爬取豆瓣影评数据 爬虫 Scrapy 豆瓣 Fly 由于需要爬取影评数据在来做分析,就选择了豆瓣影评来抓取数据,工具使用的是Scrapy工具来实现.scrapy工具使用起来 ...

  8. python3编写网络爬虫14-动态渲染页面爬取

    一.动态渲染页面爬取 上节课我们了解了Ajax分析和抓取方式,这其实也是JavaScript动态渲染页面的一种情形,通过直接分析Ajax,借助requests和urllib实现数据爬取 但是javaS ...

  9. Python Requests库入门——应用实例-京东商品页面爬取+模拟浏览器爬取信息

    京东商品页面爬取 选择了一款荣耀手机的页面(给华为打广告了,荣耀play真心不错) import requests url = "https://item.jd.com/7479912.ht ...

随机推荐

  1. Linux命令-文本编辑(二)

    Linux命令-文本编辑(二) Linux mtype命令 mtype为mtools工具指令,模拟MS-DOS的type指令,可显示MS-DOS文件的内容. 语法: mtype [-st][文件] 参 ...

  2. F - Almost Sorted Array

    F - Almost Sorted Array   We are all familiar with sorting algorithms: quick sort, merge sort, heap ...

  3. Map循环/迭代/遍历效率、性能问题。

    项目开发完毕,为了找点事打发一下时间,于是用findBugs插件对当前完工的项目进行扫描,发现了很多问题.其中有个关于性能的问题,在这里记录一下. 提示信息为:Inefficient use of k ...

  4. ES6非常棒的特性-解构

    https://blog.csdn.net/maoxunxing/article/details/79772946

  5. kotlin实现流读取

    在Java对流的读取是下面的那样,当前不要忘记流的关闭close. // java 代码void someFunc(InputStream in, OutputStream out) throws I ...

  6. de4dot 反混淆

    de4dot .NET deobfuscator and unpacker. Description de4dot is an open source (GPLv3) .NET deobfuscato ...

  7. EventChannel 原生向Flutter传递数据

    目的:原生页面主动向Flutter页面传递信息 1 flutter步骤 定义EventChannel static const EventChannel eventChannel = EventCha ...

  8. 【MAC】安装chrome浏览器

    step1:下载dmg安装包 chrome下载地址 点击[下载Chrome] step2:安装chrome 下载好googlechrome.dmg文件后,像其它程序一样安装就可以了 打开访达--> ...

  9. 阶段3 2.Spring_08.面向切面编程 AOP_6 四种常用通知类型

    新建项目 复制上节课的pom.xml内的代码 复制java下的代码 测试类也复制过来 配置文件也拷贝过来 logge下增加几个方法 测试方法只需要一个saveAccount方法就可以了 增加其他三种通 ...

  10. PHP LDA off 解决

    搭建完zabbix初始登录zabbix显示 PHP LDAP off 解决 不需要重新编译php 就可以增加 LDAP 模块 .首先进入自己的 PHP 安装目录中找到 ldap 文件夹 [root@b ...