zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    爬虫之暴力字典生成器
    爬虫之自动生成url
    数字、大小写字母的字符编码
    对avalonjs的研究
    求墙之间有多少水洼
    2.在centos7虚拟机搭建nginx网站
    P1250 种树
    暂时用笔记
    羊村的OI题解
    P1083 借教室
  • 原文地址:https://www.cnblogs.com/yfz1552800131/p/9805189.html
Copyright © 2011-2022 走看看