📢📢📢📣📣📣 🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,小白一枚,多多关照😜😜😜 🏅🏅🏅CSDN Python领域新星创作者,大二在读,欢迎大家找我合作学习 💕入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀 💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺 🍉🍉🍉“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈 🌟🌟🌟???
让我们进一步了解一下爬虫,为urllib做最后的收尾吧~
爬虫post请求 cookie登录 handler处理器
一、post请求肯德基官网
在 肯德基官网 中找到餐厅查询,找出指定位置所有的门店。
1.分析页面
第一页:
请求网址: http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname、 请求方法: POST Data: cname: 北京 pid: pageIndex: 1 pageSize: 10
第二页:
> 请求网址: http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname、
> 请求方法: POST
> `Data:`
> cname: 北京
pid:
pageIndex: 2
pageSize: 10
可以发现,页面之间只是data不同,所以说我们只需要更改data就可以了。
2.代码编写
1.代码入口
if __name__=='__main__':
start_page = int(input(''))
end_page = int(input(''))
for page in range(start_page,end_page+1):
request=creat_request(page)
content=get_content(request)
down_load(page,content)
2.请求对象定制
post请求不要忘记data数据的解码:encode('utf-8')
def creat_request(page):
base_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'
data={
'cname': '北京',
'pid':'',
'pageIndex':page,
'pageSize': '10'
}
data = urllib.parse.urlencode(data).encode('utf-8')
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36'
}
request=urllib.request.Request(url=base_url,headers=headers,data=data)
return request
return 一定不要忘了写,每个函数你要给他返回一个数据。
3.获取页面源码
def get_content(request):
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
return content
4.下载页面内容
def down_load(page,content):
with open('kfc_'+str(page)+'.json','w',encoding='utf-8') as fp:
fp.write(content)
5.源码
import urllib.request
import urllib.parse
def creat_request(page):
base_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'
data={
'cname': '北京',
'pid':'',
'pageIndex':page,
'pageSize': '10'
}
data = urllib.parse.urlencode(data).encode('utf-8')
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36'
}
request=urllib.request.Request(url=base_url,headers=headers,data=data)
return request
def get_content(request):
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
return content
def down_load(page,content):
with open('kfc_'+str(page)+'.json','w',encoding='utf-8') as fp:
fp.write(content)
if __name__=='__main__':
start_page = int(input(''))
end_page = int(input(''))
for page in range(start_page,end_page+1):
request=creat_request(page)
content=get_content(request)
down_load(page,content)
6.爬取结果
爬取1-10页:
二 、URLError\HTTPError异常分析
HTTPError类是URLError类的子类
import urllib.request
import urllib.error
url = 'https://blog.csdn.net/m0_37816922/article/details/120'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36'
}
try:
request = urllib.request.Request(url=url,headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
except urllib.error.URLError:
print('我都说了,系统正在升级。。。')
通过urllib发送请求的时候,有可能会发送失败,这个时候如果想让你的代码更加的健壮,可以通过try‐ except 进行捕获异常,异常有两类,URLError\HTTPError
三、cookie解决QQ空间登录
1.正常爬取
分析页面: 找到接头,读取其中的headers,获取页面内容:
import urllib.request
url = 'https://user.qzone.qq.com/2511864242/infocenter'
headers={
'user-agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36',
}
request = urllib.request.Request(url=url,headers = headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
with open('qq1.html','w',encoding='utf-8') as fp:
fp.write(content)
得到结果: 进入之后会发现,只是进入了登录界面,并没有登陆进去:
2.利用cookie解决问题:
将请求标头中的全部数据都写到headers中:
':authority':' user.qzone.qq.com',
':method':' GET',
':path':' /2511864242/infocenter',
':scheme':' https',
'accept':' text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'accept-encoding':' gzip, deflate, br',
'accept-language':' zh-CN,zh;q=0.9',
'cache-control':' max-age=0',
'cookie':' 2511864242_totalcount=13496; 2511864242_todaycount=2; RK=ECihmXLCuq; ptcz=641b0fe4634b74d761ce9c469c93f3766a6ad2639d4490f37aeb876008c0eba7; tvfe_boss_uuid=1261d53129453d07; o_cookie=2511864242; eas_sid=X0nkgoLJGuyN43gKCxXdODxpVi; QZ_FE_WEBP_SUPPORT=1; cpu_performance_v8=0; nutty_uuid=b2d3e37a-bdbd-488e-9f21-3b53e541dfee; __Q_w_s_hat_seed=1; _ga=GA1.2.118587915.1626953898; fqm_pvqid=39ed0947-c27f-433b-b69a-f45b9890024c; luin=o2511864242; lskey=00010000de072c8e6e48fa1574db17cc9090c4a164266c5036e26a0c559f714d2b597dfb256d9a9440358b1d; pgv_pvid=6039633865; ptui_loginuin=tustaixueshenghui@163.com; _gid=GA1.2.1366085169.1633784022; uin=o2511864242; _qpsvr_localtk=0.7957179321058889; skey=@Ysdnvfow4; p_uin=o2511864242; pt4_token=IPJ09cE1ONrApR1DDtSPKXtObrnyYWHykLFRh5JRyKc_; p_skey=aKyCTikz4zFyYTIAZ4OAdlzt77pg0t8h3EImRUrZGDI_; Loading=Yes; pgv_info=ssid=s4493287755; qz_screen=1536x864; qzmusicplayer=qzone_player_2511864242_1633869885141; qqmusic_uin=; qqmusic_key=; qqmusic_fromtag=',
'if-modified-since: Sun, 10 Oct 2021 12:44':'32 GMT',
'sec-ch-ua':' "Chromium";v="94", "Google Chrome";v="94", ";Not A Brand";v="99"',
'sec-ch-ua-mobile':' ?0',
'sec-ch-ua-platform':' "Windows"',
'sec-fetch-dest':' document',
'sec-fetch-mode':' navigate',
'sec-fetch-site':' none',
'sec-fetch-user':' ?1',
'upgrade-insecure-requests':' 1',
'user-agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36',
在这些数据中,:开头的数据肯定都是没用的,去掉就行了,其实也就是只有cookie 有用,所以说我们将cookie数据保留: cookie中携带着你的登录信息 如果有登录之后的cookie,南无我们就可以携带者cookie进入任何界面。
import urllib.request
url = 'https://user.qzone.qq.com/2511864242/infocenter'
headers={
'user-agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36',
}
request = urllib.request.Request(url=url,headers = headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
with open('qq1.html','w',encoding='utf-8') as fp:
fp.write(content)
查看结果: 果然进去了QQ空间:
四、Handler处理器
为什么要学习handler? urllib.request.urlopen(url) : 不能定制请求头 urllib.request.Request(url,headers,data) : 可以定制请求头 Handler : 定制更高级的请求头(随着业务逻辑的复杂 请求对象的定制已经满足不了我们的需求(动态cookie和代理 不能使用请求对象的定制)
import urllib.request
url = 'https://www.baidu.com'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'
}
request = urllib.request.Request(url=url,headers=headers)
handler = urllib.request.HTTPHandler()
opener = urllib.request.build_opener(handler)
response = opener.open(request)
content = response.read().decode('utf-8')
print(content)
五、代理基本使用
访问自己ip:ip 1.代理的常用功能?
突破自身IP访问限制 ,访问国外站点。访问一些单位或团体内部资源 扩展:某大学FTP(前提是该代理地址在该资源的允许访问范围之内),使用教育网内地址段免费代理服务 器,就可以用于对教育网开放的各类FTP下载上传,以及各类资料查询共享等服务。提高访问速度 扩展:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲 区中,当其他用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提高访问速度。隐藏真实IP 扩展:上网者也可以通过这种方法隐藏自己的IP,免受攻击。
2.代码配置代理
- 创建Reuqest对象
- 创建ProxyHandler对象
- 用handler对象创建opener对象
- 使用opener.open函数发送请求
1.正常访问此页面:
import urllib.request
url='https://www.baidu.com/s?wd=ip'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'
}
request = urllib.request.Request(url=url,headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
with open('daili.html','w',encoding='utf-8') as fp:
fp.write(content)
2.使用handler方法
使用代理ip进行访问:快代理免费IP 使用代理ip隐藏自己的真是ip。
import urllib.request
url='https://www.baidu.com/s?wd=ip'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'
}
request = urllib.request.Request(url=url,headers=headers)
proxies={
'http':'118.24.219.151:16817'
}
handler = urllib.request.ProxyHandler(proxies=proxies)
opener = urllib.request.build_opener(handler)
response = opener.open(request)
content = response.read().decode('utf-8')
with open('yincangdaili1.html','w',encoding='utf-8') as fp:
fp.write(content)
📢📢📢最后的福利
??????最后一点小福利带给大家:如果想快速上手python的小伙伴们,这个详细整理PPT可以迅速帮助大家打牢python基础,需要的小伙伴们可以下载一下 Python入门基础教程全套+小白速成+学不会来找我! 🍻🍻🍻 还有自制表白神器,需要自取: Python表白神器,源码+解析+各种完美配置+浪漫新颖 🍻🍻🍻 🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了 ??????如果你喜欢的话,就不要吝惜你的一键三连了~
|