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 ...
随机推荐
- python中oepen及fileobject初步整理之划水篇
open选项 参考官方文档,很多东西也没有看懂,将自己理解的部分先整理到这里,以后还是要参阅官方文档的. open (file, mode='r', buffering=-1, encoding=No ...
- RedHat6.2系统安装ipvsadm+keepalived
一.安装IPVS 软件包下载: 链接:https://pan.baidu.com/s/1zNgPtALbdBTC1H6e0IaZPw 提取码:xm7t 1.检查内核模块,看一下ip_vs 是否被加载 ...
- JavaScript疑难杂症系列-事件
事件这块知识点虽然是老生长谈的,但对于我来说多多整理,多多感悟,温故知新,每次看看这块都有不同的收获.(在这里我不会长篇大论,只会挑重点;具体的小伙伴们自行查找) 什么是事件 在编程时系统内发生的动作 ...
- loadrunner事务判断常用方法
//判断关联到的字符串是否为空 if (strlen(lr_eval_string("{param}")) == 0); //判断关联的字符串是否跟期望的值相同 if(strcmp ...
- 一起学vue指令之v-text
一起学vue指令之v-text 一起学 vue指令 v-text 指令可看作标签属性 v-text的功能和v-html很相似,都是在容器标签内控制字符串内容的输出,v-text输出纯文本,而v-ht ...
- windows怎么远程访问deepin linux桌面
deepin linux端安装anydesk 1.首先点击打开任务栏上的“深度商店” 2.打开后搜索anydesk. 3.点击进入后按“安装”即可,安装完成即可在“深度商店”点击“打开”运行anyde ...
- D4上午
概率和期望DP 概率 某个事件A发生的可能性的大小,称之为事件A的概率,记作P(A). 假设某事的所有可能结果有n种,每种结果都是等概率,事件A涵盖其中的m种,那么P(A)=m/n. 例如投掷一枚骰子 ...
- IDEA里面maven项目使用maven插件tomcat启动项目
1.首先在pom.xml添加tomcat插件依赖: <?xml version="1.0" encoding="UTF-8"?> <proje ...
- CNN入门讲解-为什么要有最后一层全连接?
原文地址:https://baijiahao.baidu.com/s?id=1590121601889191549&wfr=spider&for=pc 今天要说的是CNN最后一层了,C ...
- Ruby小白入门笔记之<Rails项目目录结构>
一 .流程分析 二.目录分析 DemoRails app (核心) assets (web前端所需文件) images (图片) javascripts (JS代码) styleshe ...