python爬虫模拟浏览器的两种方法实例分析


Posted in Python onDecember 09, 2019

本文实例讲述了python爬虫模拟浏览器的两种方法。分享给大家供大家参考,具体如下:

爬虫爬取网站出现403,因为站点做了防爬虫的设置

一、Herders 属性

爬取CSDN博客

import urllib.request
url = "http://blog.csdn.net/hurmishine/article/details/71708030"file = urllib.request.urlopen(url)

爬取结果

urllib.error.HTTPError: HTTP Error 403: Forbidden

这就说明CSDN做了一些设置,来防止别人恶意爬取信息

所以接下来,我们需要让爬虫模拟成浏览器

任意打开一个网页,比如打开百度,然后按F12,此时会出现一个窗口,我们切换到Network标签页,然后点击刷新网站,选中弹出框左侧的“www.baidu.com”,即下图所示:

python爬虫模拟浏览器的两种方法实例分析

往下拖动 我们会看到“User-Agent”字样的一串信息,没错 这就是我们想要的东西。我们将其复制下来。

此时我们得到的信息是:”Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36

接下来我们可以用两种方式来模拟浏览器访问网页。

二、方法1:使用build_opener()修改报头

由于urlopen()不支持一些HTTP的高级功能,所以我们需要修改报头。可以使用urllib.request.build_opener()进行,我们修改一下上面的代码:

import urllib.request
url = "http://blog.csdn.net/hurmishine/article/details/71708030"headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
opener = urllib.request.build_opener()
opener.addheaders = [headers]
data = opener.open(url).read()
print(data)

上面代码中我们先定义一个变量headers来储存User-Agent信息,定义的格式是(“User-Agent”,具体信息)
具体信息我们上面已经获取到了,这个信息获取一次即可,以后爬取其他网站也可以用,所以我们可以保存下来,不用每次都F12去找了。

然后我们用urllib.request.build_opener()创建自定义的opener对象并赋值给opener,然后设置opener的addheaders,就是设置对应的头信息,格式为:“opener(对象名).addheaders = [头信息(即我们储存的具体信息)]”,设置好后我们就可以使用opener对象的open()方法打开对应的网址了。格式:“opener(对象名).open(url地址)”打开后我们可以使用read()方法来读取对应数据,并赋值给data变量。

得到输出结果

b'\r\n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r\n     \r\n    <html xmlns="http://www.w3.org/1999/xhtml">\r\n    \r\n<head>  \r\n\r\n            <link rel="canonical" href="http://blog.csdn.net/hurmishine/article/details/71708030" rel="external nofollow" /> ...

三、方法2:使用add_header()添加报头

除了上面的这种方法,还可以使用urllib.request.Request()下的add_header()实现浏览器的模拟。

先上代码

import urllib.request
url = "http://blog.csdn.net/hurmishine/article/details/71708030"req = urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36')
data = urllib.request.urlopen(req).read()
print(data)

好,我们来分析一下。

导入包,定义url地址我们就不说了,我们使用urllib.request.Request(url)创建一个Request对象,并赋值给变量req,创建Request对象的格式:urllib.request.Request(url地址)

随后我们使用add_header()方法添加对应的报头信息,格式:Request(对象名).add_header(‘对象名','对象值')

现在我们已经设置好了报头,然后我们使用urlopen()打开该Request对象即可打开对应的网址,多以我们使用

data = urllib.request.urlopen(req).read()打开了对应的网址,并读取了网页内容,并赋值给data变量。

以上,我们使用了两种方法实现了爬虫模拟浏览器打开网址,并获取网址的内容信息,避免了403错误。

值得我们注意的是,方法1中使用的是addheaders()方法,方法2中使用的是add_header()方法,注意末尾有无s以及有无下划线的区别

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
使用python绘制人人网好友关系图示例
Apr 01 Python
python读写二进制文件的方法
May 09 Python
Python中enumerate()函数编写更Pythonic的循环
Mar 06 Python
Python实现读取Properties配置文件的方法
Mar 29 Python
python通过http下载文件的方法详解
Jul 26 Python
Python实现i人事自动打卡的示例代码
Jan 09 Python
python3.7调试的实例方法
Jul 21 Python
Selenium python时间控件输入问题解决方案
Jul 22 Python
pandas取dataframe特定行列的实现方法
May 24 Python
Python turtle实现贪吃蛇游戏
Jun 18 Python
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
Nov 11 Python
Python+tkinter实现高清图片保存
Mar 13 Python
Python二次规划和线性规划使用实例
Dec 09 #Python
Python Numpy数组扩展repeat和tile使用实例解析
Dec 09 #Python
如何将 awk 脚本移植到 Python
Dec 09 #Python
Python 读取 YUV(NV12) 视频文件实例
Dec 09 #Python
基于YUV 数据格式详解及python实现方式
Dec 09 #Python
Python编写一个验证码图片数据标注GUI程序附源码
Dec 09 #Python
Python内置方法实现字符串的秘钥加解密(推荐)
Dec 09 #Python
You might like
PHP获取MSN好友列表类的实现代码
2013/06/23 PHP
php单态设计模式(单例模式)实例
2014/11/18 PHP
php+xml编程之SimpleXML的应用实例
2015/01/24 PHP
Yii 2.0中场景的使用教程
2017/06/02 PHP
redis+php实现微博(一)注册与登录功能详解
2019/09/23 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
2016/05/26 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
js实现5秒倒计时重新发送短信功能
2017/02/05 Javascript
bootstrap table 数据表格行内修改的实现代码
2017/02/13 Javascript
vue2.0 路由不显示router-view的解决方法
2018/03/06 Javascript
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
Vue-router 切换组件页面时进入进出动画方法
2018/09/01 Javascript
js中数组对象去重的两种方法
2019/01/18 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
Vue登录拦截 登录后继续跳转指定页面的操作
2020/08/04 Javascript
如何封装Vue Element的table表格组件
2021/02/06 Vue.js
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
[01:05:36]VP vs TNC Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
深入浅出分析Python装饰器用法
2017/07/28 Python
Python pymongo模块用法示例
2018/03/31 Python
PyQT5速成教程之Qt Designer介绍与入门
2020/11/02 Python
门卫岗位安全职责
2013/12/13 职场文书
承办会议欢迎词
2014/01/17 职场文书
小加工厂管理制度
2014/01/21 职场文书
《灰椋鸟》教学反思
2014/04/27 职场文书
十八大观后感
2015/06/12 职场文书
宿舍管理制度范本
2015/08/07 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
浅谈如何写好演讲稿?
2019/06/12 职场文书
2019毕业论文致谢词
2019/06/24 职场文书