Scrapy入门实例(使用Scrapy抓取豆瓣电影top250榜单)
项目地址:https://github.com/yuanfuzhi/ScrapyDemo.git
一 Scrapy介绍与安装
1, Scrapy介绍
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了
页面抓取 (更确切来说, 网络抓取 )所设计的,也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。
2, Scrapy安装
①使用pip安装
pip install scrapy
网上有很多安装Scrapy的教程,这里不多解释,但不推荐这种安装方式,因为Scrapy依赖一些包,如果你的电脑上没有的话,使用pip安装会出现问题,比较麻烦。推荐使用下面的安装方式
②使用Anaconda安装scrapy
Anaconda是一个开源的包、环境管理神器,不多解释,先从官网下载安装Anaconda,然后傻瓜式点next安装,装好之后打开命令行,输入conda install scrapy,然后根据提示按Y,就会将Scrapy及其依赖的包全部下载下来,十分好用。
测试scrapy是否安装成功:在dos窗口输入scrapy回车
另外附上Anaconda常用指令:https://www.cnblogs.com/yfz1552800131/p/9796503.html
3, Scrapy项目结构
scrapy.cfg: 项目配置文件。
settings.py: 该文件定义了一些设置,如用户代理,爬取延时等(详见: https://doc.scrapy.org/en/latest/topics/settings.html)。
items.py: 该文件定义了待抓取域的模型(详见: http://scrapy-chs.readthedocs.io/zh_CN/latest/intro/tutorial.html#item)。
pipelines.py: 该文件定义了数据的存储方式(处理要抓取的域),可以是文件,数据库或者其他(详见: http://scrapy-chs.readthedocs.io/zh_CN/latest/topics/item-pipeline.html)。
middlewares.py: 爬虫中间件,该文件可定义随机切换ip或者用户代理的函数(详见: http://scrapy-chs.readthedocs.io/zh_CN/latest/topics/spider-middleware.html)。
spiders: 该目录下存储实际的爬虫代码(详见: http://scrapy-chs.readthedocs.io/zh_CN/latest/topics/spiders.html)。
二,Scrapy项目实战
①新建项目:使用pycharm工具在终端中输入:scrapy startproject douban 新建一个爬虫项目,然后cd douban 进入项目根目录
然后在终端输入命令:scrapy genspider douban_spider movie.douban.com生成douban_spider.py爬虫文件
②明确目标
入口URL:https://movie.douban.com/top250
抓取top250电影的序列号,电影名,介绍,星级,评价数,电影描述选项,在items.py文件中定义抓取的数据项:
③制作爬虫
在douban_spider.py爬虫文件编写具体的逻辑代码:
# -*- coding: utf-8 -*- import scrapy from ..items import DoubanItem class DoubanSpiderSpider(scrapy.Spider): name = 'douban_spider' # 允许的域名 allowed_domains = ['movie.douban.com'] # 入口URL start_urls = ['https://movie.douban.com/top250'] def parse(self, response): movie_list = response.xpath("//div[@class='article']//ol[@class='grid_view']/li") #循环电影的条目 for i_item in movie_list: #导入item,进行数据解析 douban_item = DoubanItem() douban_item['serial_number'] = i_item.xpath(".//div[@class='item']//em/text()").extract_first() douban_item['movie_name'] = i_item.xpath(".//div[@class='info']//div[@class='hd']/a/span[1]/text()").extract_first() #如果文件有多行进行解析 content = i_item.xpath(".//div[@class='info']//div[@class='bd']/p[1]/text()").extract() for i_content in content: content_s ="".join( i_content.split()) douban_item['introduce'] = content_s douban_item['star'] = i_item.xpath(".//span[@class='rating_num']/text()").extract_first() douban_item['evaluate'] = i_item.xpath(".//div[@class='star']//span[4]/text()").extract_first() douban_item['describe'] = i_item.xpath(".//p[@class='quote']/span/text()").extract_first() print(douban_item) yield douban_item #解析下一页,取后一页的XPATH next_link = response.xpath("//span[@class='next']/link/@href").extract() if next_link: next_link = next_link[0] yield scrapy.Request("https://movie.douban.com/top250"+next_link,callback=self.parse)
④存储内容
1,存储成json或csv格式的文件
在命令行输入:scrapy crawl douban_spider -o test.json 或者
scrapy crawl douban_spider -o test.csv,将爬取到的数据存到json文件或者csv文件里
2,存储到Mysql数据库
首先下载pymysql库:conda install pymysql
然后建好对应的数据库,数据表:
在项目settings文件中添加与数据库连接相关的变量
连接数据库,获取cursor以便之后对数据就行增删查改
数据插入逻辑:
运行项目: scrapy crawl douban_spider