python用法查询笔记_Python爬虫学习笔记(三)

7d9aa4a6bc1caa74a575655f06cd8ea3.pnghandler处理器自定义 - Cookies && URLError && json简单使用

Cookies:

以抓取https://www.yaozh.com/为例

Test1(不使用cookies):

代码:

fb01546d2c277439be7873d24c3856a7.png

702c7c090bb195adcd8550148dbfda64.pngimport urllib.request

# 1.添加URL

url = "https://www.yaozh.com/"# 2.添加请求头

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36"}

# 3.构建请求对象

request = urllib.request.Request(url, headers=headers)

# 4.发送请求对象

response = urllib.request.urlopen(request)

# 5.读取数据

data = response.read()

#保存到文件中,验证数据

with open('01cookies.html', 'wb')as f:

f.write(data)

View Code

返回:

e83cb8bee371a1c22c7c71bb4e4e43a6.png

20c7eceb060c2e4d008bcc3a86ecef64.png

此时进入页面显示为游客模式,即未登录状态。

Test2(使用cookies:手动登录):

在network中查找cookies部分

db4c790291fb9fb406d02882776421be.png

代码(先登录在抓取):

fb01546d2c277439be7873d24c3856a7.png

702c7c090bb195adcd8550148dbfda64.png"""    直接获取个人中心的页面

手动粘贴,复制抓包的cookies

放在 request请求对象的请求头里面"""import urllib.request

# 1.添加URL

url = "https://www.yaozh.com/"# 2.添加请求头

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36","Cookie": "acw_tc=707c9fc316119925309487503e709498d3fe1f6beb4457b1cb1399958ad4d3; PHPSESSID=bvc8utedu2sljbdb818m4va8q3; _ga=GA1.2.472741825.1611992531; _gid=GA1.2.2079712096.1611992531; yaozh_logintime=1611992697; yaozh_user=1038868%09s1mpL3; yaozh_userId=1038868; yaozh_jobstatus=kptta67UcJieW6zKnFSe2JyYnoaSZ5htnZqdg26qb21rg66flM6bh5%2BscZdyVNaWz9Gwl4Ny2G%2BenofNlKqpl6XKppZVnKmflWlxg2lolJabd519626986447e0E3cd918611D19BBEbmpaamm6HcNiemZtVq56lloN0pG2SaZ%2BGam2SaWucl5ianZiWbIdw4g%3D%3Da9295385d0680617486debd4ce304305; _gat=1; Hm_lpvt_65968db3ac154c3089d7f9a4cbb98c94=1611992698; yaozh_uidhas=1; yaozh_mylogin=1611992704; acw_tc=707c9fc316119925309487503e709498d3fe1f6beb4457b1cb1399958ad4d3; Hm_lvt_65968db3ac154c3089d7f9a4cbb98c94=1611992531%2C1611992638",

}

# 3.构建请求对象

request = urllib.request.Request(url, headers=headers)

# 4.发送请求对象

response = urllib.request.urlopen(request)

# 5.读取数据

data = response.read()

#保存到文件中,验证数据

with open('01cookies2.html', 'wb')as f:

f.write(data)

先登录再抓取

返回:

bcd2e905603d58507269ce1fdd3f987b.png

此时为登录状态s1mpL3。

Test3(使用cookies:代码登录):

准备:

1.勾选Preserve Log,用于记录上一次登录

2.根据登录时的数据报,发现发送POST请求

8343cdd79b66717eda38c6d0a0143926.png

3.登陆之后退出,进入登录页面,检察元素,查找表单各项数据,

0ea001486f386a2152873cf5044fec34.png

代码:

fb01546d2c277439be7873d24c3856a7.png

702c7c090bb195adcd8550148dbfda64.png"""    获取个人页面1.代码登录  登陆成功    cookie有效2.自动带着cookie 去请求个人中心

cookiejar:自动保存cookie"""import urllib.requestfrom http import cookiejarfrom urllib import parse

# 登陆之前,登录页的网址,https://www.yaozh.com/login,找登录参数# 后台,根据发送的请求方式来判断,如果是GET,返回登录页面,如果是POST,返回登录结果

#   1.代码登录

# 1.1 登陆的网址

login_url = "https://www.yaozh.com/login"# 1.2 登陆的参数

login_form_data = {" username": "s1mpL3","pwd": "***************",#个人隐私,代码不予显示"formhash": "87F6F28A4*",#个人隐私,代码不予显示"backurl": "https%3A%2F%2Fwww.yaozh.com%2F",

}

# 参数需要转码;POST请求的data要求是bytes乐行

login_str = urllib.parse.urlencode(login_form_data).encode('utf-8')

# 1.3 发送POST登录请求

cookie_jar = cookiejar.CookieJar()

# 定义有添加cookie功能的处理器

cook_handler = urllib.request.HTTPCookieProcessor(cookie_jar)

# 根据处理器 生成openner

openner = urllib.request.build_opener(cook_handler)

# 带着参数,发送POST请求

# 添加请求头

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36"}

login_request = urllib.request.Request(login_url, headers=headers, data=login_str)

# 如果登陆成功,cookiejar自动保存cookie

openner.open(login_request)

#   2. 代码带着cookie去访问个人中心

center_url = "https://www.yaozh.com/member/"center_request = urllib.request.Request(center_url, headers=headers)

response = openner.open(center_url)

# bytes --> str

data = response.read().decode()

with open('02cookies.html', 'w', encoding="utf-8")as f:

f.write(data)

代码登录

返回:

以s1mpL3用户返回

30e9f36d1de875eb9868fd6748bd6433.png

注:

1.cookiejar库的使用from http import cookiejar

cookiejar.CookieJar()

2.HTTPCookieProcessor():有cookie功能的处理器

3.代码登录:只需修改用户名和密码

4.Python3报错:

UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 19523: illegal multibyte sequence

修改:open()中添加encoding="utf-8"with open('02cookies.html', 'w', encoding="utf-8")as f:

f.write(data)

解决方案参考:

URLError:urllib.request 提示错误

分为URLError HTTPError

其中HTTPError为URLError的子类

Test:

代码1:import urllib.request

url = 'http://www.xiaojian.cn' # 假设

response = urllib.request.urlopen(url)

返回1:

部分报错:raise URLError(err)

urllib.error.URLError: 

代码2:import urllib.request

url = 'https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/1111'response = urllib.request.urlopen(url)

返回2:

部分报错:raise HTTPError(req.full_url, code, msg, hdrs, fp)

urllib.error.HTTPError: HTTP Error 404: Not Found

代码3:import urllib.request

url = 'https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/1111'try:

response = urllib.request.urlopen(url)

except urllib.request.HTTPError as error:

print(error.code)

except urllib.request.URLError as error:

print(error)

返回3:

4d6c5d62fd4881f08d7cd302cedd3bbb.png

代码4:import urllib.request

url = 'https://blog.cs1'try:

response = urllib.request.urlopen(url)

except urllib.request.HTTPError as error:

print(error.code)

except urllib.request.URLError as error:

print(error)

返回4:

f6257e68946fa2ac53795d544e0e1d04.png

Requsets:

准备:

安装第三方模块:pip install requests

Test1(基本属性:GET):

代码1(不带请求头):

fb01546d2c277439be7873d24c3856a7.png

702c7c090bb195adcd8550148dbfda64.pngimport requests

url = "http://www.baidu.com"response = requests.get(url)

# content属性:返回类型是bytes

data = response.content

print(data)

data1 = response.content.decode('utf-8')

print(type(data1))

# text属性:返回类型是文本str(如果响应内容没有编码,将自行编码,可能出错。因此优先使用content)

data2 = response.text

print(type(data2))

View Code

返回1:

4f239bbded2de13bfd174431fdb47f8c.png

代码2(带请求头):import requestsclass RequestSpider(object):

def __init__(self):

url = "https://www.baidu.com/"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36"}

self.response = requests.get(url, headers=headers)

def run(self):

data = self.response.content

# 1.获取请求头

request_headers1 = self.response.request.headers

print(request_headers1)

# 2.获取响应头

request_headers2 = self.response.headers

print(request_headers2)

# 3.获取响应状态码

code = self.response.status_code

print(code)

# 4.获取请求的cookie

request_cookie = self.response.request._cookies

print(request_cookie)

#注:用浏览器进入百度时,可能会有很多cookie,这是浏览器自动添加的,不是服务器给的

# 5.获取响应的cookie

response_cookie = self.response.cookies

print(response_cookie)

RequestSpider().run()

返回:E:\python\python.exe H:/code/Python爬虫/Day04/03-requests_use2.py

{'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

{'Bdpagetype': '1', 'Bdqid': '0xe0b22322001a2c4a', 'Cache-Control': 'private', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html;charset=utf-8', 'Date': 'Sat, 30 Jan 2021 09:27:06 GMT', 'Expires': 'Sat, 30 Jan 2021 09:26:56 GMT', 'P3p': 'CP=" OTI DSP COR IVA OUR IND COM ", CP=" OTI DSP COR IVA OUR IND COM "', 'Server': 'BWS/1.1', 'Set-Cookie': 'BAIDUID=E577CD647F2B1CA6A7C0F4112781CAF9:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, BIDUPSID=E577CD647F2B1CA6A7C0F4112781CAF9; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, PSTM=1611998826; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, BAIDUID=E577CD647F2B1CA65749857950B007E4:FG=1; max-age=31536000; expires=Sun, 30-Jan-22 09:27:06 GMT; domain=.baidu.com; path=/; version=1; comment=bd, BDSVRTM=0; path=/, BD_HOME=1; path=/, H_PS_PSSID=33423_33516_33402_33273_33590_26350_33568; path=/; domain=.baidu.com, BAIDUID_BFESS=E577CD647F2B1CA6A7C0F4112781CAF9:FG=1; Path=/; Domain=baidu.com; Expires=Thu, 31 Dec 2037 23:55:55 GMT; Max-Age=2147483647; Secure; SameSite=None', 'Strict-Transport-Security': 'max-age=172800', 'Traceid': '1611998826055672090616191042239287929930', 'X-Ua-Compatible': 'IE=Edge,chrome=1', 'Transfer-Encoding': 'chunked'}200

, , , , , , ]>Process finished with exit code 0

Test2(URL自动转译):

代码1:

fb01546d2c277439be7873d24c3856a7.png

702c7c090bb195adcd8550148dbfda64.png# https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=%E7%88%AC%E8%99%AB&oq=%2526lt%253BcH0%2520-%2520Nu1L&rsv_pq=d38dc072002f5aef&rsv_t=62dcS%2BcocFsilJnL%2FcjmqGeUvo6S6XMFTiyfxi22AnqTbscZBf6K%2F13WW%2Bo&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=4&rsv_sug1=3&rsv_sug7=100&rsv_sug2=0&rsv_btype=t&inputT=875&rsv_sug4=875# https://www.baidu.com/s?wd=%E7%88%AC%E8%99%ABimport requests

# 参数自动转译

url = "http://www.baidu.com/s?wd=爬虫"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36"}

response = requests.get(url, headers=headers)

data = response.content.decode()

with open('baidu.html', 'w', encoding="utf-8")as f:

f.write(data)

汉字参数自动转译

返回:

成功返回并生成文件,此时汉字作为参数实现了自动转译。

5d233c2f84c8f3cc6d939e79dfe7bcc1.png

代码2:

fb01546d2c277439be7873d24c3856a7.png

702c7c090bb195adcd8550148dbfda64.png# https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=%E7%88%AC%E8%99%AB&oq=%2526lt%253BcH0%2520-%2520Nu1L&rsv_pq=d38dc072002f5aef&rsv_t=62dcS%2BcocFsilJnL%2FcjmqGeUvo6S6XMFTiyfxi22AnqTbscZBf6K%2F13WW%2Bo&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=4&rsv_sug1=3&rsv_sug7=100&rsv_sug2=0&rsv_btype=t&inputT=875&rsv_sug4=875# https://www.baidu.com/s?wd=%E7%88%AC%E8%99%ABimport requests

# 参数自动转译

url = "http://www.baidu.com/s"parmas = {'wd': '爬虫',

}

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36"}

response = requests.get(url, headers=headers, params=parmas)

data = response.content.decode()

with open('baidu1.html', 'w', encoding="utf-8")as f:

f.write(data)

字典自动转译

返回:

成功返回并生成文件,此时字典作为参数实现了自动转译。

05d259895ab88677b61edf862625e693.png

注:

发送POST请求和添加参数requests.post(url, data=(参数{}), json=(参数))

Test3(json):

代码:# https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=%E7%88%AC%E8%99%AB&oq=%2526lt%253BcH0%2520-%2520Nu1L&rsv_pq=d38dc072002f5aef&rsv_t=62dcS%2BcocFsilJnL%2FcjmqGeUvo6S6XMFTiyfxi22AnqTbscZBf6K%2F13WW%2Bo&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=4&rsv_sug1=3&rsv_sug7=100&rsv_sug2=0&rsv_btype=t&inputT=875&rsv_sug4=875# https://www.baidu.com/s?wd=%E7%88%AC%E8%99%ABimport requests

import json

url = "https://api.github.com/user"#这个网址返回的内容不是HTML,而是标准的json

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36"}

response = requests.get(url, headers=headers)

# str

data = response.content.decode()

print(data)

# str --> dict

data_dict = json.loads(data)

print(data_dict["message"])

# json()会自动将json字符串转换成Python dict list

data1 = response.json()

print(data1)

print(type(data1))

print(data1["message"])

返回:E:\python\python.exe H:/code/Python爬虫/Day04/03-requests_use3.py

{  "message": "Requires authentication",  "documentation_url": "https://docs.github.com/rest/reference/users#get-the-authenticated-user"}

Requires authentication

{'message': 'Requires authentication', 'documentation_url': 'https://docs.github.com/rest/reference/users#get-the-authenticated-user'}Requires authentication

Process finished with exit code 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java编程实现素数环_结对编程(JAVA实现)

项目成员:黄思扬(3117004657)、刘嘉媚(3217004685)二、PSP表格PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)Planning计划6040 Estimate 估计这个任务需要多少时间6040Development开发14401505 Analysis 需求分析3015 Design Spec 生成设计文档…

java版的中世纪战争_世界战争英雄设置-火焰纹章英雄英雄地图及AI命令设置

英雄地图及AI命令设置游戏中练级塔中的AI设置和故事地图中的一样,所以如果故事地图中的AI是主动出击的,那练级塔一样的地图也是主动出击。故事地图中配置有5个敌人,在练级塔中也一样会配置5个敌人。不同的是职业可能会发生变化,但…

python pip安装依赖的常用软件源

目录 引言 一、什么是镜像源?​​​​​​​ 二、清华源 三、阿里源 四、中科大源 五、豆瓣源 六、更多资源 引言 在软件开发和使用过程中,我们经常需要下载和更新各种软件包和库文件。然而,由于网络环境的限制或者服务器的负载&#…

java虚拟机规范 51cto_java虚拟机

最近学习java虚拟机做了一些整理,会陆续发完。Java虚拟机一、概念:当我们谈到java虚拟机的时候,有可能指下面3个方面:1):抽象java虚拟机的规范。2):一个java虚拟机具体的实现。------实现是指:实…

ipv6+ssh+java_IPv6的本地联网地址计算方法详解

IPv6的世界里,如果DHCP6和SLACC这两位大佬都为没有为可怜的网卡分配IP地址,也没有人为网卡设置静态的IP地址,系统就会为网卡计算一个IPv6的网址来。这样的网址只能在本地使用,不得路由,所以,被称为“link-l…

java互斥锁的实现原理_java-深入分析synchronized原理

互斥锁互斥锁futex,全拼fast userspace mutexes,直翻为快速用户空间互斥器,它是我们上层应用实现锁的最常用方法。futex是一块所有进程都可以访问的内存,是通过cpu的原子操作修改内存中的值来尝试获取琐,如果没有竞争&…

京东开普勒php接口,IOS菜鸟初学第十五篇:接入京东开普勒sdk,呼起京东app打开任意京东的链接-Go语言中文社区...

我之前写了一篇关于接入京东联盟sdk的文章,但是最近,由于这个原因,如下图导致需要重新集成京东的sdk,但是由于某种原因,因为android和ios端不统一,android接入的是京东开普勒的SDK,这次为了统一…

oracle安装过程掉电,Oracle数据库掉电后ORA-01172磁盘坏块解决方法

由于服务器突然掉电,重启机器后发现数据库无法启动。数据库版本 Oracle10201,OS REDHAT 5.4数据库无归档,无备份 [oraclehuna由于服务器突然掉电,重启机器后发现数据库无法启动。数据库版本 Oracle10201,,O…

linux删除了mount目录,Linux记录-分区(df/fdisk/mount/umount/fuser)

1.查看磁盘挂载(df -TH)2.卸载umount /dev/vdb13.查杀用户进程(fuser -m -v -i -k /dev/vdb1)4.再次卸载umount /dev/vdb1,并查看挂载信息df -TH5.删除分区(fdisk /dev/vdb m d 1 d w)6.查看分区(fdisk -l,没有Start-End磁盘分区表示可用)7.添加分区(fdi…

linux中pak命令,如何在Linux系统中安装Flatpak

选择你的Linux发行版快速安装Flatpak及使用Flatpak。支持Ubuntu、Fedora、Red Hat Enterprise Linux、Deepin、Endless OS、Linux Mint、openSUSE、Arch、Debian、CentOS、Gentoo、Solus、Alpine、Mageia、Pop!_OS、elementary OS、Raspbian。以下为你逐一介绍如何在这些Linux版…

ubuntu 改linux密码忘了怎么办,Ubuntu 14.04忘记root密码的解决方法

电脑20多天没用,忘记Ubuntu 14.04 root密码了,下面是在网上找到的一个解决办法,其它的和这个也大概相同。因为其中有些缺漏,没能给我解决问题。通过分析最终问题还是解决了,现解决方案的关键点记录一下。希望能方便到其…

linux设置历史命令保留数目限制,linux下修改history命令保存条数

在linux系统下、history命令会保存多少条命令呢?曾在一本书上说,如果注销系统,那么会将所有的历史命令都定入到~/.bash_history,但只保留1000条命令(这个是由默认的shell变量所设置了的)但是为什么我们执行history命令后会出现大于1000条的历…

android 手机壁纸源码,Android工程实现换壁纸功能【附源码】

最近工作要实现换壁纸小功能,将代码做成demo发出来没有采用zip格式换肤,因为只是更换一张图片背景1.将三张图放入drawable-hdpi,我放的是480*800的2.用sharedPreference存取皮肤的id,以便于下次启动的时候根据id来选择用哪个皮肤,在onresume()里刷新皮肤3.存到sharedPreference…

android webview 加载本地,webview加载本地资源的各种尝试

1.webview 打开sd卡上的静态html文件 ,js文件既然放在assets文件夹下能找到,那能通过放在sd卡,能加载吗?答:事实证明,是没有用的。2.既然能拿到html的数据,那我们是不是重写html的script的tag的…

apple手表android手机,Apple Watch 4发布了,安卓手机用户如何选择呢?

Apple Watch 4发布了,安卓手机用户如何选择呢?2018年09月13日 17:40作者:黄页编辑:黄页分享一年一度的“科技界春晚”苹果新品发布在今天凌晨举行。苹果带来了新一代的智能手表——Apple Watch Series 4系列。作为“课代表”,科技…

android投屏到电视机,华为手机如何投屏到电视机上?按步骤,1分钟搞定手机投屏电视机...

现在,越来越多的人开始用上了华为手机,几乎人手一台。在平时学习、工作中,我也经常使用华为手机来处理、完成很多事项、任务,例如把手机投屏到电视机上。除了满足学习、工作需求,我也经常把手机投屏电视来看视频、玩游…

html语言可以干什么,JavaScript语言能做什么?

JavaScript是除了HTML和CSS之外,万维网的核心技术之一。JavaScript支持交互式web页面,是web应用程序的重要组成部分。绝大多数网站都使用它,主要的网络浏览器都有专门的JavaScript引擎来执行它。JavaScript(简称“JS”) 是一种具有函数优先的…

html获取当前二级域名,列举某域名下所有二级域名的方法总结

鬼仔注:本文为总结文,转载请注明来源( http://huaidan.org )这里介绍三种列举某域名下所有二级域名的方法,有知道其他方法的请到 http://huaidan.org/archives/1088.html 留言进行补充~谢谢。1、命令行下列举此方法好像是hoky很久以前写的&am…

html5绘制矩形动画,HTML5下绘制矩形教程

绘制矩形上一节,我们使用lineto()方法绘制一个封闭的矩形。其实,canvas的api提供了rect()方法可以绘制矩形。rect()方法是路径方法,它会把指定的矩形添加到当前路径的子路径中。它只添加路径,绘制图形还是由stroke()或fill()方法完…

html免费天气预报代码,免费自我定制天气预报代码

免费自我定制天气预报代码(2010-06-15 22:03:35)标签:昔阳天气预报一乌海天气预报一杂谈今晚蚊子又发现一个天气预报,在别人博客上看见的,昔阳天气预报一周,觉得还不错,查看了一下源代码,把怎么弄的方法告诉大家,南靖天气预报一周,其实没什么技术含量,很简单的,就是…