Python分布式爬虫必学框架Scrapy打造搜索引擎
本文建立在学习完大壮老师视频Python最火爬虫框架Scrapy入门与实践,自己一步一步操作后做一个记录(建议跟我一样的新手都一步一步进行操作).
主要介绍:
1、scrapy框架简介、数据在框架内如何进行流动
2、scrapy框架安装、mongodb数据库安装
3、scrapy抓取项目如何创建
4、scrapy抓取项目如何进行数据解析
5、scrapy抓取项目如何绕过反爬机制抓取数据
6、scrapy抓取项目如何存储数据到不同的格式
=
抓取目标:
本文通过网页豆瓣电影排行数据的抓取和清洗,介绍Python使用
大壮老师介绍:
目前任职于某大型互联网公司人工智能中心。Python开发工程师,主要负责汽车简历数据抓取、商业推广平台数据抓取及接口开发、竞品信息数据抓取等工作。 开发语言:python、autoit。项目中主要使用工具requests 多线程抓取网页系统数据,使用autoit抓取软件系统数据,使用appium抓取app系统数据等。使用scrapy进行大数据量信息抓取。
准备工作:
1、具有一定的Python基础
2、具有一定的linux系统管理基础,编译安装软件,yum包管理工具等
3、具有一定数据库管理基础,增删改查
4、了解xpath语法和插件的使用方法
代码下载地址:Python爬虫框架Scrapy入门与实践
注意:
文件middlewares.py 中下面信息需要改为有效信息:
request.meta['proxy'] = 'http-cla.abuyun.com:9030'
proxy_name_pass = b'H622272STYB666BW:F78990HJSS7'
如果么有购买,测试功能需要取消该方法:
修改settings.py文件:注释douban.middlewares.my_proxy:
DOWNLOADER_MIDDLEWARES = { #'douban.middlewares.my_proxy': 543,}
操作 1 : 通过Pycharm CE 创建一个项目scrapy_douban
创建前需要安装好相应的环境和软件:
环境配置,安装
A : 安装Anaconda (包含Python环境,Conda,numpy,pandas 等大量依赖包) :
下载地址1:Anaconda 下载1
下载地址2(国内推荐): 清华大学开源镜像 Anaconda 下载
选择包 : 分别对应有Mac , windows, linux 包, 根据设备选择,
比如我的是Mac : Anaconda3-5.2.0-MacOSX-x86_64-1.pkg
下载开发工具->PyCharm
logo如下:
创建项目: 下面选择Python方式是创建一个新的目录管理第三方源, 后面可能需要手动导入需要的包
创建后就会自动生成项目,并导入初始化环境, 然后就可以创建代码了:
操作 2 : 进入你的项目路径, 并初始化
(下面调试是在Mac OS 系统进行,其他系统可能有点小区别)
进入你的项目路径:
cd /Users/niexiaobo/Documents/PythonFile/scrapy_douban
并初始化一个项目douban:
scrapy startproject douban
终端效果如下:
niexiaobodeMacBook-Pro:~ niexiaobo$ cd /Users/niexiaobo/Documents/PythonFile/scrapy_douban
niexiaobodeMacBook-Pro:scrapy_douban niexiaobo$ scrapy startproject douban
New Scrapy project 'douban', using template directory '/anaconda3/lib/python3.6/site-packages/scrapy/templates/project', created in:
/Users/niexiaobo/Documents/PythonFile/scrapy_douban/douban
You can start your first spider with:
cd douban
scrapy genspider example example.com
niexiaobodeMacBook-Pro:scrapy_douban niexiaobo$
操作 3 : 修改settings.py设置文件:
ROBOTSTXT_OBEY = False
# 下载延时
DOWNLOAD_DELAY = 0.5
操作 4 : 生成初始化文件:
niexiaobodeMacBook-Pro:scrapy_douban niexiaobo$ cd douban/
niexiaobodeMacBook-Pro:douban niexiaobo$ ls douban scrapy.cfg niexiaobodeMacBook-Pro:douban niexiaobo$ cd douban/ niexiaobodeMacBook-Pro:douban niexiaobo$ cd spiders/ niexiaobodeMacBook-Pro:spiders niexiaobo$ scrapy genspider douban_spider movie.douban.com Created spider 'douban_spider' using template 'basic' in module: douban.spiders.douban_spider niexiaobodeMacBook-Pro:spiders niexiaobo$ ls __init__.py __pycache__ douban_spider.py niexiaobodeMacBook-Pro:spiders niexiaobo$
抓取目标链接:https://movie.douban.com/top250
操作 5 : 根据需要抓取的对象编辑数据模型文件 items.py ,创建对象(序号,名称,描述,评价等等).
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html import scrapy class DoubanItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() #序号 serial_number = scrapy.Field() #电影名称 movie_name = scrapy.Field() # 介绍 introduce = scrapy.Field() # 星级 star = scrapy.Field() # 评价 evaluate = scrapy.Field() # 描述 describle = scrapy.Field()
操作 6 : 编辑爬虫文件douban_spider.py :
修改前:
# -*- coding: utf-8 -*-
import scrapy
class DoubanSpiderSpider(scrapy.Spider): name = 'douban_spider' allowed_domains = ['movie.douban.com'] start_urls = ['http://movie.douban.com/'] def parse(self, response): pass
修改后:
# -*- coding: utf-8 -*-
import scrapy
class DoubanSpiderSpider(scrapy.Spider): # 爬虫的名称 name = 'douban_spider' # 爬虫允许抓取的域名 allowed_domains = ['movie.douban.com'] # 爬虫抓取数据地址,给调度器 start_urls = ['http://movie.douban.com/top250'] def parse(self, response): # 打印返回结果 print(response.text)
操作 7 : 开启scrapy项目:
打开终端, 在spiders文件路径下执行命令:scrapy crawl douban_spider
niexiaobodeMacBook-Pro:spiders niexiaobo$ scrapy crawl douban_spider
执行返回:
2018-07-10 10:36:18 [scrapy.utils.log] INFO: Scrapy 1.5.0 started (bot: douban) 2018-07-10 10:36:18 [scrapy.utils.log] INFO: Versions: lxml 4.2.1.0, libxml2 2.9.8, cssselect 1.0.3, parsel 1.5.0, w3lib 1.19.0, Twisted 18.4.0, Python 3.6.5 |Anaconda, Inc.| (default, Apr 26 2018, 08:42:37) - [GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)], pyOpenSSL 18.0.0 (OpenSSL 1.0.2o 27 Mar 2018), cryptography 2.2.2, Platform Darwin-16.7.0-x86_64-i386-64bit 2018-07-10 10:36:18 [scrapy.crawler] INFO: Overridden settings: {'BOT_NAME': 'douban', 'DOWNLOAD_DELAY': 0.5, 'NEWSPIDER_MODULE': 'douban.spiders', 'SPIDER_MODULES': ['douban.spiders']} 2018-07-10 10:36:18 [scrapy.middleware] INFO: Enabled extensions: ['scrapy.extensions.corestats.CoreStats', 'scrapy.extensions.telnet.TelnetConsole', 'scrapy.extensions.memusage.MemoryUsage', 'scrapy.extensions.logstats.LogStats'] 2018-07-10 10:36:18 [scrapy.middleware] INFO: Enabled downloader middlewares: ['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware', 'scrapy.downloadermiddlewares.downloadtimeout.Do . . 2018-07-10 10:36:18 [scrapy.core.engine] DEBUG: Crawled (403) <GET http://movie.douban.com/top250> (referer: None) 2018-07-10 10:36:18 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <403 http://movie.douban.com/top250>: HTTP status code is not handled or not allowed . . 'log_count/DEBUG': 2, 'log_count/INFO': 8, 'memusage/max': 51515392, 'memusage/startup': 51515392, 'response_received_count': 1, 'scheduler/dequeued': 1, 'scheduler/dequeued/memory': 1, 'scheduler/enqueued': 1, 'scheduler/enqueued/memory': 1, 'start_time': datetime.datetime(2018, 7, 10, 2, 36, 18, 577140)} 2018-07-10 10:36:18 [scrapy.core.engine] INFO: Spider closed (finished)
上面返回发现有报错:
2018-07-10 10:36:18 [scrapy.core.engine] DEBUG: Crawled (403) <GET http://movie.douban.com/top250> (referer: None) 2018-07-10 10:36:18 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <403 http://movie.douban.com/top250>: HTTP status code is not handled or not allowed
我们还需要回到项目settings.py 里 设置USER_AGENT,不然请求无法通过
设置什么内容?
操作 8 : 设置请求头信息 USER_AGENT
我们需要打开网页,F12打开页面调试窗口,在网络(network)下,刷新页面,找到"top250",并点击它:
找到请求信息的消息头,里面有User-Agent信息: (复制它)
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:61.0) Gecko/20100101 Firefox/61.0
打开Pycharm CE的 settings.py 里 设置USER_AGENT:
打开终端, 在spiders文件路径下重新执行命令:scrapy crawl douban_spider
niexiaobodeMacBook-Pro:spiders niexiaobo$ scrapy crawl douban_spider
如果返回日志里有一堆html信息,说明执行成功:
...
<div class="pic"> <em class="">1</em> <a href="https://movie.douban.com/subject/1292052/"> <img width="100" alt="肖申克的救赎" src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.jpg" class=""> </a> </div> <div class="info"> <div class="hd"> <a href="https://movie.douban.com/subject/1292052/" class=""> <span class="title">肖申克的救赎</span> <span class="title"> / The Shawshank Redemption</span> <span class="other"> / 月黑高飞(港) / 刺激1995(台)</span> </a> <span class="playable">[可播放]</span> </div> <div class="bd"> <p class=""> 导演: 弗兰克·德拉邦特 Frank Darabont 主演: 蒂姆·罗宾斯 Tim Robbins /...<br> 1994 / 美国 / 犯罪 剧情 </p> <div class="star"> <span class="rating5-t"></span> <span class="rating_num" property="v:average">9.6