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. Linux echo命令详解

    echo :输出文字到控制台 -n: 不换行输出 -e:解析转移字符   (-b: 退格  -n 换行 -t 空格) 常用的命令展示 echo {1..4} ==> seq -s " ...

  2. JavaWeb定时器-Spring3.x及更高版本Task使用

    大背景 现代的 Web 应用程序框架在范围和复杂性方面都有所发展,应用程序的每个底层组件也必须相应地发展.作业调度是现代系统中对 Java 应用程序的一般要求,而且也是对 Java 开发人员一贯的要求 ...

  3. asp.net core中DockerFile文件中的COPY

    今天在ubuntu系统中使用docker部署asp.net core时遇到了一个问题,docker build 的时候总会在最后一步提示 lstat obj/Docker/publish: no su ...

  4. 铁乐学python_Day44_IO多路复用

    目录 IO模型介绍 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) 多路复用IO(IO multiplexing) 异步IO(Asynchronous I/O) IO ...

  5. React & TypeScript

    之前看了一下 TypeScript 的知识,但是一直没有上手,最近开始结合 React 和 TypeScript 一起尝试了一下,感受还是很好的,所以写一下笔记. 环境配置没有参考其他东西,就是看了下 ...

  6. MySql+Memcached架构的问题

    Memcached采用客户端-服务器的架构,客户端和服务器端的通讯使用自定义的协议标准,只要满足协议格式要求,客户端Library可以用任何语言实现. Memcached服务器使用基于Slab的内存管 ...

  7. 【转】Android中获取应用程序(包)的信息-----PackageManager的使用(一)

    转载请注明出处:http://blog.csdn.net/qinjuning       本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占 ...

  8. 【转】合格PHP工程师的知识结构

    PHP的运行环境 连环境都搞不起来,就是你有多么喜欢PHP,那也是白搭,开始我们大多会使用集成环境软件例如xampp,wamp.随着知识的增加慢慢要学会自己搭建运行环境,例如 Linux(Ubuntu ...

  9. 2018 - 2019 CTU Open Contest H. Split Game 【SG函数】

    H. Split Game time limit per test 1.0 s memory limit per test 256 MB input standard input output sta ...

  10. 【原创】大叔经验分享(52)ClouderaManager修改配置报错

    Cloudera Manager中修改配置可能报错: Incorrect string value: '\xE7\xA8\x8B\xE5\xBA\x8F...' for column 'MESSAGE ...