1.爬取目标网站:http://www.zhaoxiaoshuo.com/all.php?c=0&o=0&s=0&f=2&l=0&page=1

2.爬取目标网站信息:小说类型  小说书名  小说作者  小说字数  小说投票数  小说搜藏数  小说状态

3.scrapy框架结构:

zhaoxiaoshuo
zhaoxiaoshuo
spiders
__init__.py
zhaoxiaoshuo.py
items.py
middlewares.py
pipelines.py
settings.py
__init__.py
scrapy.cfg

(1)items.py

import scrapy

class ZhaoxiaoshuoItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
# 小说类别
book_category = scrapy.Field()
# 小说书名
book_name = scrapy.Field()
# 小说作者
book_author = scrapy.Field()
# 小说字数
book_words = scrapy.Field()
# 小说投票数
book_vote = scrapy.Field()
# 小说收藏数
book_collection = scrapy.Field()
# 小说状态
book_status = scrapy.Field()

(2)spiders/zhaoxiaoshuo.py

import scrapy
from scrapy.http import Request
from bs4 import BeautifulSoup
import re
from zhaoxiaoshuo.items import ZhaoxiaoshuoItem class ZhaoXiaoShuo(scrapy.Spider):
name = "zhaoxiaoshuo"
allowed_domains = ['zhaoxiaoshuo.com']
first_url = 'http://www.zhaoxiaoshuo.com'
base_url = 'http://www.zhaoxiaoshuo.com/all.php?c={}&o=0&s=0&f=2&l=0&page=1' def start_requests(self):
for i in range(2, 22):
url = self.base_url.format(str(i))
yield Request(url, self.get_max_page, meta={
'url': url
})
yield Request(self.base_url.format(str(0)), self.get_max_page, meta={
'url': self.base_url.format(str(0))
}) def get_max_page(self, response):
soup = BeautifulSoup(response.text, "lxml")
max_page = int(re.search("\d+", soup.select(".pages a")[4].text).group())
url = response.meta['url']
for page in range(1, max_page + 1):
url = url.replace("page=1", "page={}".format(str(page)))
yield Request(url, self.parse) def parse(self, response):
soup = BeautifulSoup(response.text, "lxml")
ul = soup.select(".clearfix")[2]
lis = ul.select("li")
for li in lis:
# category = li.select(".width369")[0].text.strip()
name = li.select(".green")[0].text.strip()
status = li.select(".red")[0].text.strip()
author = li.select(".width111")[0].text.strip()
url = self.first_url + li.select(".green")[0]['href']
yield Request(url, self.get_information, meta={
# 'category': category,
'name': name,
'status': status,
'author': author
}) def get_information(self, response):
item = ZhaoxiaoshuoItem()
soup = BeautifulSoup(response.text, "lxml")
item['book_category'] = soup.select(".crumbswrap a")[1].text.strip()
item['book_name'] = response.meta['name']
item['book_author'] = response.meta['author']
item['book_words'] = soup.select(".r420 p span")[1].text.strip()
item['book_vote'] = soup.select(".r420 p span")[2].text.strip()
item['book_collection'] = soup.select(".r420 p span")[2].text.strip()
item['book_status'] = response.meta['status']
return item

(3)pipelines.py

因为并没有选择存储,所以没有编辑

(4)其它(默认处理)

scrapy框架爬取小说信息的更多相关文章

  1. 使用scrapy框架爬取自己的博文(2)

    之前写了一篇用scrapy框架爬取自己博文的博客,后来发现对于中文的处理一直有问题- - 显示的时候 [u'python\u4e0b\u722c\u67d0\u4e2a\u7f51\u9875\u76 ...

  2. scrapy框架爬取笔趣阁完整版

    继续上一篇,这一次的爬取了小说内容 pipelines.py import csv class ScrapytestPipeline(object): # 爬虫文件中提取数据的方法每yield一次it ...

  3. scrapy框架爬取笔趣阁

    笔趣阁是很好爬的网站了,这里简单爬取了全部小说链接和每本的全部章节链接,还想爬取章节内容在biquge.py里在加一个爬取循环,在pipelines.py添加保存函数即可 1 创建一个scrapy项目 ...

  4. 爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据

    为了入门scrapy框架,昨天写了一个爬取静态小说网站的小程序 下面我们尝试爬取全书网中网游动漫类小说的书籍信息. 一.准备阶段 明确一下爬虫页面分析的思路: 对于书籍列表页:我们需要知道打开单本书籍 ...

  5. 使用scrapy框架爬取全书网书籍信息。

    爬取的内容:书籍名称,作者名称,书籍简介,全书网5041页,写入mysql数据库和.txt文件 1,创建scrapy项目 scrapy startproject numberone 2,创建爬虫主程序 ...

  6. python利用scrapy框架爬取起点

    先上自己做完之后回顾细节和思路的东西,之后代码一起上. 1.Mongodb 建立一个叫QiDian的库,然后建立了一个叫Novelclass(小说类别表)Novelclass(可以把一级类别二级类别都 ...

  7. Python使用Scrapy框架爬取数据存入CSV文件(Python爬虫实战4)

    1. Scrapy框架 Scrapy是python下实现爬虫功能的框架,能够将数据解析.数据处理.数据存储合为一体功能的爬虫框架. 2. Scrapy安装 1. 安装依赖包 yum install g ...

  8. 使用scrapy框架爬取自己的博文

    scrapy框架是个比较简单易用基于python的爬虫框架,http://scrapy-chs.readthedocs.org/zh_CN/latest/ 这个是不错的中文文档 几个比较重要的部分: ...

  9. 基于python的scrapy框架爬取豆瓣电影及其可视化

    1.Scrapy框架介绍 主要介绍,spiders,engine,scheduler,downloader,Item pipeline scrapy常见命令如下: 对应在scrapy文件中有,自己增加 ...

随机推荐

  1. [控件] AngleGradientView

    AngleGradientView 效果 说明 1. 用源码产生带环形渐变色的view 2. 可以配合maskView一起使用 (上图中的右下角图片的效果) 源码 https://github.com ...

  2. UIView使用UIMotionEffect效果

    UIView使用UIMotionEffect效果 这个效果在模拟器上看不了,所以无法截图. UIView+MotionEffect.h  +  UIView+MotionEffect.m // // ...

  3. springmvc 拦截器的使用小结

    /** * * * * 拦截器的作用: * 每个请求到达Controller之前,或者每个响应到达view之前,都可以进行拦截. * 1.全局日志(谁提交了请求,要做什么事) * 2.权限管理(每个请 ...

  4. windows下python 正确安装词云包wordcloud的方法

    安装wordcloud的时候果然还是出现了问题,试了网上说的好多办法,最后找到了一种成功率高的,可以优先尝试一下 下载.whl文件http://www.lfd.uci.edu/~gohlke/pyth ...

  5. jquery环形3D立体旋转特效

      jquery环形3D立体旋转特效 作者/代码整理:站长素材  (转载请附加本文地址,带有“懒人原生”字样的谢绝转载)发布日期:2013-07-20   立体效果比较强的jquery特效,周围小图组 ...

  6. python第四课——运算符

    一.python中的运算符: 什么是运算符? 就是计算机语言中用来参与运算的符号!! 1.算数运算符: 符号:+ - * / %(取余,取模) //(取整) **(开方) 2.比较运算符: 特点:比较 ...

  7. 2、JVM--Java内存区域与内存溢出异常

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来. 2.1.概述 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高 ...

  8. javascript:apply方法 以及和call的区别 (转载)

    javascript:apply方法   1.        apply和call的区别在哪里 2.        什么情况下用apply,什么情况下用call 3.        apply的其他巧 ...

  9. cascade rcnn论文总结

    1.bouding box regression总结: rcnn使用l2-loss 首先明确l2-loss的计算规则: L∗=(f∗(P)−G∗)2,∗代表x,y,w,h    整个loss : L= ...

  10. 解析Array.prototype.slice.call(arguments)

    在es5标准中,我们经常需要把arguments对象转换成真正的数组 // 你可以这样写 var arr = Array.prototype.slice.call(arguments) // 你还可以 ...