Python爬虫——urllib下载和订制请求对象

Python爬虫——urllib下载和订制请求对象

1、urllib下载资源

下载资源使用urllib.request模块的urlretrieve()方法,

urllib.request.urlretrieve():将URL对应的互联网资源下载到本地。

import urllib.request

# 下载网页
url_page = 'http://www.baidu.com'
urllib.request.urlretrieve(url_page,'baidu.html')

#下载图片
url_picture = 'https://picsum.photos/id/1000/200/300'
urllib.request.urlretrieve(url_picture,'pic1.jpg')

#下载视频
url_mp4 = 'https://vd2.bdstatic.com/mda-jkn0avce7k4ksr1x/sc/mda-jkn0avce7k4ksr1x.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1657679260-0-0-7e2648f86a186404108f974b0d2aae03&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3460060765&vid=14392644018648491043&abtest=103455_2&klogid=3460060765'
urllib.request.urlretrieve(url_mp4,'scenery.mp4')

2、定制请求

绝大多数网站都具备一定程度的反爬能力,禁止网络爬虫程序大量地访问网站资源,以免给网站服务器带来压力,

User-Agent(用户代理) 就是反爬策略的其中一种,很多网站都会对请求头Headers的User-Agent进行检测。

用不同的浏览器在发送请求的时候,会有不同的User-Agent头:

系统浏览器User-Agent字符串
MacChromeMozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36
MacFirefoxMozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:65.0) Gecko/20100101 Firefox/65.0
MacSafariMozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15
WindowsEdgeMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763
WindowsIEMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
WindowsChromeMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36
iOSChromeMozilla/5.0 (iPhone; CPU iPhone OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) CriOS/31.0.1650.18 Mobile/11B554a Safari/8536.25
iOSSafariMozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4
AndroidChromeMozilla/5.0 (Linux; Android 4.2.1; M040 Build/JOP40D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36
AndroidWebkitMozilla/5.0 (Linux; U; Android 4.4.4; zh-cn; M351 Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

查看本机的浏览器版本和User-Agent信息:https://useragent.buyaocha.com/

urllib.request模块默认使用的User-Agent为:Python-urllib/x.y(x和y是Python主版本和次版本号,例如Python-urllib/3.7)

使用默认request请求访问网站资源:

import urllib.request
# https请求协议
url_page = 'https://www.baidu.com'
response = urllib.request.urlopen(url_page)
content = response.read().decode('UTF-8')
print(content)

执行结果:网站通过识别请求头中 User-Agent 信息来判断是否是爬虫访问网站,如果爬虫被识别就无法获取到网站数据

<html>
<head>
	<script>
		location.replace(location.href.replace("https://","http://"));
	</script>
</head>
<body>
	<noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript>
</body>
</html>

定制请求:Request()

Request():创建一个Request对象来作为urllib.request.urlopen()的参数

参数说明:

  • url参数:请求的URL地址

  • data(默认为空):访问URL时要提交的数据,同时HTTP请求将从“GET”方式改为“POST”方式

  • headers(默认为空):是一个字典,包含了需要发送的HTTP请求头的键值对

import urllib.request

url_page = 'https://www.baidu.com'

# 获得User-Agent,伪装成SLBrowser浏览器访问网站
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.5261 SLBChan/10'}
#重构请求头,根据参数顺序使用关键字传承的方式传参,
request = urllib.request.Request(url=url_page,headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('UTF-8')
print(content)

执行结果:破解了网站通过识别 User-Agent 来反爬虫程序的手段,成功获取到网站首页

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万里顾—程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值