发布于2019-08-08 09:46 阅读(648) 评论(0) 点赞(4) 收藏(2)
一、安装
首先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
作者:我就是喜欢你
链接:https://www.pythonheidong.com/blog/article/12762/65a72ffece473c01a129/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!