下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922
论坛 >编程语言 >零基础自学用Python 3开发网络爬虫(三): 伪装浏览器君

零基础自学用Python 3开发网络爬虫(三): 伪装浏览器君

课课家iOS游客发布于 2017-09-28 09:41查看:765回复:1

     添加超时跳过功能

        首先, 我简单地将

image.png

        改为

image.png

        运行后发现, 当发生超时, 程序因为exception中断. 于是我把这一句也放在try .. except 结构里, 问题解决.

     支持自动跳转

        在爬 http://baidu.com 的时候, 爬回来一个没有什么内容的东西, 这个东西告诉我们应该跳转到 http://www.baidu.com . 但是我们的爬虫并不支持自动跳转, 现在我们来加上这个功能, 让爬虫在爬 baidu.com 的时候能够抓取 www.baidu.com 的内容.

        首先我们要知道爬 http://baidu.com 的时候他返回的页面是怎么样的, 这个我们既可以用 Fiddler 看, 也可以写一个小爬虫来抓取. 这里我抓到的内容如下, 你也应该尝试一下写几行 python 来抓一抓.

image.png

        看代码我们知道这是一个利用 html 的 meta 来刷新与重定向的代码, 其中的0是等待0秒后跳转, 也就是立即跳转. 这样我们再像上一次说的那样用一个正则表达式把这个url提取出来就可以爬到正确的地方去了. 其实我们上一次写的爬虫已经可以具有这个功能, 这里只是单独拿出来说明一下 http 的 meta 跳转.

     伪装浏览器正规军

        前面几个小内容都写的比较少. 现在详细研究一下如何让网站们把我们的Python爬虫当成正规的浏览器来访. 因为如果不这么伪装自己, 有的网站就爬不回来了. 如果看过理论方面的知识, 就知道我们是要在 GET 的时候将 User-Agent 添加到header里.

        如果没有看过理论知识, 按照以下关键字搜索学习吧 :D

             HTTP 报文分两种: 请求报文响应报文

             请求报文的请求行首部行

             GETPOST, HEAD, PUT, DELETE 方法

        我用 IE 浏览器访问百度首页的时候, 浏览器发出去的请求报文如下:

image.png

        然后百度收到这个消息后, 返回给我的的响应报文如下(有删节):

image.png

        如果能够看懂这段话的第一句就OK了, 别的可以以后再配合 Fiddler 慢慢研究. 所以我们要做的就是在 Python 爬虫向百度发起请求的时候, 顺便在请求里面写上 User-Agent, 表明自己是浏览器君.

        在 GET 的时候添加 header 有很多方法, 下面介绍两种方法.

        第一种方法比较简便直接, 但是不好扩展功能, 代码如下:

image.png

        第二种方法使用了 build_opener 这个方法, 用来自定义 opener, 这种方法的好处是可以方便的拓展功能, 例如下面的代码就拓展了自动处理 Cookies 的功能.

image.png

        上述代码运行后通过 Fiddler 抓到的 GET 报文如下所示:

image.png

        可见我们在代码里写的东西都添加到请求报文里面了.

     保存抓回来的报文

        顺便说说文件操作. Python 的文件操作还是相当方便的. 我们可以讲抓回来的数据 data 以二进制形式保存, 也可以经过 decode() 处理成为字符串后以文本形式保存. 改动一下打开文件的方式就能用不同的姿势保存文件了. 下面是参考代码:

image.png


收藏(0)0
查看评分情况

全部评分

此主贴暂时没有点赞评分

总计:0

回复分享

版主推荐

    共有1条评论

    • IT宅男
    • mr jack
    • Mr ken
    • Mright
    • cappuccino
    • YUI
    • 课课家运营团队
    • 课课家技术团队1
    • 酸酸~甜甜
    • 选择版块:

    • 标题:

    • 内容

    • 验证码:

    • 标题:

    • 内容

    • 选择版块:

    移动帖子x

    移动到: