您的位置:首页 > 编程语言 > Python开发

【Python爬虫】利用Python的requests库进行一次比较全面的数据爬取操作)

2018-11-29 23:16 591 查看

【Python爬虫】利用Python的requests库进行一次比较全面的数据爬取操作)

前言:

先做一下自我介绍,本人并非本专业毕业的专业人士,之前有两年的Java Web开发工作经验,近期刚刚接触到Python的爬虫知识,自学了大概一段时间,现在想把自己学习过程中遇到的问题和大家分享一下,这些代码都是自己摸索尝试出来的,其中可能有一些设计并不是很合理,希望大家能给出意见,这篇文章很适合刚刚接触爬虫的同学来学习,可以对爬虫的过程有一个整体的初步认识,文采很LOW就说这么多

准备工作:

说下我开发中用到的工具: PyCharm ,Python3.6 , MySql ,RegExTester

首先介绍下爬虫:

非常学术的话就不说了百度一下一大堆,这里就说下我对爬虫的理解,爬虫其实就是一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息,学过或者懂点前端知识的同学应该都知道我们所有的数据都是通过前台页面展示给用户的,不管你的页面是动态还是静态的只要页面上显示了数据,就说明我们可以通过爬虫技术爬取下来,其实说简单点爬虫就是爬取网页的html源代码,并通过一些解析方法得到代码中的数据部分,把它们保存起来为我们所用。

爬虫前的准备工作:

想要爬取到我们需要的数据我们首先要分析想要爬取的网站结构,找到对应的url,根据每个url一步步进入到我们想要获取数据的目标网页展开我们的爬取大业,下面我要爬取的是一个小说网站网址就不写出来了,大家自己随便找一个小说网站都差不多

开始爬虫:

我们现在手中拥有一个url了,这就是我们的起点首先我们要用到requests库里面的方法对当前url做解析,其实就是得到当前url的html代码,我们把这些代码封装成一个方法以便使用:

非常简单的几行代码我们就完成了对页面的抓取,同学们可以写个main函数来运行一下,其中decodeInfo是你要爬去的页面的编码格式可以通过查看网页源代码的charset来确定。
页面拿到了但是代码中还有一些东西需要完善:在访问过程中如果失败的处理方案
大家知道正常的http请求如果访问成功应该会返回一个200的状态码,当然还有许多别的状态码,具体的大家可以参考:http://tool.oschina.net/commons?type=5
所以我们要根据可能出现的状态码进行相应的处理,把报错信息写入日志中做记录,需要用到logging库:
日志的级别根据实际情况设置,这里设置成info级别即可
级别越高打印的日志越少,反之亦然,即
debug : 打印全部的日志(不设置等同于debug)
info : 打印info,warning,error,critical级别的日志
warning : 打印warning,error,critical级别的日志
error : 打印error,critical级别的日志
critical : 打印critical级别

日志创建好了下面我们可以根据捕获不同的异常来做记录了:这里需要用到requests库中的state_code来获得http的响应状态,捕获了一些常见的异常

如果服务器异常可以尝试重新访问,这里用到了递归,使用递归时一定要设置好出口否则有可能死循环,这里的处理是是传入一个尝试次数tries每次访问后tries-1,如果跳出递归则记录出错的url以便处理,在每次访问url失败后sleep一个随机时间是为了模拟用户防止短时间频繁访问造成反扒,说道反扒我们初期可以使用一些比较简单的手段来防止反扒比如:访问时间间隔随机,设置user-agent参数(参数池更加),设置代理服务器(代理服务器池),下面我们来加入user-agent参数

这样就加好了我们可以去网上找一些user-agent的值传进来也可以打开浏览器复制自己的使用,如果不设置默认使用python自带的这样如果有反扒机制很容易被发现下面我们来运行一下写一个main函数

运行完了控制台会打印出访问的url的信息我们可以通过抓包工具看一下我们的请求信息

可以看到user-agent变成了我们修改过得值,大家可以试一下不改的话是什么
这样我们的函数就封装好了,我持续更新后面的代码,有什么问题还希望大家指出

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: