scrapy之盗墓笔记三级页面爬取
#今日目标 **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之盗墓笔记三级页面爬取的更多相关文章
- 【图文详解】scrapy爬虫与动态页面——爬取拉勾网职位信息(2)
上次挖了一个坑,今天终于填上了,还记得之前我们做的拉勾爬虫吗?那时我们实现了一页的爬取,今天让我们再接再厉,实现多页爬取,顺便实现职位和公司的关键词搜索功能. 之前的内容就不再介绍了,不熟悉的请一定要 ...
- 爬虫系列5:scrapy动态页面爬取的另一种思路
前面有篇文章给出了爬取动态页面的一种思路,即应用Selenium+Firefox(参考<scrapy动态页面爬取>).但是selenium需要运行本地浏览器,比较耗时,不太适合大规模网页抓 ...
- 爬虫系列4:scrapy技术进阶之多页面爬取
多页面爬取有两种形式. 1)从某一个或者多个主页中获取多个子页面的url列表,parse()函数依次爬取列表中的各个子页面. 2)从递归爬取,这个相对简单.在scrapy中只要定义好初始页面以及爬虫规 ...
- scrapy中使用selenium来爬取页面
scrapy中使用selenium来爬取页面 from selenium import webdriver from scrapy.http.response.html import HtmlResp ...
- 使用requests简单的页面爬取
首先安装requests库和准备User Agent 安装requests直接使用pip安装即可 pip install requests 准备User Agent,直接在百度搜索"UA查询 ...
- python爬爬爬之单网页html页面爬取
python爬爬爬之单网页html页面爬取 作者:vpoet mail:vpoet_sir@163.com 注:随意copy 不用告诉我 #coding:utf-8 import urllib2 Re ...
- Scrapy 通过登录的方式爬取豆瓣影评数据
Scrapy 通过登录的方式爬取豆瓣影评数据 爬虫 Scrapy 豆瓣 Fly 由于需要爬取影评数据在来做分析,就选择了豆瓣影评来抓取数据,工具使用的是Scrapy工具来实现.scrapy工具使用起来 ...
- python3编写网络爬虫14-动态渲染页面爬取
一.动态渲染页面爬取 上节课我们了解了Ajax分析和抓取方式,这其实也是JavaScript动态渲染页面的一种情形,通过直接分析Ajax,借助requests和urllib实现数据爬取 但是javaS ...
- Python Requests库入门——应用实例-京东商品页面爬取+模拟浏览器爬取信息
京东商品页面爬取 选择了一款荣耀手机的页面(给华为打广告了,荣耀play真心不错) import requests url = "https://item.jd.com/7479912.ht ...
随机推荐
- Linux命令-文本编辑(二)
Linux命令-文本编辑(二) Linux mtype命令 mtype为mtools工具指令,模拟MS-DOS的type指令,可显示MS-DOS文件的内容. 语法: mtype [-st][文件] 参 ...
- F - Almost Sorted Array
F - Almost Sorted Array We are all familiar with sorting algorithms: quick sort, merge sort, heap ...
- Map循环/迭代/遍历效率、性能问题。
项目开发完毕,为了找点事打发一下时间,于是用findBugs插件对当前完工的项目进行扫描,发现了很多问题.其中有个关于性能的问题,在这里记录一下. 提示信息为:Inefficient use of k ...
- ES6非常棒的特性-解构
https://blog.csdn.net/maoxunxing/article/details/79772946
- kotlin实现流读取
在Java对流的读取是下面的那样,当前不要忘记流的关闭close. // java 代码void someFunc(InputStream in, OutputStream out) throws I ...
- de4dot 反混淆
de4dot .NET deobfuscator and unpacker. Description de4dot is an open source (GPLv3) .NET deobfuscato ...
- EventChannel 原生向Flutter传递数据
目的:原生页面主动向Flutter页面传递信息 1 flutter步骤 定义EventChannel static const EventChannel eventChannel = EventCha ...
- 【MAC】安装chrome浏览器
step1:下载dmg安装包 chrome下载地址 点击[下载Chrome] step2:安装chrome 下载好googlechrome.dmg文件后,像其它程序一样安装就可以了 打开访达--> ...
- 阶段3 2.Spring_08.面向切面编程 AOP_6 四种常用通知类型
新建项目 复制上节课的pom.xml内的代码 复制java下的代码 测试类也复制过来 配置文件也拷贝过来 logge下增加几个方法 测试方法只需要一个saveAccount方法就可以了 增加其他三种通 ...
- PHP LDA off 解决
搭建完zabbix初始登录zabbix显示 PHP LDAP off 解决 不需要重新编译php 就可以增加 LDAP 模块 .首先进入自己的 PHP 安装目录中找到 ldap 文件夹 [root@b ...