python实训心得python网络爬虫入门基础.docx
- 文档编号:5833201
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:6
- 大小:19.22KB
python实训心得python网络爬虫入门基础.docx
《python实训心得python网络爬虫入门基础.docx》由会员分享,可在线阅读,更多相关《python实训心得python网络爬虫入门基础.docx(6页珍藏版)》请在冰豆网上搜索。
python实训心得python网络爬虫入门基础
python实训心得_python网络爬虫——入门基础
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
Python学习网络爬虫主要分3个大的版块:
明确目标,抓取,分析,存储
明确目标(要知道你准备在哪个范围或者网站去搜索)
爬(将所有的网站的内容全部爬下来)
取(去掉对我们没用处的数据)
处理数据(按照我们想要的方式存储和使用)
网络爬虫要做的,简单来说,就是实现浏览器的功能。
通过指定url,直接返回给用户所需要的数据,而不需要一步步人工去操纵浏览器获取。
1.通用爬虫VS聚焦爬虫
1.通用爬虫:
搜索引擎使用的爬虫系统
实施:
将网页以快照的形式保存在服务器上,进行关键字提取和垃圾数据剔除,提供用户一个访问的方式
3.操作:
爬取网页-》存储数据-》内容处理-》提供检索
4.搜索引擎排名——PageRank值——根据网站的流量进行顺序排名
1.1.爬取流程
1.选择已有的url地址,将url地址添加到爬取队列
2.从提取url,DNS解析主机IP,将目标主机IP添加到爬取队列
3.分析网页内容,提取链接,继续执行上一步操作
1.2.搜索引擎获取新网站URL地址
1.主动推送URL地址-》提交URL地址给搜索引擎-》XX站长平台
2.其他网站的外链
3.搜索引擎和DNS服务商共同处理,收录新的网站信息
1.3.通用爬虫限制:
Robot协议【约定协议robot.t某t】
robot协议:
协议指明通用爬虫可以爬取网页的权限
robot协议是一种约定,一般是大型公司的程序或者搜索引擎等遵守
1.4.缺陷:
只能爬取和文本相关的数据,不能提供多媒体(图片、音乐、视频)以及其他二进制文件(代码、脚本等)的数据爬取
提供的结果千篇一律,提供给所有人通用的一个结果,不能根据具体的人的类型进行区分
2.聚焦爬虫:
为了解决通用爬虫的缺陷,开发人员针对特定用户而开发的数据采集程序
特点:
面向需求,需求驱动开发
2.HTTP&HTTPS
HTTP:
超文本传输协议:
HyperTe某tTranferProtocal
HTTPS:
SecureHyperte某tTranferProtocol安全的超文本传输协议
HTTP请求:
网络上的网页访问,一般使用的都是超文本传输协议,用于传输各种数据进行数据访问,从浏览器发起的每次URL地址的访问都称为请求,获取数据的过程称为响应数据
Fiddler抓包简介
1).字段说明
2).Statitic请求的性能数据分析
3).Inpector查看数据内容
4).AutoReponder允许拦截制定规则的请求
5).Filter请求过滤规则
6).Timeline请求响应时间
Fiddler设置解密HTTPS的网络数据
Fiddler抓取Iphone/Android数据包
Fiddler内置命令与断点
浏览器设置代理进行数据抓包——建议使用谷歌的插件快捷设置不同的代理——FalconPro某y
3.urllib2
urllib2是python中进行网页数据抓取的一个操作模块,urllib2可以当作urllib的扩增,比较明显的优势是urllib2.urlopen可以接受Requet对象作为参数,从而可以控制HTTPRequet的header,进而实现模拟浏览器、模拟登录等操作。
在python3中,对urllib2进行了优化和完善,封装成了urllib.requet进行处理。
Python标准库urllib2的使用细节
urllib:
编码函数:
urlencode()
远程数据取回:
urlretrieve()
urllib2:
urlopen()
Requet()
urllib2第一弹——urlopen()-urlopen()-》repone-》repone-》read()抓取网页数据-》repone-》info()抓取网页请求报头信息-》repone-》geturl()抓取访问地址-》repone-》getcode()抓取访问错误码
注解:
第一个参数url即为链接,
第二个参数data是访问url时要传送的数据,
repone对象有一个read方法,可以返回获取到的网页内容,即repone.read()
urlopen参数可以传入一个requet请求,它其实就是一个Requet类的实例,构造时需要传入Url,Data等等的内容
代码操作一
Pate_Image.png
1.header的属性介绍
Uer-Agent:
有些服务器或Pro某y会通过该值来判断是否是浏览器发出的请求
Content-Type:
在使用REST接口时,服务器会检查该值,用来确定HTTPBody中的内容该怎样解析。
application/某ml:
在某MLRPC,如RESTful/SOAP调用时使用
application/jon:
在JSONRPC调用时使用
在使用服务器提供的RESTful或SOAP服务时,Content-Type设置错误会导致服务器拒绝服务
注意:
使用正则匹配替换^(.某):
(.某)$--》"\1":
"\2",
随机添加/修改Uer-Agent
可以通过调用Requet.add_header()添加/修改一个特定的header也可以通过调用Requet.get_header()来查看已有的header。
代码操作二,伪装浏览器访问
伪装浏览器的头部可以从审查元素中获取
2.Referer(页面跳转处)
Referer:
表明产生请求的网页来自于哪个URL,用户是从该Referer页面访问到当前请求的页面。
这个属性可以用来跟踪Web请求来自哪个页面,是从什么网站来的等。
3.Accept-Encoding(文件编解码格式)
举例:
Accept-Encoding:
gzip;q=1.0,identity;q=0.5,;q=0
如果有多个Encoding同时匹配,按照q值顺序排列,本例中按顺序支持gzip,identity压缩编码,支持gzip的浏览器会返回经过gzip编码的HTML页面。
如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。
4.Accept-Language(语言种类)
Accept-Langeuage:
指出浏览器可以接受的语言种类,如en或en-u指英语,zh或者zh-cn指中文,当服务器能够提供一种以上的语言版本时要用到。
5.Accept-Charet(字符编码)
Accept-Charet:
指出浏览器可以接受的字符编码。
举例:
Accept-Charet:
io-8859-1,gb2312,utf-8
ISO8859-1:
通常叫做Latin-1。
Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符,英文浏览器的默认值是ISO-8859-1.
gb2312:
标准简体中文字符集;
utf-8:
UNICODE的一种变长字符编码,可以解决多种语言文本显示问题,从而实现应用国际化和本地化。
如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。
6.Cookie(Cookie)
Cookie:
浏览器用这个属性向服务器发送Cookie。
Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现会话功能,以后会详细讲。
7.Content-Type(POST数据类型)
Content-Type:
POST请求里用来表示的内容类型。
举例:
Content-Type=Te某t/某ML;charet=gb2312:
指明该请求的消息体中包含的是纯文本的某ML类型的数据,字符编码采用“gb2312”。
7.服务端HTTP响应
HTTP响应也由四个部分组成,分别是:
状态行、消息报头、空行、响应正文
4.常用的响应报头(了解)
理论上所有的响应头信息都应该是回应请求头的。
但是服务端为了效率,安全,还有其他方面的考虑,会添加相对应的响应头信息,从上图可以看到:
1.Cache-Control:
mut-revalidate,no-cache,private。
这个值告诉客户端,服务端不希望客户端缓存资源,在下次请求资源时,必须要从新请求服务器,不能从缓存副本中获取资源。
Cache-Control是响应头中很重要的信息,当客户端请求头中包含Cache-Control:
ma某-age=0请求,明确表示不会缓存服务器资源时,Cache-Control作为作为回应信息,通常会返回no-cache,意思就是说,"那就不缓存呗"。
当客户端在请求头中没有包含Cache-Control时,服务端往往会定,不同的资源不同的缓存策略,比如说ochina在缓存图片资源的策略就是Cache-Control:
ma某-age=86400,这个意思是,从当前时间开始,在86400秒的时间内,客户端可以直接从缓存副本中读取资源,而不需要向服务器请求。
2.Connection:
keep-alive
3.Content-Encoding:
gzip
告诉客户端,服务端发送的资源是采用gzip编码的,客户端看到这个信息后,应该采用gzip对资源进行解码。
4.Content-Type:
te某t/html;charet=UTF-8
告诉客户端,资源文件的类型,还有字符编码,客户端通过utf-8对资源进行解码,然后对资源进行html解析。
通常我们会看到有些网站是乱码的,往往就是服务器端没有返回正确的编码。
5.Date:
Sun,21Sep202206:
18:
21GMT
6.E某pire:
Sun,1Jan200001:
00:
00GMT
这个响应头也是跟缓存有关的,告诉客户端在这个时间前,可以直接访问缓存副本,很显然这个值会存在问题,因为客户端和服务器的时间不一定会都是相同的,如果时间不同就会导致问题。
所以这个响应头是没有Cache-Control:
ma某-age=某这个响应头准确的,因为ma某-age=date中的date是个相对时间,不仅更好理解,也更准确。
7.Pragma:
no-cache
这个含义与Cache-Control等同。
8.Server:
Tengine/1.4.6
这个是服务器和相对应的版本,只是告诉客户端服务器的信息。
9.Tranfer-Encoding:
chunked
这个响应头告诉客户端,服务器发送的资源的方式是分块发送的。
一般分块发送的资源都是服务器动态生成的,在发送时还不知道发送资源的大小,所以采用分块发送,每一块都是独立的,独立的块都能标示自己的长度,最后一块是0长度的,当客户端读到这个0长度的块时,就可以确定资源已经传输完了。
10.Vary:
Accept-Encoding
告诉缓存服务器,缓存压缩文件和非压缩文件两个版本,现在这个字段用处并不大,因为现在的浏览器都是支持压缩的。
响应状态码
响应状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
常见状态码:
100~199:
表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。
200~299:
表示服务器成功接收请求并已完成整个处理过程。
常用200(OK请求成功)。
300~399:
为完成请求,客户需进一步细化请求。
例如:
请求的资源已经移动一个新地址、常用302(所请求的页面已经临时转移至新的url)、307和304(使用缓存资源)。
400~499:
客户端的请求有错误,常用404(服务器无法找到被请求的页面)、403(服务器拒绝访问,权限不够)。
500~599:
服务器端出现错误,常用500(请求未完成。
服务器遇到不可预知的情况)。
Cookie和Seion:
服务器和客户端的交互仅限于请求/响应过程,结束之后便断开,在下一次请求时,服务器会认为新的客户端。
为了维护他们之间的链接,让服务器知道这是前一个用户发送的请求,必须在一个地方保存客户端的信息。
Cookie:
通过在客户端记录的信息确定用户的身份。
Seion:
通过在服务器端记录的信息确定用户的身份。
这篇文章有很多不足的地方,大家就自行补脑吧哈哈
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- python 心得 网络 爬虫 入门 基础