Scrapy网络爬虫实战[保存为Json文件及存储到mysql数据库]
来源:互联网 发布:艾珺的淘宝店铺 编辑:程序博客网 时间:2024/06/05 10:07
本文博客为原创,未经本人允许,不得扒下来传到百度文库及相关平台。
目录
- Scrapy介绍
- Scrapy建立新工程
- 用Pycharm打开工程并编辑
- items的编写
- Spider的编写
- 存储pipelines
- settings的编写
- main方法
- 运行main方法
Scrapy介绍
Scrapy 是一个为了爬取网站数据,提取结构性数据而编写的python应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。Scrapy 目前最新的版本,内容涉及安装,使用,开发,API 调试等全部知识点,帮助读者学习使用 Scrapy 框架开发网络爬虫。
关于Scrapy的安装,请看我前面写的一篇博客:http://blog.csdn.net/qy20115549/article/details/52528896
Scrapy建立新工程
在开始爬取之前,您必须创建一个新的 Scrapy 项目。 进入您打算存储代码的目录中【工作目录】,运行下列命令,如下是我创建的一个爬取豆瓣的工程douban【存储路径为:G:\python】:
下图为其自动生成的目录结构:
用Pycharm打开工程并编辑
如下图所示为Pycharm打开的结果,可以很清晰的看到其爬虫框架的目录结构:
items的编写
首先,文件中有items.py,这个里面这要是用来封装爬虫所要爬的字段,如爬豆瓣电影,需要爬电影的ID,url,电影名称等。
__author__ = ' HeFei University of Technology Qian Yang email:1563178220@qq.com'# -*- coding:utf-8 -*-import scrapyclass MovieItem(scrapy.Item): rank = scrapy.Field() title = scrapy.Field() link = scrapy.Field() rate = scrapy.Field() quote = scrapy.Field()
Spider的编写
Spider 是用户编写用于从单个网站(或者一些网站)爬取数据的类。其包含了一个用于下载的初始 URL,如何跟进网页中的链接以及如何分析页面中的内容, 提取生成 item 的方法。
__author__ = ' HeFei University of Technology Qian Yang email:1563178220@qq.com'# -*- coding:utf-8 -*-import scrapyfrom douban.items import MovieItemclass Movie250Spider(scrapy.Spider): # 定义爬虫的名称,主要main方法使用 name = 'doubanmovie' allowed_domains = ["douban.com"] start_urls = [ "http://movie.douban.com/top250/" ] # 解析数据 def parse(self, response): items = [] for info in response.xpath('//div[@class="item"]'): item = MovieItem() item['rank'] = info.xpath('div[@class="pic"]/em/text()').extract() item['title'] = info.xpath('div[@class="pic"]/a/img/@alt').extract() item['link'] = info.xpath('div[@class="pic"]/a/@href').extract() item['rate'] = info.xpath('div[@class="info"]/div[@class="bd"]/div[@class="star"]/span/text()').extract() item['quote'] = info.xpath('div[@class="info"]/div[@class="bd"]/p[@class="quote"]/span/text()').extract() items.append(item) yield item # 翻页 next_page = response.xpath('//span[@class="next"]/a/@href') if next_page: url = response.urljoin(next_page[0].extract()) #爬每一页 yield scrapy.Request(url, self.parse)
存储pipelines
以下写了两个存储方式,第一种是以Json的形式进行存储,第二种是将数据存储到mysql数据库。
__author__ = ' HeFei University of Technology Qian Yang email:1563178220@qq.com'# -*- coding: utf-8 -*-import jsonimport codecs#以Json的形式存储class JsonWithEncodingCnblogsPipeline(object): def __init__(self): self.file = codecs.open('douban.json', 'w', encoding='utf-8') def process_item(self, item, spider): line = json.dumps(dict(item), ensure_ascii=False) + "\n" self.file.write(line) return item def spider_closed(self, spider): self.file.close()#将数据存储到mysql数据库from twisted.enterprise import adbapiimport MySQLdbimport MySQLdb.cursorsclass MySQLStorePipeline(object): #数据库参数 def __init__(self): dbargs = dict( host = '127.0.0.1', db = 'test', user = 'root', passwd = '112233', cursorclass = MySQLdb.cursors.DictCursor, charset = 'utf8', use_unicode = True ) self.dbpool = adbapi.ConnectionPool('MySQLdb',**dbargs) ''' The default pipeline invoke function ''' def process_item(self, item,spider): res = self.dbpool.runInteraction(self.insert_into_table,item) return item #插入的表,此表需要事先建好 def insert_into_table(self,conn,item): conn.execute('insert into douban(rank, title, rate,qute,link) values(%s,%s,%s,%s,%s)', ( item['rank'][0], item['title'][0], # item['star'][0], item['rate'][0], item['quote'][0], item['link'][0]) )
settings的编写
settings主要放配置方面的文件,如下为我setting。
#USER_AGENTUSER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.54 Safari/536.5'# start MySQL database configure settingMYSQL_HOST = 'localhost'MYSQL_DBNAME = 'test'MYSQL_USER = 'root'MYSQL_PASSWD = '11223'# end of MySQL database configure settingITEM_PIPELINES = { 'douban.pipelines.JsonWithEncodingCnblogsPipeline': 300, 'douban.pipelines.MySQLStorePipeline': 300,}
main方法
__author__ = ' HeFei University of Technology Qian Yang email:1563178220@qq.com'from scrapy import cmdlinecmdline.execute("scrapy crawl doubanmovie".split())
运行main方法
如下为其运行结果。
0 0
- Scrapy网络爬虫实战[保存为Json文件及存储到mysql数据库]
- scrapy框架爬虫将数据保存到MySQL数据库(20170214)
- 保存数据到MySql数据库——我用scrapy写爬虫(二)
- Scrapy网络爬虫框架实战[以腾讯新闻网为例]
- scrapy爬虫保存为csv文件的技术分析
- 单个爬虫文件使用scrapy保存为csv格式
- scrapy爬虫框架将数据保存Mysql数据库中
- Python3 大型网络爬虫实战 004 — scrapy 大型静态商城网站爬虫项目编写及数据写入数据库实战 — 实战:爬取淘宝
- 实战 使用scrapy 爬取代理 并保存到数据库
- BeautifulSoup爬虫之保存到mysql数据库
- python3实战scrapy获取数据保存至MySQL数据库
- Nodejs实现简单爬虫,将爬到的数据以json数据格式保存到MySQL数据库中
- Python3 大型网络爬虫实战 — 给 scrapy 爬虫项目设置为防反爬
- scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据
- scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据
- Scrapy保存到txt文件或者数据库里面
- 网络爬虫之Scrapy实战一
- python网络爬虫-数据存储中如何改变mysql数据库的字符为unicode
- [翻译]深入理解Win32结构化异常处理(一)
- Struts2_17_全局结果集
- require.js的用法
- android6.0 固定屏幕功能
- CodeBlock安装后无法运行为什么?无法找到编译器?
- Scrapy网络爬虫实战[保存为Json文件及存储到mysql数据库]
- 《Learn You Some Erlang for Great Good!》的学习笔记(六)
- 关于android 控件位置控制的几个属性
- 关于弹框加搜索数据功能实现
- 【jzoj4782】【Math】【线性筛法】
- Android 群英传知识点
- angularjs学习一
- openstack dashboard简体中文汉化
- 浅谈MVP模式