scrapy框架爬取小说信息
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框架爬取小说信息的更多相关文章
- 使用scrapy框架爬取自己的博文(2)
之前写了一篇用scrapy框架爬取自己博文的博客,后来发现对于中文的处理一直有问题- - 显示的时候 [u'python\u4e0b\u722c\u67d0\u4e2a\u7f51\u9875\u76 ...
- scrapy框架爬取笔趣阁完整版
继续上一篇,这一次的爬取了小说内容 pipelines.py import csv class ScrapytestPipeline(object): # 爬虫文件中提取数据的方法每yield一次it ...
- scrapy框架爬取笔趣阁
笔趣阁是很好爬的网站了,这里简单爬取了全部小说链接和每本的全部章节链接,还想爬取章节内容在biquge.py里在加一个爬取循环,在pipelines.py添加保存函数即可 1 创建一个scrapy项目 ...
- 爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据
为了入门scrapy框架,昨天写了一个爬取静态小说网站的小程序 下面我们尝试爬取全书网中网游动漫类小说的书籍信息. 一.准备阶段 明确一下爬虫页面分析的思路: 对于书籍列表页:我们需要知道打开单本书籍 ...
- 使用scrapy框架爬取全书网书籍信息。
爬取的内容:书籍名称,作者名称,书籍简介,全书网5041页,写入mysql数据库和.txt文件 1,创建scrapy项目 scrapy startproject numberone 2,创建爬虫主程序 ...
- python利用scrapy框架爬取起点
先上自己做完之后回顾细节和思路的东西,之后代码一起上. 1.Mongodb 建立一个叫QiDian的库,然后建立了一个叫Novelclass(小说类别表)Novelclass(可以把一级类别二级类别都 ...
- Python使用Scrapy框架爬取数据存入CSV文件(Python爬虫实战4)
1. Scrapy框架 Scrapy是python下实现爬虫功能的框架,能够将数据解析.数据处理.数据存储合为一体功能的爬虫框架. 2. Scrapy安装 1. 安装依赖包 yum install g ...
- 使用scrapy框架爬取自己的博文
scrapy框架是个比较简单易用基于python的爬虫框架,http://scrapy-chs.readthedocs.org/zh_CN/latest/ 这个是不错的中文文档 几个比较重要的部分: ...
- 基于python的scrapy框架爬取豆瓣电影及其可视化
1.Scrapy框架介绍 主要介绍,spiders,engine,scheduler,downloader,Item pipeline scrapy常见命令如下: 对应在scrapy文件中有,自己增加 ...
随机推荐
- 对MBProgressHUD进行二次封装并精简使用
对MBProgressHUD进行二次封装并精简使用 https://github.com/jdg/MBProgressHUD 几个效果图: 以下源码是MBProgressHUD支持最新的iOS8的版本 ...
- centos7.4应用之KVM
最小安装系统: 参考博客:https://www.cnblogs.com/chenjiahe/p/5911965.html 辅助命令 yum install make bison flex autom ...
- 按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”
import java.util.ArrayList; import java.util.Scanner; public class Text { @SuppressWarnings("re ...
- CentOs7.2编译安装Nginx服务器
1. 安装nginx依赖 首先安装nginx的依赖 yum install gcc gcc-c++ openssl openssl-devel cyrus-sasl-md5 2,创建nginx用户 如 ...
- JWinner:一个私人定制的快速开发框架,为理想而生
关于JWinner JWinner是一个JAVA项目的快速开发框架,他已经实现了大多数项目开发之前需要进行的一些必备工作,还有很多在开发过程中可能会用到的工具集. JWinner的诞生并不是一蹴而就的 ...
- 1925: [Sdoi2010]地精部落
1925: [Sdoi2010]地精部落 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1929 Solved: 1227 [Submit][Statu ...
- [USACO08JAN]Running
嘟嘟嘟 这很显然是一道dp题. 令dp[i][j]表示第 i 分钟末,疲劳度为 j 是的最大跑步距离,则 dp[i][0] = max(dp[i - 1][0], max(dp[i - j][j])) ...
- centos中安装、升级git
yum install git 若是从老版本升级,则按下面方法.(centos中) 先更新系统sudo yum update 安装依赖的包yum install curl-devel expa ...
- List集合和iterator并发异常处理
一:List接口: 子类:ArrayList LinkedList 特点:Unlike sets, lists typically allow duplicate elements.不像set集合 ...
- java学习笔记-JavaWeb篇二
JavaWEB篇二 45 HttpSession概述46 HttpSession的生命周期 47 HttpSession常用方法示例48 HttpSessionURL重写 49 HttpSession ...