2018-08-21

爬虫简介

什么是爬虫?

是一种按照一定的规则,自动地抓取互联网信息的程序或者脚本。

所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。 在

Python中有很多库可以用来抓取网页

分类

通用爬虫(General Purpose Web Crawler)、 聚焦爬虫(Focused Web Crawler)、增量

式爬虫(Incremental Web Crawler)、深层爬虫(Deep Web Crawler)

通用网络爬虫

捜索引擎抓取系统(Baidu、Google、Yahoo 等)的重要组成部分。主要目的是将互联

网上的网页下载到本地,形成一个互联网内容的镜像备份。

聚焦爬虫

是"面向特定主题需求"的一种网络爬虫程序,它与通用搜索引擎爬虫的区别在于: 聚焦

爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。

增量式抓取

是指在具有一定量规模的网络页面集合的基础上,采用更新数据的方式选取已有集合中的过

时网页进行抓取,以保证所抓取到的数据与真实网络数据足够接近。进行增量式抓取的前提

是,系统已经抓取了足够数量的网络页面,并具有这些页面被抓取的时间信息。

深度爬虫

针对起始url地址进行数据采集,在响应数据中进行数据筛选得到需要进行数据采集的下一

波url地址,并将url地址添加到数据采集队列中进行二次爬取..以此类推,一致到所有页面

的数据全部采集完成即可完成深度数据采集,这里的深度指的就是url地址的检索深度。

爬虫步骤

网页抓取,数据提取,数据存储

HTTP协议

HTTP,HyperText Transfer Protocol,是互联网上应用最为广泛的一种网络协议。

是一个基于TCP/IP通信协议来传递数据,一个属于应用层的协议

浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服

务器根据接收到的请求后,向客户端发送响应信息。

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)HTTP的安全版,在

HTTP下加入SSL层。

SSL(Secure Sockets Layer 安全套接层)主要用于Web的安全传输协议,在传输层对网

络连接进行加密,保障在Internet上数据传输的安全。

 HTTP 的端口号为 80,

 HTTPS 的端口号为 443

urlib的使用

在Python3.x中,我们可以使用urlib这个组件抓取网页,urllib是一个URL处理包,这个

包中集合了一些处理URL的模块

1.urllib.request模块是用来打开和读取URLs的;

2.urllib.error模块包含一些有urllib.request产生的错误,可以使用try进行捕捉处理;

3.urllib.parse模块包含了一些解析URLs的方法;

4.urllib.robotparser模块用来解析robots.txt文本文件.它提供了一个单独的RobotFileP

arser类,通过该类提供的can_fetch()方法测试爬虫是否可以下载一个页面。

urllib.request.urlopen()

这个接口函数就可以很轻松的打开一个网站,读取并打印信息。

from urllib import request

if __name__ == "__main__":

    response = request.urlopen("http://fanyi.baidu.com")

    html = response.read()

print(html)

说明

request.urlopen()打开和读取URLs信息,返回对象response

可以调用read(),进行读取。

print(),将读到的信息打印出来。

其实这就是浏览器接收到的信息,只不过我们在使用浏览器的时候,浏览器已经将这些信息

转化成了界面信息供我们浏览。

网页编码

虽然我们已经成功获取了信息,但是显然他们都是二进制的乱码

可以通过简单的decode()命令将网页的信息进行解码

from urllib import request

if __name__ == "__main__":

    response = request.urlopen("http://fanyi.baidu.com/")

    html = response.read()

    html = html.decode("utf-8")

print(html)

自动获取网页编码

chardet

第三方库,用来判断编码的模块

使用chardet.detect()方法,判断网页的编码方式

安装方法:

pip install chardet

代码:

from urllib import request

import chardet

if __name__ == "__main__":

    response = request.urlopen("http://fanyi.baidu.com/")

    html = response.read()

    charset = chardet.detect(html)

    print(charset)

Request对象

反爬虫机制:

1、 封杀爬虫程序

2、 封杀指定IP

3、 封杀非人操作的程序

如果需要执行更复杂的操作,比如增加 HTTP 报头,必须创建一个 Request 实例来作为

urlopen()的参数;而需要访问的 url 地址则作为 Request 实例的参数。

from urllib import request

if __name__ == "__main__":     

req = request.Request("http://fanyi.baidu.com/")    

 response = request.urlopen(req)

html = response.read() html = html.decode("utf-8") print(html)

User Agent

浏览器就是互联网世界上公认被允许的身份,如果我们希望我们的爬虫程序更像一个真

实用户,那我们第一步,就是需要伪装成一个被公认的浏览器。用不同的浏览器在发送

请求的时候,会有不同的 User-Agent 头。中文名为用户代理,简称UA

User Agent存放于Headers中

服务器就是通过查看Headers中的User Agent来判断是谁在访问。

urllib中默认的User Agent,会有Python的字样,如果服务器检查User Agent,可以拒

绝Python程序访问网站。

常见浏览器User-Agent:

https://blog.csdn.net/Kwoky/article/details/80381246

设置User Agent

方法 1:在创建 Request 对象的时候,填入 headers 参数(包含 User Agent 信息),这个

Headers参数要求为字典;

方法2:在创建Request对象的时候不添加headers参数,在创建完成之后,使用add_h

eader()的方法,添加headers。

代理分类

代理可以分为三种,即高度匿名代理、普通匿名代理和透明代理。

高度匿名代理 隐藏客户的真实IP,但是不改变客户机的请求,就像有个真正的客户浏览器

在访问服务器。

普通匿名代理 能隐藏客户机的真实 IP,会改变客户的请求信息,服务器端不知道你的 ip

地址但有可能认为我们使用了代理。

透明代理 不但改变了我们的请求信息,还会传送真实的IP地址。

爬虫程序运行速度是很快,在网站爬取数据时,一个固定IP的访问频率就会很高,这不符合

人为操作的标准。所以一些网站会设置一个IP访问频率的阈值,如果一个IP访问频率超过

这个阈值,说明这个不是人在访问,而是一个爬虫程序。

解决办法一:设置延时

解决办法二:使用 IP 代理。可以设置一些代理服务器,每隔一段时间换一个代理,就算 IP

被禁止,依然可以换个IP继续爬取。

免费短期代理网站举例:

西刺免费代理IP  http://www.xicidaili.com/

快代理免费代理  http://www.kuaidaili.com/free/inha/

聚合数据 https://www.juhe.cn/docs/api/id/62

代理IP选取

西刺网站为例,选出信号好的IP

使用代理的步骤:

(1)调用urlib.request.ProxyHandler(),构建处理器对象,proxies参数为一个字典。

  (2)创建Opener对象

(3)安装Opener

使用 install_opener 方法之后,会将程序默认的 urlopen 方法替换掉。也就是说,如果使

用install_opener之后,在该文件中,再次调用urlopen会使用自己创建好的opener。

代码:

if __name__ == "__main__":    

 #访问网址   

 #url = 'http://www.baidu.com/' 

url='http://ip.27399.com/’    

 #这是代理 IP    proxy = {'http':'113.92.156.185:808'}    

#创建 ProxyHandler    

 proxy_support = request.ProxyHandler(proxy)    

 #创建 Opener    

 opener = request.build_opener(proxy_support)   

 #添加 User Angent    

 opener.addheaders = [('User-Agent','Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36')]

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容