Scrapy 爬虫入门 +实战

爬虫,其实很早就有涉及到这个点,但是一直没有深入,今天来搞爬虫。选择了,scrapy这个框架

http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html 入门教程

其实安装还是很简单的,我们可以直接pip install scrapy

如果报错也可以去下载https://pypi.python.org/pypi/Scrapy

Scrapy-1.4.0-py2.py3-none-any.whl (md5)进行安装,安装报错,需要去下载提示的库,

Twisted安装:

下载http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

然后安装

安装PyWin32

从官方网站下载对应版本的安装包即可,链接为:https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/

下图显示了Scrapy的大体架构,

二、组件

1、Scrapy Engine(Scrapy引擎)

Scrapy引擎是用来控制整个系统的数据处理流程,并进行事务处理的触发。更多的详细内容可以看下面的数据处理流程。

2、Scheduler(调度)

调度程序从Scrapy引擎接受请求并排序列入队列,并在Scrapy引擎发出请求后返还给他们。

3、Downloader(下载器)

下载器的主要职责是抓取网页并将网页内容返还给蜘蛛( Spiders)。

4、Spiders(蜘蛛)

蜘蛛是有Scrapy用户自己定义用来解析网页并抓取制定URL返回的内容的类,每个蜘蛛都能处理一个域名或一组域名。换句话说就是用来定义特定网站的抓取和解析规则。

蜘蛛的整个抓取流程(周期)是这样的:

首先获取第一个URL的初始请求,当请求返回后调取一个回调函数。第一个请求是通过调用start_requests()方法。该方法默认从start_urls中的Url中生成请求,并执行解析来调用回调函数。

在回调函数中,你可以解析网页响应并返回项目对象和请求对象或两者的迭代。这些请求也将包含一个回调,然后被Scrapy下载,然后有指定的回调处理。

在回调函数中,你解析网站的内容,同程使用的是Xpath选择器(但是你也可以使用BeautifuSoup, lxml或其他任何你喜欢的程序),并生成解析的数据项。

最后,从蜘蛛返回的项目通常会进驻到项目管道。

5、Item Pipeline(项目管道)

项目管道的主要责任是负责处理有蜘蛛从网页中抽取的项目,他的主要任务是清晰、验证和存储数据。当页面被蜘蛛解析后,将被发送到项目管道,并经过几个特定的次序处理数据。每个项目管道的组件都是有一个简单的方法组成的Python类。他们获取了项目并执行他们的方法,同时他们还需要确定的是是否需要在项目管道中继续执行下一步或是直接丢弃掉不处理。

项目管道通常执行的过程有:

清洗HTML数据

验证解析到的数据(检查项目是否包含必要的字段)

检查是否是重复数据(如果重复就删除)

将解析到的数据存储到数据库中

6、Downloader middlewares(下载器中间件)

下载中间件是位于Scrapy引擎和下载器之间的钩子框架,主要是处理Scrapy引擎与下载器之间的请求及响应。它提供了一个自定义的代码的方式来拓展Scrapy的功能。下载中间器是一个处理请求和响应的钩子框架。他是轻量级的,对Scrapy尽享全局控制的底层的系统。

7、Spider middlewares(蜘蛛中间件)

蜘蛛中间件是介于Scrapy引擎和蜘蛛之间的钩子框架,主要工作是处理蜘蛛的响应输入和请求输出。它提供一个自定义代码的方式来拓展Scrapy的功能。蛛中间件是一个挂接到Scrapy的蜘蛛处理机制的框架,你可以插入自定义的代码来处理发送给蜘蛛的请求和返回蜘蛛获取的响应内容和项目。

8、Scheduler middlewares(调度中间件)

调度中间件是介于Scrapy引擎和调度之间的中间件,主要工作是处从Scrapy引擎发送到调度的请求和响应。他提供了一个自定义的代码来拓展Scrapy的功能。

我们安装后可以去建立一个工程,我起名叫做baidu

scrapy startproject baidu

目录结构

scrapy.cfg: 项目的配置文件
tutorial/: 该项目的python模块。之后您将在此加入代码。
tutorial/items.py: 项目中的item文件.
tutorial/pipelines.py: 项目中的pipelines文件.
tutorial/settings.py: 项目的设置文件.
tutorial/spiders/: 放置spider代码的目录.

那么开始一个爬虫

我们去分析下这个网站 https://movie.douban.com/top250

我们可以看到,界面所有的都是在ol的标签下,元素的class也是唯一的, 那么我们可以定位到这里,去找到所有的电影的一个集合xptach是//ol[@class="grid_view"]/li那么我们来分析下下面的电影

我们可以看到 我们想要获取的元素是很简单的,都是好获取的元素,那么我们来顶一下我们要获取的,我们在item.py来定义    ranking=scrapy.Field()     movie_name=scrapy.Field() #电影名称    score=scrapy.Field()  #分数    score_num=scrapy.Field()#评分人数    daoyan=scrapy.Field()#导演,演员    bieming=scrapy.Field()    url=scrapy.Field()#url地址几乎我们可以看到我们想要的元素都可以得到,那么我们来组织我们的代码
from baidu.items import BaiduItem
from scrapy import Request
import re
class XiaoHuarSpider(scrapy.Spider):
	name = ‘douban_movie_top250‘
	start_urls=[
		 ‘https://movie.douban.com/top250‘]

	def parse(self, response):
		item = BaiduItem()
		movies = response.xpath(‘//ol[@class="grid_view"]/li‘)
		for movie in movies:
			item[‘ranking‘] = movie.xpath(‘.//div[@class="pic"]/em/text()‘).extract()[0]
			item[‘movie_name‘] = movie.xpath(‘.//div[@class="hd"]/a/span[1]/text()‘).extract()[0]
			item[‘score‘] = movie.xpath(‘.//div[@class="star"]/span[@class="rating_num"]/text()‘).extract()[0]
			item[‘score_num‘] = movie.xpath(‘.//div[@class="star"]/span/text()‘).re(‘(\d+)人评价‘)[0]
			item[‘daoyan‘]=movie.xpath(‘.//div[@class="bd"]/p/text()‘).extract()[0]
			item[‘bieming‘]=movie.xpath(‘.//div[@class="bd"]/p[@class="quote"]/span/text()‘).extract()[0]
			item[‘url‘]=movie.xpath(‘.//div[@class="hd"]/a/@href‘).extract()[0]
			yield item

我们来在命令行来跑下我们的代码

scrapy crawl douban_movie_top250 --logfile=test.log -o douban_movie_top250.json -t json

我们可以看到是没有获取到数据了,只有log日志

翻阅资料发现有人说着可能是被禁止了,那么我们来修改修改,伪造下加个headers吧
class XiaoHuarSpider(scrapy.Spider):
	name = ‘douban_movie_top250‘
	headers = {‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36‘,}
	def start_requests(self):
		url = ‘https://movie.douban.com/top250‘
		yield Request(url, headers=self.headers)
	def parse(self, response):
		item = BaiduItem()
		movies = response.xpath(‘//ol[@class="grid_view"]/li‘)
		for movie in movies:
			item[‘ranking‘] = movie.xpath(‘.//div[@class="pic"]/em/text()‘).extract()[0]
			item[‘movie_name‘] = movie.xpath(‘.//div[@class="hd"]/a/span[1]/text()‘).extract()[0]
			item[‘score‘] = movie.xpath(‘.//div[@class="star"]/span[@class="rating_num"]/text()‘).extract()[0]
			item[‘score_num‘] = movie.xpath(‘.//div[@class="star"]/span/text()‘).re(‘(\d+)人评价‘)[0]
			item[‘daoyan‘]=movie.xpath(‘.//div[@class="bd"]/p/text()‘).extract()
			item[‘bieming‘]=movie.xpath(‘.//div[@class="bd"]/p[@class="quote"]/span/text()‘).extract()[0]
			item[‘url‘]=movie.xpath(‘.//div[@class="hd"]/a/@href‘).extract()[0]
			yield item

那么我们再来运行下我们的代码

看下我们的douba.csv

在来看看我们的日志模块:

我们的日志也可以正常的打印了,那么我们来看看,我们的数据似乎少很多,只有第一页的,那么我们去分析下我们的页面

似乎我们明白了什么那么,我们来改进下我们的代码。增加下面代码
next_url=response.xpath(‘//span[@class="next"]/a/@href‘).extract()
		if next_url:
			next_url=‘https://movie.douban.com/top250‘+next_url[0]
			yield Request(next_url,headers=self.headers)

那么我们再来爬取下我们的爬虫

单单看我们现在的数据文件大小,我们是成功的,那么我们来看下我们里面的内容

日志文件显示了很多之前没有爬取到的文章

爬虫其实也没有那么复杂,只要你在路上坚持了。


另外本人提供vip指导,python自动化,python学习上面,python做测试开发上面,我都会提供指导,vip终身有效,现价700,联系qq:952943386,稍后会更新qq群,喜欢的朋友可以来,本人也是从一个不懂啥是python到现在能做东西,从15的2k到17的10k+都是辛酸泪,可以与大家一起共勉,提供思路,能够让你走的更远,我也是从白纸一张一步步走来,如果你是新毕业的学生这个也适合你,可以给你指导,但是我能做的就是带你,但是我不是培训班,没有提供就业的机会,我只会在有机会的时候给你推荐,学无止境,此时可能我只能教你一些测试,提供职业指导,我可能以后会带给你更多。

我是一个大专生,也是一个人奋斗到今天。


				
时间: 2024-08-26 15:29:32

Scrapy 爬虫入门 +实战的相关文章

爬虫入门实战,知乎小爬虫

相比于爬虫框架,知乎小爬虫,更加适合初学者,尤其是想要了解爬虫技术细节.实现自己编写爬虫需求的初学者. 1. 谈爬虫工程师的价值 大数据时代已到,数据越来越具有价值了,没有数据寸步难行,有了数据好好利用,可以在诸多领域干很多事,比如很火的互联网金融.从互联网上爬来自己想要的数据,是数据的一个重要来源,而且往往是必不可少的来源.所有,目前,爬虫工程师是一个非常吃香的职位,工资往往都不低,就是要耐得住寂寞了.那爬虫工程师的价值也就是能稳定的.高效的和实时的带来数据.这里推荐看两篇文章: http:/

python scrapy爬虫入门

Scrapy 是一个python下的网络爬虫工具,目前只有python2.x的版本. 安装 Scrapy需要的支持库比较多,安装时挺繁琐的,测试直接用easy_install 或者 pip安装会自动下载安装需要的支持库,但是因为网络或其他种种原因总是安装失败,最好还是各个安装包分开安装. 下载安装Microsoft Visual C++ 2008 Redistributable Package(注意链接是64位)  http://www.microsoft.com/en-us/download/

Scrapy爬虫入门

1.安装Scrapy 打开Anaconda Prompt,执行:pip install Scrapy执行安装! 注意:要是安装过程中抛出: error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools (或者类似信息)的需要提前安装(根据自己的py

Scrapy安装、爬虫入门教程、爬虫实例(豆瓣电影爬虫)

Scrapy在window上的安装教程见下面的链接:Scrapy安装教程 上述安装教程已实践,可行.本来打算在ubuntu上安装Scrapy的,但是Ubuntu 磁盘空间太少了,还没扩展磁盘空间,暂时不想再上面装太多软件. Scrapy的入门教程见下面链接:Scrapy入门教程 上面的入门教程是很基础的,先跟着作者走一遍,要动起来哟,不要只是阅读上面的那篇入门教程,下面我简单总结一下Scrapy爬虫过程: 1.在Item中定义自己要抓取的数据: movie_name就像是字典中的“键”,爬到的数

Python爬虫入门到实战-史上最详细的爬虫教程

马哥高薪实战学员 [Python爬虫入门到实战-史上最详细的爬虫教程,限时免费领取] 爬虫分类和ROBOTS协议 爬虫URLLIB使用和进阶 爬虫URL编码和GETPOST请求 原文地址:https://blog.51cto.com/10515215/2385329

2017.08.04 Python网络爬虫之Scrapy爬虫实战二 天气预报

1.项目准备:网站地址:http://quanzhou.tianqi.com/ 2.创建编辑Scrapy爬虫: scrapy startproject weather scrapy genspider HQUSpider quanzhou.tianqi.com 项目文件结构如图: 3.修改Items.py: 4.修改Spider文件HQUSpider.py: (1)先使用命令:scrapy shell http://quanzhou.tianqi.com/   测试和获取选择器: (2)试验选择

2017.08.04 Python网络爬虫之Scrapy爬虫实战二 天气预报的数据存储问题

1.数据存储到JSon:程序阅读一般都是使用更方便的Json或者cvs等待格式,继续讲解Scrapy爬虫的保存方式,也就是继续对pipelines.py文件动手脚 (1)创建pipelines2json.py文件: import timeimport jsonimport codecs class WeatherPipeline(object): def process_item(self, item, spider): today=time.strftime('%Y%m%d',time.loc

爬虫入门(实用向)

从接触爬虫到现在也有一年半了,在这里总结一下一个新人入门爬虫需要了解的种种.作为实用向入门教程,我不会讲太多细枝末节的东西.最重要的就是能爬到东西不是吗? 那好,作为一个爬虫新人,要爬一个网站时,应该怎么开始呢? 首先,确定要爬的内容.是要整个网站的所有内容还是只是部分?需要的爬取的数据在网页源代码里有吗(涉及到模拟js发送请求)?需要的爬取的数据在网页上有吗(要用API爬吗)?确定要爬的内容之后,紧接着就需要考虑如下问题. 1.API爬虫和网页爬虫? 嗯,我一般习惯把爬虫分为API爬虫和网页爬

Scrapy 框架入门

一.介绍 ? Scrapy 是一个基于Twisted 的异步处理框架,是纯 Python 实现的爬虫框架,其架构清晰,模块之间耦合较低,扩展性和灵活强,是目前 Python 中使用最广泛的爬虫框架. 架构示意图: 它分为以下几个部分: Engine:引擎,处理整个系统的数据流处理.触发事务,是整个框架的核心. Item:项目,它定义了爬取数据结果的数据结构,爬取的数据会被赋值成该 Item 对象. Scheduler:调度器,接受引擎发送过来的请求并将其加入到队列中,在引擎再次请求的时候提供给引