当前位置:   article > 正文

urllib之request模块--解决反扒_urllib.request.urlretrieve被反爬

urllib.request.urlretrieve被反爬

urllib的基本概念

urllib是python中的URL处理模块,Python内置的库,不需要我们安装。urllib是一个包,它收集了4个用于处理url的模块:
①urllib.request :请求打开和读取url模块
②urllib.error :异常处理模块(包含由urllib.request造成的异常)
③urllib.parse :解析模块(拆分、合并等)
④urllib.robotparser:robot.txt解析模块

urllib库的基本函数和用法

urllib.request 模块:

urllib.request 模块定义了打开和获取网页信息的函数和类(基本和简要的身份验证、重定向、cookie等等)

urlopen函数

形式如下:

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
  • 1

其中,url是你申请打开的网址,它可以是字符串也可以是请求对象。
data是

urllib.request.urlopen() 方法经常会被用来打开一个网页的源代码,然后会去分析这个页面源代码,但是对于有的网站使用这种方法时会抛出"HTTP Error "异常,如下所示:

// 源代码:
from urllib import request
url='https://movie.douban.com/'
#url='http://www.baidu.com'
html=request.urlopen(url).read().decode('utf-8')
print(str(html))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

爬取豆瓣电影网页,会出现如下所示的错误:
在这里插入图片描述
我还以为是我的代码出现了问题,然后换了一个百度网页,就可以运行了。

// An highlighted block
from urllib import request
#url='https://movie.douban.com/'
url='http://www.baidu.com'
html=request.urlopen(url).read().decode('utf-8')
print(str(html))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

可以看到抓取的网页源代码如下:
在这里插入图片描述
是因为用 urllib.request.urlopen 方式打开一个URL,服务器端只会收到一个单纯的访问该页面的请求,并不知道发送这个请求使用的浏览器,操作系统,硬件平台等信息,而缺失这些信息的请求往往都是非正常的访问,例如爬虫.所以是因为豆瓣电影主页设置了反爬虫机制,直接爬取会被拦截。
因此为了防止爬虫访问该网站,豆瓣设置了反爬虫机制,验证请求信息中的user-agent(它的信息包括硬件平台、系统软件、应用软件和用户个人偏好),如果user-agent存在异常或者是不存在,那么这次请求将会被拒绝,所以可以尝试在请求中加入user-agent的头部信息,获取user-agent的操作如下:

因此需要在豆瓣电影主页的网站,按f12,进入其网页代码,如下图中红色部分所示:
在这里插入图片描述
然后再选中network,选中name中的任意一个,点击Headers,往下拉找到其中user-agent(代表用的哪个请求的浏览器),如图:
在这里插入图片描述
此时将代码添加headers属性:
代码如下:

// 解决反扒取问题
from urllib import request
url='https://movie.douban.com/'
headers={'user-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3765.400 QQBrowser/10.6.4153.400'}
html=request.Request(url,headers=headers)
html1=request.urlopen(html)
ydm=html1.read().decode('utf-8')
print(str(ydm))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

可以看到输出内容为豆瓣的源代码:
在这里插入图片描述

参考链接:https://blog.csdn.net/eric_sunah/article/details/11301873

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/247877
推荐阅读
相关标签
  

闽ICP备14008679号