Python爬虫第一天:爬虫概述及抓包工具和urllib库

内容简述:     

    一:爬虫概述和学习路线

    二:协议和请求方法 

    三:抓包工具-谷歌浏览器 和fiddler安装及介绍    

    四:urllib库介绍和使用

    五:构建请求对象-Request

一:爬虫起源

    大数据时代数据来源:

         1.企业生产的用户数据(BAT)  例如:百度指数|阿里指数|微指数等

                http://index.baidu.com/http://index.1688.com/

         2.数据管理咨询公司              例如:艾瑞咨询|埃森哲

                http://www.iresearch.com.cn/https://www.accenture.com/cn-en

         3.政府/机构提供的公开数据  例如:统计局|世界银行等

                http://www.stats.gov.cn/https://data.worldbank.org.cn/

         4.第三方数据平台购买数据    例如:贵阳大数据交易平台

         5.爬虫爬取数据

二:爬虫概念及分类

概念:是抓取网页数据的程序。

使用场景分类:通用爬虫和聚焦爬虫概念

     通用爬虫:

        通用网络爬虫是捜索引擎抓取系统(Baidu、Google、Yahoo等)的组成部分。

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

       通用爬虫工作流程:

            1-抓取网页

                A-向搜索引擎主动提供

                B-其它优质网站设置外链

                C-搜索引擎与DNS服务商合作,快速收录新网站

            2-数据存储

            3-数据处理

            4-提供检索服务、网站排名

        缺点

               1-数据大部分无用

               2-搜索引擎无法针对于某个用户提供服务

        Robots协议:协议会指明通用爬虫可以爬取网页的权限。

        Robots.txt 并不是所有爬虫都遵守,大型的搜索引擎爬虫会遵守。

        聚焦爬虫:是"面向特定个性化需求"的一种网络爬虫程序。

三:怎么爬数据?

   网页特征:

        1-URL定位(统一资源定位符)

        2-HTML展示(超文本标记语言)描述页面信息

        3-HTTP|HTTPS等协议(传输html数据

   设计思路:

        1.确定需要爬取的网页URL。

        2.通过HTTP/HTTP协议获取HTML页面。

        3.提取HTML页面里有用的数据:

                a.如果是需要的数据,就保存起来。

                 b.如果是页面里的其他URL,那就继续执行第二步。

四:学习爬虫必备知识点

        1.Python的基本语法知识

        2.如何抓取HTML页面:

                HTTP请求的处理,urllib、urllib2、requests

                处理后的请求可以模拟浏览器发送请求,获取服务器响应文件

        3.解析服务器响应的内容

                   re、xpath、BeautifulSoup4(bs4)、jsonpath、pyquery等

        4.如何采集动态HTML、验证码的处理(豆瓣电影)

                    Selenium+ PhantomJS(无界面浏览器):

                    模拟真实浏览器加载js、ajax等非静态页面

                   Tesseract:机器学习库,机器图像识别系统,可以处理简单的验证码。

                    复杂的验证码可以通过手动输入/专门的打码平台

        5.Scrapy框架:(Scrapy|Pyspider)

               个性化高性能(底层使用-异步网络框架twisted),下载速度快,提供了数据存储、数据下载、提取规则等组件。

        6.分布式策略 scrapy-reids:

                  在Scrapy的基础上添加了以 Redis 为核心的组件。支持分布式的功能。

                   主要在Redis里做请求指纹去重、请求分配、数据临时存储等。

           7.爬虫-反爬虫-反反爬虫之间的战斗

                    User-Agent、代理、验证码、动态数据加载、加密数据。

五:HTTP和HTTPS

        HTTP协议(HyperText TransferProtocol,超文本传输协议):

                是一种发布和接收 HTML页面的方法。

        HTTPS(Hypertext TransferProtocol over Secure Socket Layer)

                是HTTP的安全版,在HTTP下加入SSL层。

        SSL(Secure Sockets Layer 安全套接层)主要用于Web的安全传输协议,在传输层对网络连接进行加密,保障在Internet上数据传输的安全。

        HTTP的端口号为80,HTTPS的端口号为443

HTTP工作原理

    网络爬虫抓取过程可以理解为模拟浏览器操作的过程。

    浏览器的主要功能是向服务器发出请求,在浏览器窗口中展示你选择的网络资源,HTTP是一套计算机通过网络进行通信的规则。

HTTP通信由两部分组成: 客户端请求消息 与 服务器响应消息

浏览器发送HTTP请求的过程

        1-当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求。HTTP请求主要分为“Get”和“Post”两种方法。

        2-当我们在浏览器输入URL http://www.hao123.com的时候,浏览器发送一个Request请求去获取hao123的html,服务器把Response文件对象发送回给浏览器。

        3-浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如Images文件,CSS文件,JS文件。浏览器会自动再次发送Request去获取css|js

        4-当所有的文件都下载成功后,网页会根据HTML语法结构,完整进行显示。

六-URL

        Uniform/Universal Resource Locator的缩写):统一资源定位符。

        是用于完整地描述互联网上网页和其他资源的地址的一种手段。

        基本格式:scheme://host[:port#]/path/…/[?query-string][#anchor]

                Scheme:协议(例如:http,https, ftp)

                Host:服务器的IP地址或者域名

                port#:服务器的端口(如果是走协议默认端口,缺省端口80)

                path:访问资源的路径

                query-string:参数,发送给http服务器的数据

                anchor:锚(跳转到网页的指定锚点位置)

七:请求方法

八:发送请求谷歌调试细节

General:

Request URL:https://www.baidu.com/请求地址

                    Request Method: GET                            请求方法

                    Status Code: 200 OK                              状态码

                     Remote Address: 61.135.169.125:443   客户端请求ip

Response Headers

                    Cache-Control: private  告诉客户端下次请求的方式

                    Connection: Keep-Alive  客户端和服务端的连接类型

                    Content-Encoding: gzip  服务端返回的数据是经过gzip编码的

                    Content-Type:text/html;charset=utf-8  响应文件的类型和字符编码

                    Date: Wed, 27 Jun 2018 01:48:50GMT  服务器发送文件的时间

                    Server: BWS/1.1 服务器版本

                    Set-Cookie: BDSVRTM=68; path=/  设置cookie信息

RequestHeaders

                    Accept:text/html   可以接受返回的类型

                    Accept-Encoding: gzip,

                    deflate, br 可以接受的字符编码

                    Accept-Language:zh-CN,zh;q=0.9    语言

                    Cache-Control:max-age=0  不会缓存服务器资源

                    Connection: keep-alive  和服务端连接类型

                   Cookie: BAIDUID=F68132AFC5355:FG=1; Cookie类型

Host:www.baidu.com请求地址

                    User-Agent:Mozilla/5.0 (Windows NT6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181Safari/537.36  浏览器名称

九-抓包工具fiddler的使用

      安装软件:

        1-安装mono

http://www.mono-project.com/download/stable/#download-lin-ubuntu

        2-下载linux版本的fiddler并解压

https://www.telerik.com/download/fiddler

        3-在谷歌浏览器中导入证书

备注:window版本不需要安装mono

软件说明和使用:

        1、配置软件,配置fiddler能够抓取https的包

            Tools==>Options==>HTTPS

            选中 Capture Https Connects

            选中 Decrypt Https Traffic

            选中 Ignore

            然后将fiddler关闭再次打开即可

        2、fiddler软件介绍

                左边栏、右边栏

               左边栏:所有的请求

                        html   <>

                        css    图片中的标记

                         js     前面标注有js

                         json   前面标注有json

                          post   一个书本,一个箭头

                        右边栏:点击左边其中一个请求,这个请求的详细信息就会显示到右边栏

                        右上边栏:http请求信息

                                  点击  Insepctors

                                    webforms:post请求所有的表单数据

                                    raw:整个请求以纯文本的格式显示给你

                        右下边栏:http请求响应信息

                                有一个黄色提示信息响应体被编码过,需要点击解码。

                                headers:响应头信息

                                textview:响应的信息以文本的形式显示出来

                                imageview:如果图片,在这里显示图片

                                webview:模拟浏览器显示

                                cookies:cookie信息

                                 raw:将响应的信息以纯文本的形式展示给你

                                 json:一些接口返回给你json,在这里查看

                3、禁止fiddler抓包,file,点击第一个选项取消对号即可

                4、清除所有的请求, 点击x号,remove all

                5、左下角黑色框框,输入指令的地方

                     select json  select html  select image  cls 清楚所有请求   ?main  搜索

十:urllib

       urllib库是Python提供的用于操作URL的模块,在2版本中,有urllib和urllib2两个库,在3版本中,只有urllib库,我们使用3系列

urllib.request可以用来发送request和获取request的结果

urllib.parse用来解析和处理URL

   【1】urllib.request.urlopen方法

      urlopen(url, data = None,context = None)

        如果有data,则代表是post请求,context表示的是https请求的消除ssl错误

        urllib.request.urlretrieve(url, file_path) 将url内容直接下载到file_path中

注意:windows和mac在通过urlopen发送https请求的时候有可能报错

        错误:SSL: CERTIFICATE_VERIFY_FAILED

        原因:Python 2.7.9 之后引入了一个新特性,当使用urllib.urlopen打开一个 https 链接时,会验证一次 SSL证书。

解决方案:

                1-使用ssl创建未经验证的上下文,在urlopen中传入上下文参数

                        context = ssl._create_unverified_context()

                        urllib.request.urlopen("url",context=context).read()

                2-全局取消证书验证

                    在文件中导入ssl并添加一行代码

                      import ssl

                      ssl._create_default_https_context = ssl._create_unverified_context

   【2】HTTPResponse对象常见方法

        read()  读取的是二进制数据

          字符串类型和字节类型

              字符串==》字节  编码encode()

              字节==》字符串  解码decode()

        readline() 读取一行

        readlines()读取全部,返回一个列表

      【注意】上面的读取都是字节类型,转为字符串类型需要解码

         getcode()状态码

         geturl()  获取url

         getheaders()响应头信息 列表里面有元祖

        status属性  http状态码

   【3】urllib.parse

       A-urllib.parse.urlencode

        通过post提交的数据,都需要通过这个函数转码,且发送请求的时候必须为字节格式的,所以post数据经常如下使用

           data :是一个字典

           formdata =urllib.parse.urlencode(data).encode('utf-8')

     B-urllib.parse.quote()

           get参数中,有中文的,需要使用这个函数转码

http://www.baidu.com?name=中国

http://tool.chinaz.com/tools/urlencode.aspx编码在线工具

     C-urllib.parse.unquote()   url解码

十一:构造请求对象Request(高级请求)

   user-agent在线解析工具

http://www.atool.org/useragent.php

      request = urllib.request.Request(fullurl,headers=None)

      可以直接传递headers,也可request.add_header('User-Agent','xxx')

十二:带中文的get请求

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

推荐阅读更多精彩内容