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 提取文件的小程序
Jul 29 Python
Python中的FTP通信模块ftplib的用法整理
Jul 08 Python
关于python写入文件自动换行的问题
Jun 23 Python
python调用外部程序的实操步骤
Mar 04 Python
浅析Python与Mongodb数据库之间的操作方法
Jul 01 Python
Django框架中序列化和反序列化的例子
Aug 06 Python
Tensorflow Summary用法学习笔记
Jan 10 Python
python numpy实现rolling滚动案例
Jun 08 Python
基于Python中Remove函数的用法讨论
Dec 11 Python
浅谈Python列表嵌套字典转化的问题
Apr 07 Python
使用pandas模块实现数据的标准化操作
May 14 Python
Pytorch中的数据集划分&正则化方法
May 27 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中创建和验证哈希的简单方法实探
2015/07/06 PHP
PHP生成图像验证码的方法小结(2种方法)
2016/07/18 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
回车直接实现点击某按钮的效果即触发单击事件
2014/02/27 Javascript
js使用post 方式打开新窗口
2015/02/26 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
2015/09/02 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
2016/11/22 Javascript
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
2017/03/23 jQuery
深入理解React中何时使用箭头函数
2017/08/23 Javascript
jQuery实现的简单动态添加、删除表格功能示例
2017/09/21 jQuery
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
Vue批量图片显示时遇到的路径被解析问题
2019/03/28 Javascript
微信小程序自定义导航栏实例代码
2019/04/05 Javascript
详解vue-video-player使用心得(兼容m3u8)
2019/08/23 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
2020/04/13 Javascript
Vue过滤器,生命周期函数和vue-resource简单介绍
2021/01/12 Vue.js
[11:33]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第二场
2018/04/06 DOTA
python实现的系统实用log类实例
2015/06/30 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
2020/06/04 Python
css3动画 小球滚动 js控制动画暂停
2019/11/29 HTML / CSS
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
世界领先的26岁以下学生和青少年旅行预订网站:StudentUniverse
2018/07/01 全球购物
美国最值得信赖的宠物药房:Allivet
2019/03/23 全球购物
上海微创软件面试题
2012/06/14 面试题
物业管理求职自荐信
2013/09/25 职场文书
高中生学习生活的自我评价
2013/11/27 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
刑事撤诉申请书
2015/05/18 职场文书
Python 语言实现六大查找算法
2021/06/30 Python