使用scrapy框架做武林中文网的爬虫
一、安装
首先scrapy的安装之前需要安装这个模块:wheel、lxml、Twisted、pywin32,最后在安装scrapy
pip install wheel
pip install lxml
这个地址是一个下载python包的好地方
https://www.lfd.uci.edu/~gohlke/pythonlibs/下载twisted
pip install Twisted
pip install pywin32
pip install scrapy
安装完成后
输入scrapy 能够执行,并能提示版本,说明安装没问题
二、Scrapy项目的创建 (获取武林中文网)https://m.50zw.la/
1、在前面输入 scrapy 的时候有个选项是 startproject,这个选项是创建scrapy项目,我们在命令提示符中输入:
scrapy startproject wlzw (wlzw)
2、生成基础爬虫文件
cd wlzw
scrapy genspider spiderwlzw m.50zw.la 前一个是py文件名名后一个是要爬取的url
生成一个名为spiderwlzw.py文件
3、打开pycharm-->file-->open 找到建好的项目,显示项目结构
init.py 保持默认,不修改
items.py 保存爬取到的数据的容器
middlewares.py 中间件配置文件
settings.py 项目的设置文件,延迟等。
pipelines.py 项目管道文件,对传入的项目类中的数据进行一个清理和入库
spiders目录 该目录下 有一个init.py 文件,和第2步生成spiderwlzw.py文件
三、设计数据库
1、确认保存什么数据
数据库为:novel
表名
Novel
字段名
title 圣墟
author 作者:辰东
type 类别:玄幻小说
status 状态:连载中
update_last 更新:2019-07-05 14:35:32
update_last_status 最新:第1407章 女帝君临世间!
brief_introduction 小说简介
2、创建数据库和表
1)、pycharm下方的Terminal输入
python
import sqlite3
novel=sqlite3.connect("novel.sqlite")
createtablesql="create table novel(title varchar(100),author varchar(50),type varchar(50),status varchar(50),update_last varchar(50),update_last_status varchar(100),brief_introduction varchar(500))"
novel.execute(createtablesql);
2)、完成创建数据库和表
3)、按住这个文件拖动到右侧的Database中
四、修改代码
1、根据第三步定义的数据库表结构修改items.py代码
import scrapy
class WlzwItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field()
author = scrapy.Field()
type = scrapy.Field()
status = scrapy.Field()
update_last = scrapy.Field()
update_last_status = scrapy.Field()
brief_introduction = scrapy.Field()
pass
2、修改spiderwlzw.py文件
主要为三部分
本页内的小说连接
本页内的下一页连接
打开每篇小说后的采集具体的数据
import scrapy
from wlzw.items import *
#武林中文网
class SpiderwlzwSpider(scrapy.Spider):
name = 'wlzw' #这里要和项目名称保持一致
allowed_domains = ['m.50zw.la']
start_urls = ['http://m.50zw.la/wapsort/1_1.html'] #这里只处理玄幻类小说
#主站链接 用来拼接
base_site = 'http://m.50zw.la'
def parse(self, response):
book_urls = response.xpath('//table[@class="list-item"]//a/@href').extract()
print(book_urls)
for book_url in book_urls:
url = self.base_site + book_url
yield scrapy.Request(url, callback=self.getInfo)
#获取下一页
next_page_url = self.base_site + response.xpath('//table[@class="page-book"]//a[contains(text(),"下一页")]/@href').extract()[0]
yield scrapy.Request(next_page_url, callback=self.parse)
def getInfo(self, response):
item = WlzwItem()
#提取信息
item['text_id'] = response.url.split('_')[1].replace('/', '')
item['title'] = response.xpath('//table[1]//p/strong/text()').extract()[0]
item['author'] = response.xpath('//table[1]//p/a/text()').extract()[0]
item['type'] = response.xpath('//table[1]//p/a/text()').extract()[1]
item['status'] = response.xpath('//table[1]//p/text()').extract()[2][3:]
item['update_last'] = response.xpath('//table[1]//p[5]/text()').extract()[0][3:]
item['update_last_status'] = response.xpath('//table[1]//p[6]/a/text()').extract()[0][3:]
item['brief_introduction'] = response.xpath('//div[@class="intro"]/text()').extract()[0]
yield item
3、修改pipeline.py
import sqlite3
class WlzwPipeline(object):
def open_spider(self, spider):
self.con = sqlite3.connect("novel.sqlite")
self.cn = self.con.cursor()
def process_item(self, item, spider):
print(item)
insert_sql = 'insert into novel(title ,author,type,status,update_last,update_last_status,brief_introduction) values("{}", "{}", "{}", "{}", "{}", "{}", "{}")'.format(item["title"], item["author"], item["type"], item["status"], item["update_last"], item["update_last_status"], item["brief_introduction"])
print(insert_sql)
self.cn.execute(insert_sql)
self.con.commit()
return item
def spider_close(self, spider):
self.con.close()
4、修改setting.py
ITEM_PIPELINES = {
'wlzw.pipelines.WlzwPipeline': 300,
}
五、执行爬虫 (项目目录下执行)退到与工程同一目录下:
scrapy crawl wlzw
使用scrapy框架做武林中文网的爬虫的更多相关文章
- 使用scrapy框架做赶集网爬虫
使用scrapy框架做赶集网爬虫 一.安装 首先scrapy的安装之前需要安装这个模块:wheel.lxml.Twisted.pywin32,最后在安装scrapy pip install wheel ...
- Python 爬虫之Scrapy框架
Scrapy框架架构 Scrapy框架介绍: 写一个爬虫,需要做很多的事情.比如:发送网络请求.数据解析.数据存储.反反爬虫机制(更换ip代理.设置请求头等).异步请求等.这些工作如果每次都要自己从零 ...
- Python逆向爬虫之scrapy框架,非常详细
爬虫系列目录 目录 Python逆向爬虫之scrapy框架,非常详细 一.爬虫入门 1.1 定义需求 1.2 需求分析 1.2.1 下载某个页面上所有的图片 1.2.2 分页 1.2.3 进行下载图片 ...
- Scrapy框架——CrawlSpider类爬虫案例
Scrapy--CrawlSpider Scrapy框架中分两类爬虫,Spider类和CrawlSpider类. 此案例采用的是CrawlSpider类实现爬虫. 它是Spider的派生类,Spide ...
- 基于Scrapy框架的Python新闻爬虫
概述 该项目是基于Scrapy框架的Python新闻爬虫,能够爬取网易,搜狐,凤凰和澎湃网站上的新闻,将标题,内容,评论,时间等内容整理并保存到本地 详细 代码下载:http://www.demoda ...
- Python爬虫进阶之Scrapy框架安装配置
Python爬虫进阶之Scrapy框架安装配置 初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此 ...
- scrapy框架的命令行解释
scrapy框架的命令解释 创建爬虫项目 scrapy startproject 项目名例子如下: scrapy startproject test1 这个时候爬虫的目录结构就已经创建完成了,目录结构 ...
- Scrapy框架——CrawlSpider爬取某招聘信息网站
CrawlSpider Scrapy框架中分两类爬虫,Spider类和CrawlSpider类. 它是Spider的派生类,Spider类的设计原则是只爬取start_url列表中的网页, 而Craw ...
- Python爬虫Scrapy框架入门(2)
本文是跟着大神博客,尝试从网站上爬一堆东西,一堆你懂得的东西 附上原创链接: http://www.cnblogs.com/qiyeboy/p/5428240.html 基本思路是,查看网页元素,填写 ...
随机推荐
- 结合 Vue.observable 写一个简易 Vuex
作为 Vue 全家桶的一员,Vuex 的重要性不言而喻,不管是用来管理状态,还是封装 Controler 都很好用 不过在一些体量较小的项目中,为了几个简单的状态或者处理函数而引入 Vuex,就像是高 ...
- riscv 汇编与反汇编
为了riscv指令集,我们需要汇编与反汇编工具来分析指令格式. 可以用下面的两个工具来汇编和反汇编,下载链接:https://pan.baidu.com/s/1eUbBlVc riscv-none-e ...
- Spring Security :CsrfFilter过滤器
spring security框架提供的默认登录页面,会有一个name属性值为_csrf的隐藏域: 这是框架在用户访问登录页面之前就生成的,保存在内存中,当用户提交表单的时候会跟着一起提交: 然后会经 ...
- MySQL修炼之路二
1. 表字段的操作 1. 语法: alter table 表名 执行动作: 2. 添加字段(add) alter table 表名 add 字段名 数据类型: alter table 表名 add 字 ...
- Nginx Rewrite相关功能-ngx_http_rewrite_module模块指令
Nginx Rewrite相关功能-ngx_http_rewrite_module模块指令 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- 转载--从输入URL到页面展示到底发生了什么
最近我也在看http协议, tcp相关知识, 在吃饭时无意看到来一篇文章讲解“从输入URL到页面展示到底发生了什么”, 细细看完, 很值得回味, 所以转载, 以供日后在温习. (PS, 作者这篇文章发 ...
- D. Maxim and Array
https://www.cnblogs.com/qscqesze/p/5925893.html 原博客 http://codeforces.com/group/1EzrFFyOc0/contest/ ...
- Win7下安装openssl
安装环境: 操作系统:window7(64位) C++编译器:VS2012 -------------------------------------------------------------- ...
- mybatis框架,使用foreach实现复杂结果的查询--循环集合数组
需求:假定现在查询出用户角色是2和3指定的用户列表信息,并进行展示 接口: /** * 需求:传入指定的用户角色,用户角色有1-n,获取这些用户角色下的用户列表信息 * @param roleids ...
- 洛谷P3835 【模板】可持久化平衡树(FHQ Treap)
题面 传送门 题解 可持久化一下就好了,具体可以看代码 这里有一个小\(trick\)就是我们原本在\(merge\)的时候也要新建节点的,但是我们\(merge\)之前一般已经\(split\)过了 ...