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)

View Code

④存储内容

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