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开发vim插件及心得分享
Nov 04 Python
Python自定义线程池实现方法分析
Feb 07 Python
Python3.x爬虫下载网页图片的实例讲解
May 22 Python
python检索特定内容的文本文件实例
Jun 05 Python
python3 实现对图片进行局部切割的方法
Dec 05 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
Dec 16 Python
python动态进度条的实现代码
Jul 03 Python
Python 实现数据结构-堆栈和队列的操作方法
Jul 17 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
Aug 14 Python
基于python的docx模块处理word和WPS的docx格式文件方式
Feb 13 Python
使用python自动追踪你的快递(物流推送邮箱)
Mar 17 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数据库配置文件一般做法分享
2012/07/07 PHP
CodeIgniter框架URL路由总结
2014/09/03 PHP
几行代码轻松实现PHP文件打包下载zip
2017/03/01 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
js类型检查实现代码
2010/10/29 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
js window.onload 加载多个函数和追加函数详解
2014/01/08 Javascript
使用JavaScript获取电池状态的方法
2014/05/03 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
js网页滚动条滚动事件实例分析
2015/05/05 Javascript
js实现鼠标点击左上角滑动菜单效果代码
2015/09/06 Javascript
js获取鼠标位置实例详解
2015/12/09 Javascript
jquery属性,遍历,HTML操作方法详解
2016/09/17 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
详解Vue CLI3配置之filenameHashing使用和源码设计使用和源码设计
2018/08/31 Javascript
通过js随机函数Math.random实现乱序
2020/05/19 Javascript
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
Python实现全排列的打印
2018/08/18 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
关于python字符串方法分类详解
2019/08/20 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
python 如何快速复制序列
2020/09/07 Python
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
英国高档百货连锁店:John Lewis
2017/11/20 全球购物
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
医学类个人求职信范文
2014/02/05 职场文书
电子商务专业应届毕业生求职信
2014/06/21 职场文书
婚庆公司计划书
2014/09/15 职场文书
2016小学优秀教师先进事迹材料
2016/02/26 职场文书
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL