一 Scrapy 介绍与安装
1, Scrapy 介绍
Scrapy 是一个为了爬取网站数据, 提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘, 信息处理或存储历史数据等一系列的程序中. 其最初是为了
页面抓取 (更确切来说, 网络抓取 ) 所设计的, 也可以应用在获取 API 所返回的数据 (例如 Amazon Associates web Services ) 或者通用的网络爬虫.
2, Scrapy 安装
1使用 pip 安装
pip install scrapy
网上有很多安装 Scrapy 的教程, 这里不多解释, 但不推荐这种安装方式, 因为 Scrapy 依赖一些包, 如果你的电脑上没有的话, 使用 pip 安装会出现问题, 比较麻烦. 推荐使用下面的安装方式
2使用 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: 该目录下存储实际的爬虫代码 (详见: ).
二, Scrapy 项目实战
1新建项目: 使用 pycharm 工具在终端中输入: scrapy startproject douban 新建一个爬虫项目, 然后 cd douban 进入项目根目录
然后在终端输入命令: scrapy genspider douban_spider movie.douban.com 生成 douban_spider.py 爬虫文件
2明确目标
入口 URL: https://movie.douban.com/top250
抓取 top250 电影的序列号, 电影名, 介绍, 星级, 评价数, 电影描述选项, 在 items.py 文件中定义抓取的数据项:
3制作爬虫
在 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
4存储内容
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
来源: https://www.cnblogs.com/yfz1552800131/p/9805189.html