一、安装

首先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框架做武林中文网的爬虫的更多相关文章

  1. 使用scrapy框架做赶集网爬虫

    使用scrapy框架做赶集网爬虫 一.安装 首先scrapy的安装之前需要安装这个模块:wheel.lxml.Twisted.pywin32,最后在安装scrapy pip install wheel ...

  2. Python 爬虫之Scrapy框架

    Scrapy框架架构 Scrapy框架介绍: 写一个爬虫,需要做很多的事情.比如:发送网络请求.数据解析.数据存储.反反爬虫机制(更换ip代理.设置请求头等).异步请求等.这些工作如果每次都要自己从零 ...

  3. Python逆向爬虫之scrapy框架,非常详细

    爬虫系列目录 目录 Python逆向爬虫之scrapy框架,非常详细 一.爬虫入门 1.1 定义需求 1.2 需求分析 1.2.1 下载某个页面上所有的图片 1.2.2 分页 1.2.3 进行下载图片 ...

  4. Scrapy框架——CrawlSpider类爬虫案例

    Scrapy--CrawlSpider Scrapy框架中分两类爬虫,Spider类和CrawlSpider类. 此案例采用的是CrawlSpider类实现爬虫. 它是Spider的派生类,Spide ...

  5. 基于Scrapy框架的Python新闻爬虫

    概述 该项目是基于Scrapy框架的Python新闻爬虫,能够爬取网易,搜狐,凤凰和澎湃网站上的新闻,将标题,内容,评论,时间等内容整理并保存到本地 详细 代码下载:http://www.demoda ...

  6. Python爬虫进阶之Scrapy框架安装配置

    Python爬虫进阶之Scrapy框架安装配置 初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此 ...

  7. scrapy框架的命令行解释

    scrapy框架的命令解释 创建爬虫项目 scrapy startproject 项目名例子如下: scrapy startproject test1 这个时候爬虫的目录结构就已经创建完成了,目录结构 ...

  8. Scrapy框架——CrawlSpider爬取某招聘信息网站

    CrawlSpider Scrapy框架中分两类爬虫,Spider类和CrawlSpider类. 它是Spider的派生类,Spider类的设计原则是只爬取start_url列表中的网页, 而Craw ...

  9. Python爬虫Scrapy框架入门(2)

    本文是跟着大神博客,尝试从网站上爬一堆东西,一堆你懂得的东西 附上原创链接: http://www.cnblogs.com/qiyeboy/p/5428240.html 基本思路是,查看网页元素,填写 ...

随机推荐

  1. C# 【Http请求返回】性能优化500毫秒到 60 毫秒

    偶然发现 C# 的 HttpRequest 要比 Chrome 请求同一Url 慢好多.C# HttpRequest 要500毫秒 而Chrome 只需要 39ms. 作为有责任感的 码农.这个 必须 ...

  2. javascript实现上传图片并展示

    我们也都知道上传图片的样子是这样的(选择前)是这样的(选择后). 先在HTML设置图片上传 <form action="" method=""> & ...

  3. linq to js 用法

    /** * 排序汇总 * */ var result = Enumerable.From(vm.productList).GroupBy("$.goods_id", null, f ...

  4. c语言基础之getopt()

    getopt() #include <unistd.h> int getopt(int argc, char * const argv[], const char *optstring); ...

  5. Linux shell awk数组使用

    awk中使用数组 一.数组格式 数组是一个包含一系列元素的表. 格式如下:     abc[1]="xiaohong"     abc[2]="xiaolan" ...

  6. Linux的DNS反向解析部署

    下面的部署是在Linux的DNS正向解析示例上进行修改的. 如果有什么问题或者错误,可以访问上篇帖子 下面开始有关DNS的服务部署.<DNS反向解析> 工具:虚拟机 centos7 配置: ...

  7. python常用库(转)

    转自http://www.west999.com/info/html/wangluobiancheng/qita/20180729/4410114.html Python常用的库简单介绍一下 fuzz ...

  8. python遇到的模块集合

    J jieba jieba库是优秀的中文分词第三方库 ,它可以利用一个中文词库,确定汉字之间的关联概率将汉字间概率大的组成词组,形成分词结果,将中文文本通过分词获得单个的词语.jieba分词的三种模式 ...

  9. 可变lambda, lambda使用mutable关键字

    关于lambda的捕获和调用 C++ primer上对可变lambda举的例子如下: size_t v1=42; auto f=[v1] () mutable{return ++v1; }; v1=0 ...

  10. 小程序开发第一天josn和wxml

    视频中只有app.josn路径还有wxm文本.js中没有调用page.原视频中是可以出来文本内容的. 但是把js调用page以后是可以呈现的 所以疑问点就是为什么以前可以? 1.微信开发工具改了,强制 ...