美文网首页
2018-08-21

2018-08-21

作者: 孙培培棒棒哒 | 来源:发表于2018-08-28 23:32 被阅读16次

    爬虫简介

    什么是爬虫?

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

    所谓网页抓取,就是把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')]

    相关文章

      网友评论

          本文标题:2018-08-21

          本文链接:https://www.haomeiwen.com/subject/zehdiftx.html