路飞学成-Python爬虫实战密训-第3章

1,本节学习体会、心得 :

  本章的内容非常多,scrapy框架的使用。对于学过django的人来说。可能要更好理解一些把。个人感觉还是挺简单的。所有的知识点一听就懂,唯一不好的就是时间太紧迫了,不的不快速观看,只能等以后拐回来再细细品味了。本章的难点再下载中间件,实际上跟django差不多,但是仍然需要认真听才能听懂,而且要结合自己敲代码联系。这样就能够很好掌握了。其它的应用方面就简单多了,可以快速浏览,知道功能和使用方法,联系的时候可以随时翻笔记完成。对与时间紧迫的小伙伴们来说,还是挑重点学习更好

2,本节的知识点总结:    

总结:
1. 安装scrapy

linux安装
  pip3 install scrapy
windows安装
    pip3 install wheel
 下载twisted  http://www.lfb.uci.edu/~gohlke/pythonlibs/#twisted
    pip3 install Twisted-18.4.0-cp36-cp36m-win_amd64.whl
安装scrapy
    Pip3 install scrapy
安装pywin32
Pip3 install pywin32 

2. scarpy 的基本使用

创建project
        scrapy startproject day710    #创建一个项目
        d day 710   #进入项目目录
        scrapy genspider example example.com      创建要爬取的网站的文件
        scrapy crawl chouti   --nolog     # 运行起来
设置初始url(默认设置好的)      response.text 就是爬取到的内容 然后进行解析
from scrapy.selector import HtmlXPathSelector #导入内部解析器
解析:
	标签对象:xpath(‘/html/body/url/li/a/@href‘)
	列表:          xpathe(‘/html/body/url/li/a/@href‘).extract()
值:            xpathe(‘/html/body/url/li/a/@href‘).extract_first()

3. 爬虫的的架构

Scrapy主要包括了以下组件:

  • 引擎(Scrapy)
    用来处理整个系统的数据流处理, 触发事务(框架核心)
  • 调度器(Scheduler)
    用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
  • 下载器(Downloader)
    用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)
  • 爬虫(Spiders)
    爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面
  • 项目管道(Pipeline)
    负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。
  • 下载器中间件(Downloader Middlewares)
    位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应。
  • 爬虫中间件(Spider Middlewares)
    介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。
  • 调度中间件(Scheduler Middewares)
    介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

Scrapy运行流程大概如下:

    1. 引擎从调度器中取出一个链接(URL)用于接下来的抓取
    2. 引擎把URL封装成一个请求(Request)传给下载器
    3. 下载器把资源下载下来,并封装成应答包(Response)
    4. 爬虫解析Response
    5. 解析出实体(Item),则交给实体管道进行进一步的处理
    6. 解析出的是链接(URL),则把URL交给调度器等待抓取
4.post/请求头/cookie  去重  中间件
	post/请求头/cookie
		自动登陆抽屉
			先访问一个页面 拿到cookie
			原始的cookie
			print(response.headers.getlist(‘Set-Cookie‘))

			解析的cookie
			Cookie = cookieJar()
			cookie.extract_cookies(response,response.request)
			cookie_dic={}
			fork,vincookie._cookies.items():
			fori,jinv.items():
			form,ninj.items():
			self.cookie_dic[m]=n.value
			print(self.cookie_dic)

			req=Request(
				url=‘http://dig.chouti.com/login‘,
				method=‘POST‘,
				headers={‘Content-Type‘:‘application/x-www-form-urlencoded;charset=UTF-8‘},
				body=‘phone=8613503851931&password=abc1234&oneMonth=1‘,
				cookies=self.cookie_dic,
				callback=self.parse_check,
			)
			yieldreq

	利用meta={‘cookiejar‘:True} 自动操作cookie
		defstart_requests(self):
		forurlinself.start_urls:
		yieldRequest(url=url,callback=self.parse_index,meta={‘cookiejar‘:True})

		req=Request(
			url=‘http://dig.chouti.com/login‘,
			method=‘POST‘,
			headers={‘Content-Type‘:‘application/x-www-form-urlencoded;charset=UTF-8‘},
			body=‘phone=8613503851931&password=abc1234&oneMonth=1‘,
			meta={‘cookiejar‘:True},
			callback=self.parse_check,
		)
		Yield req
	开启关闭cookie 配置文件里

		#COOKIES_ENABLED=False

避免重复访问
	scrapy默认使用 scrapy.dupefilter.RFPDupeFilter 进行去重,相关配置有:
	1	DUPEFILTER_CLASS = ‘scrapy.dupefilter.RFPDupeFilter‘
	2	DUPEFILTER_DEBUG = False
	3	JOBDIR = "保存范文记录的日志路径,如:/root/"  # 最终路径为 /root/requests.seen

	来自 <http://www.cnblogs.com/wupeiqi/articles/6229292.html> 

中间件
	对所有请求在请求的时候自动添加请求头

	配置
	DOWNLOADER_MIDDLEWARES={
	‘day710.middlewares.Day710DownloaderMiddleware‘:543,
	}

  先写这么多 待更新

原文地址:https://www.cnblogs.com/iamdi/p/9297448.html

时间: 2024-09-28 22:53:06

路飞学成-Python爬虫实战密训-第3章的相关文章

路飞学成-Python爬虫实战密训-第1章

1,本节学习体会.心得 : 经过几个月的努力学完了django.因此才选择了这个爬虫课程.经过第一章的学习,再次体会到了python的强大.之前一直为正则发愁,每次都要修改好几次,才能匹配到.严重影响效率.然而,在这节中学到了新的技能 beautifulsoup4模块.用起来太爽了,简直就像是在写jquery .大大提高了匹配的效率. 武老师讲的非常通俗易懂,但是如果只听的话,过后就忘了.在去写已经学过的代码,仍然不知道怎么写.但是照着笔记,举一反三的去爬取几个站之后.再来写的话就可以抛弃笔记了

python爬虫实战——5分钟做个图片自动下载器

python爬虫实战--图片自动下载器 制作爬虫的基本步骤 顺便通过这个小例子,可以掌握一些有关制作爬虫的基本的步骤. 一般来说,制作一个爬虫需要分以下几个步骤: 分析需求(对,需求分析非常重要,不要告诉我你老师没教你) 分析网页源代码,配合F12(没有F12那么乱的网页源代码,你想看死我?) 编写正则表达式或者XPath表达式(就是前面说的那个神器) 正式编写python爬虫代码 效果 运行: 恩,让我输入关键词,让我想想,输入什么好呢?好像有点暴露爱好了. 回车 好像开始下载了!好赞!,我看

Python爬虫实战二之爬取百度贴吧帖子

大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不好使,八成是正则表达式那儿匹配不到了,请更改一下正则,当然最主要的还是帮助大家理解思路. 2016/12/2 本篇目标 1.对百度贴吧的任意帖子进行抓取 2.指定是否只抓取楼主发帖内容 3.将抓取到的内容分析并保存到文件 1.URL格式的确定 首先,我们先观察一下百度贴吧的任意一个帖子. 比如:ht

【图文详解】python爬虫实战——5分钟做个图片自动下载器

python爬虫实战--图片自动下载器 之前介绍了那么多基本知识[Python爬虫]入门知识,大家也估计手痒了.想要实际做个小东西来看看,毕竟: talk is cheap show me the code! 制作爬虫的基本步骤 顺便通过这个小例子,可以掌握一些有关制作爬虫的基本的步骤. 一般来说,制作一个爬虫需要分以下几个步骤: 1. 分析需求(对,需求分析非常重要,不要告诉我你老师没教你) 2. 分析网页源代码,配合F12(没有F12那么乱的网页源代码,你想看死我?) 3. 编写正则表达式或

Python爬虫实战---抓取图书馆借阅信息

原创作品,引用请表明出处:Python爬虫实战---抓取图书馆借阅信息 前段时间在图书馆借了很多书,借得多了就容易忘记每本书的应还日期,老是担心自己会违约,影响日后借书,而自己又懒得总是登录到学校图书馆借阅系统查看,于是就打算写一个爬虫来抓取自己的借阅信息,把每本书的应还日期给爬下来,并写入txt文件,这样每次忘了就可以打开该txt文件查看,每次借阅信息改变了,只要再重新运行一遍该程序,原txt文件就会被新文件覆盖,里面的内容得到更新. 用到的技术: Python版本是 2.7 ,同时用到了ur

Python 爬虫实战(二):使用 requests-html

Python 爬虫实战(一):使用 requests 和 BeautifulSoup,我们使用了 requests 做网络请求,拿到网页数据再用 BeautifulSoup 解析,就在前不久,requests 作者 kennethreitz 出了一个新库 requests-html,Pythonic HTML Parsing for Humans?,它可以用于解析 HTML 文档的.requests-html 是基于现有的框架 PyQuery.Requests.lxml 等库进行了二次封装,更加

Python爬虫实战(2):爬取京东商品列表

1,引言 在上一篇<Python爬虫实战:爬取Drupal论坛帖子列表>,爬取了一个用Drupal做的论坛,是静态页面,抓取比较容易,即使直接解析html源文件都可以抓取到需要的内容.相反,JavaScript实现的动态网页内容,无法从html源代码抓取需要的内容,必须先执行JavaScript. 我们在<Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容>一文已经成功检验了动态网页内容的抓取方法,本文将实验程序进行改写,使用开源Python爬虫

Python爬虫实战七之计算大学本学期绩点

大家好,本次为大家带来的项目是计算大学本学期绩点.首先说明的是,博主来自山东大学,有属于个人的学生成绩管理系统,需要学号密码才可以登录,不过可能广大读者没有这个学号密码,不能实际进行操作,所以最主要的还是获取它的原理.最主要的是了解cookie的相关操作. 本篇目标 1.模拟登录学生成绩管理系统 2.抓取本学期成绩界面 3.计算打印本学期成绩 1.URL的获取 恩,博主来自山东大学~ 先贴一个URL,让大家知道我们学校学生信息系统的网站构架,主页是 http://jwxt.sdu.edu.cn:

Python爬虫实战四之抓取淘宝MM照片

福利啊福利,本次为大家带来的项目是抓取淘宝MM照片并保存起来,大家有没有很激动呢? 最新动态 更新时间:2015/8/2 最近好多读者反映代码已经不能用了,原因是淘宝索引页的MM链接改了.网站改版了,URL的索引已经和之前的不一样了,之前可以直接跳转到每个MM的个性域名,现在中间加了一个跳转页,本以为可以通过这个页面然后跳转到原来的个性域名,而经过一番折腾发现,这个跳转页中的内容是JS动态生成的,所以不能用Urllib库来直接抓取了,本篇就只提供学习思路,代码不能继续用了. 之后博主会利用其它方