没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论


















Python 深度解析系列,第三期爬虫进阶,QQ 群:518980304
Python 深度解析
之深入理解爬虫进阶
前言:互联网大型企业都有自己数据展示平台,都会想办法去保护自己的数据,标准的说法
就是反爬,但你有张良计,我有过墙梯。理论上来说,只要你在网页上能看见的东西,都是
可以爬下来的,为什么敢这么说,因为就是这么自信,自信的男孩运气往往都不会太好,囧。
By 浪ふ沏沙
在爬网页之前我先来说一下,我们打开网站后来进行的一系列的流程:首先我们会在浏览器
里输入一个网址,这个网址包含 url+端口以及别的参数传递值,web 的默认端口是 80,如
果我们不输入端口号,就是取的 80。举个例子你输入‘https://www.baidu.com’和
‘https://www.baidu.com:80’是一个效果,回车之后,会给对方的服务器产生一个请求
(request),然后对方的服务器会给我们一个响应(response),而后浏览器会解析成我们看到
的样子。我们爬数据,也是这个流程,先发起一个请求,然后我们自己来处理服务器返回的
响应,就能拿到我们需要的数据,这也就是我为什么说,你能看见的数据,我们都能爬到,
只要你能合理解决反爬的问题。
今天我们就拿豆瓣来做一个详细的说明,开始干活。
一、 常见的反爬处理
A. 模仿浏览器登录
很多服务器会判断你的请求来至哪里,如果不是浏览器请求的,就会给你返回一个 403
的访问错误,这个时候我们就可以把我们的请求伪装成浏览器,我们可以看一个例子。
我们直接用 urlopen 打开 html 想获取网页源码,服务器却给我们返回了一个 forbidden,
这就是因为服务器发现我们不是用浏览器在发起请求,拒绝了我们的访问,好了,我们
就偷偷装成浏览器再去试探一下。

Python 深度解析系列,第三期爬虫进阶,QQ 群:518980304
看到了什么?网页源码是不是拿到了?正常情况下,浏览器会有一个头部信息,我们
只需要把这个头部信息添加进去,服务器就会认为我们是在用浏览器访问,我们来找
一下这个头部信息。首先随便打开一个网页,f12,然后 f5 刷新,我选取的是百度,大
家来看下这个界面。
我们把这个 User-agent 拷贝下来就可以了。但是要怎么把这个写入到我们的代码呢?
现在打开我的 python 源文件 D:\program files\Python\Lib\urllib,找到 Request。
Request 有很多参数,必填的是我们的 url,headers 默认的是一个空字典类型,我们
只需要把我们的 user-agent 写成字典输入进去,就可以发起请求了。
B. 代理 IP
当我们快速爬取数据的时候,使用我们自己的一个 ip 难免会被服务器察觉,因为在一
个 ip 上,一秒的时间能请求十几个甚至上百个网页,在是认为所无法达到的,网站的
开发者就会给出一个处理,封掉我们这个 IP,然后我们就不能再方位这个网站了,那
么我们可以用代理 IP 的方法来解决。我们需要一个代理 IP 池,这里有一个代理 ip 的
网站,我们可以从上边爬取我们需要的 ip 地址和端口 http://www.xicidaili.com/
直接用 re 就可以拿到,就不多说了。下边说一下如何做一个代理 ip 的处理。
#先给一个我们需要爬取的 url
url1=r’https://www.baidu.com’
#proxy 是我们需要用到的 ip 地址,当然这里只是一个,我们可以用 for 循环来传递进
去上边在代理 ip 网站上拿出来的 ip。

Python 深度解析系列,第三期爬虫进阶,QQ 群:518980304
proxy = {'https':'61.135.217.7:80'}
#创建 ProxyHandler, ProxyHandler 是一个类,其参数是一个字典:{ '类型':'代理
ip:端口号'},这就要求我们上边的 proxy 要写成字典。
proxy_support = request.ProxyHandler(proxy)
# 创 建 Opener , python 在打开一个 url 链接时,就会使用 opener。其实,
urllib.request.urlopen()函数实际上是使用的是默认的 opener,只不过在这里我们需要
定制一个 opener 来指定 handler。
opener = request.build_opener(proxy_support)
#添加 User Angent,这个就是我们上边说的一个浏览器的头部信息,大家可以查看自
己的浏览器的 headers,添加,值得注意的是,这里的 headers 不是字典,而是一个序列中
放着一个元组。
opener.addheaders = [('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36')]
#安装 Opener,install_opener 用来创建(全局)默认 opener,这个表示调用 urlopen
将使用你安装的 opener。
request.install_opener(opener)
#使用自己安装好的 Opener,上一步我们已经安装了自定义的 urlopen,现在我们就能
像使用系统的 urlopen 一样使用我们自己创建的 opener 了,此处的 urlopen 不是系统的
urlopen,而是我们根据自己的需要创建出来的
response = request.urlopen(url1)
#读取相应信息并解码
html = response.read().decode("utf-8")
这样我们就通过参数的需要创建了一个自己的 urlopen,这样在访问网页的时候,服务
器上看到的就是我们从 ip_list 里的 ip 来发起的请求。
二、 多级页面的抓包
我们来打开网址:https://movie.douban.com/,这是豆瓣的一个电影网址,有三个大
的模块:正在热映、最近热门电影、最近热门电视剧。右键选择查看源代码。Ctrl+f 我
们来查看一下:正在热映的:
可见热映的电影链接在网页源码中,我们再看一下最近热门的电影和最近热门的电视
剧:
剩余14页未读,继续阅读
资源评论

- 烧瓶里的西瓜皮2022-04-09别下,资源不行!
左手蝴蝶
- 粉丝: 0
- 资源: 1

上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制
