urllib之request模块--解决反扒

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)

其中,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))

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

// 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))

可以看到抓取的网页源代码如下:
在这里插入图片描述
是因为用 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))

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值