找回密码
 会员注册
查看: 31|回复: 0

4.网络爬虫—Post请求(实战演示)

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
64454
发表于 2024-9-2 23:32:25 | 显示全部楼层 |阅读模式
网络爬虫—Post请求实战演示POST请求GET请求POST请求和GET请求的区别获取二进制数据爬[百度官网](https://www.baidu.com/)logo实战发送post请求百度翻译实战使用session发送请求模拟登录17k小说网常见问题前言:📝​📝​此专栏文章是专门针对Python零基础爬虫,欢迎免费订阅!📝​📝第一篇文章获得全站热搜第一,python领域热搜第一,欢迎阅读!🎈🎈欢迎大家一起学习,一起成长!!💕💕:悲索之人烈焰加身,堕落者不可饶恕。永恒燃烧的羽翼,带我脱离凡间的沉沦。POST请求Python中的POST请求是HTTP协议中的一种请求方法,用于向服务器提交数据。与GET请求不同,POST请求将数据封装在请求体中,而不是在URL中传递。通常情况下,POST请求用于向服务器提交表单数据、上传文件等操作。示例代码如下:importrequestsurl='http://example.com/api/data'data={'name':'John','age':25}response=requests.post(url,data=data)print(response.text)1234567这个例子中,我们向http://example.com/api/data这个URL发送了一个POST请求,请求体中包含了name和age两个字段的数据。服务器接收到请求后,可以根据数据进行相应的处理,并返回响应结果。response.text表示服务器返回的文本内容。GET请求Python中的GET请求也是HTTP协议中的一种请求方法,用于向服务器请求数据。与POST请求不同,GET请求将数据以查询字符串的形式附加在URL后面,而不是封装在请求体中。通常情况下,GET请求用于向服务器请求某个资源,比如获取网页、图片、视频等。示例代码如下:importrequestsurl='http://example.com/api/data?id=123'response=requests.get(url)print(response.text)12345这个例子中,我们向http://example.com/api/data这个URL发送了一个GET请求,查询字符串中包含了id=123的参数。服务器接收到请求后,根据参数返回相应的数据,response.text表示服务器返回的文本内容。POST请求和GET请求的区别(1)post请求更安全不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中,get请求的是静态资源,则会缓存,如果是数据,则不会缓存(2)post请求发送的数据更大get请求有url长度限制,http协议本身不限制,请求长度限制是由浏览器和web服务器决定和设置(3)post请求能发送更多的数据类型get请求只能发送ASCII字符(4)传参方式不同get请求参数通过url传递,post请求放在requestbody中传递(5)get请求产生一个TCP数据包;post请求产生两个TCP数据包get请求,浏览器会把httpheader和data一并发送出去,服务器响应200返回数据;post请求,浏览器先发送header,服务器响应100continue,浏览器再发送data,服务器响应200返回数据获取二进制数据爬百度官网logo实战快速找到图片链接位置右键空白处-->检查-->鼠标附魔-->点击图片找到对应的链接需要确认和检查图片链接是否完整确认目标!!!右键空白处-->检查-->鼠标附魔-->点击图片找到对应的链接点开链接后,里面有三条链接,到底哪一个是我们需要的,我们需要一个一个点开看。接着就是敲代码,把照片获取到本地。代码如下:importrequests#确认数据的链接url='https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png'#headers90%情况下是不需要的,特别是图片(当获取不到图片数据的时候才加上请求头数据)#print(image.content)#获取响应对象的进制数据data=requests.get(url)f=open("百度logo.png",'wb')#把数据保存到文件中f.write(data.content)f.close()1234567891011121314导入requests库,用于发送HTTP请求和获取响应数据。定义一个URL变量,表示要下载的图片的链接。使用requests.get()方法发送GET请求,获取图片的二进制数据。打开一个文件(这里是百度logo.png),使用wb模式打开,表示以二进制写入模式打开文件。将获取到的二进制数据写入文件中。关闭文件。最终,运行这段代码会在当前目录下生成一个名为百度logo.png的图片文件,内容为从指定URL下载的图片。发送post请求百度翻译实战1.确认爬虫的流程(获取数据的时候,根据流程操作)找数据(先到网页源代码里面找数据)如果数据不在网页源代码数据在哪里?如何快速找到数据并确认它?三种方法筛选刷新搜索筛选:刷新搜索找到数据了!!!通过三种方式找到数据,接下来写代码拿出我们想要的数据importrequestsurl='https://fanyi.baidu.com/v2transapi?from=zh&to=en'headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/111.0.0.0Safari/537.36','Cookie':'BIDUPSID=12D9950A2673951B2629A85BC6A1EA8ESTM=1677676852;BAIDUID=12D9950A2673951B0F0D1B4587FF5EA1:FG=1;BDUSS_BFESS=JXTmpvVEtVSWxtRTVwY3dJbXA1b2h5Vk5xeVQzLTlFS25tblUyQWl3Vm9uRHBrSUFBQUFBJCQAAAAAAAAAAAEAAADA4O~RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgPE2RoDxNkdD;BDORZ=FFFB88E999055A3F8A630C64834BD6D0;APPGUIDE_10_0_2=1;REALTIME_TRANS_SWITCH=1;FANYI_WORD_SWITCH=1;HISTORY_SWITCH=1;SOUND_SPD_SWITCH=1;SOUND_PREFER_SWITCH=1;BA_HECTOR=25202k0g2ga524210k2ha08k1i1d89t1m;ZFY=rLRjwO2KKciLyDaiAWkUkVrYFXcodJI9dLOc263KUTI:C;BAIDUID_BFESS=12D9950A2673951B0F0D1B4587FF5EA1:FG=1;BDRCVFR[bPTzwF-RsLY]=mk3SLVN4HKm;H_PS_PSSID=SINO=5;delPer=0;BCLID=11200678177449842076;BCLID_BFESS=11200678177449842076;BDSFRCVID=WOkOJexroG07VWbfQIXxU9c9ruweG7bTDYrEOwXPsp3LGJLVFe3JEG0Pts1-dEu-S2OOogKKQgOTHRkF_2uxOjjg8UtVJeC6EG0Ptf8g0M5;BDSFRCVID_BFESS=WOkOJexroG07VWbfQIXxU9c9ruweG7bTDYrEOwXPsp3LGJLVFe3JEG0Pts1-dEu-S2OOogKKQgOTHRkF_2uxOjjg8UtVJeC6EG0Ptf8g0M5;H_BDCLCKID_SF=tRAOoC_-tDvDqTrP-trf5DCShUFsLMRWB2Q-XPoO3KtbSx3PblQzWbkAef-8bJQf5mkf3fbgy4op8P3y0bb2DUA1y4vp0tLeWeTxoUJ2-KDVeh5Gqq-KXU4ebPRiQ4b9QgbNBhQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0HPonHj_KjToL3q;H_BDCLCKID_SF_BFESS=tRAOoC_-tDvDqTrP-trf5DCShUFsLMRWB2Q-XPoO3KtbSx3PblQzWbkAef-8bJQf5mkf3fbgy4op8P3y0bb2DUA1y4vp0tLeWeTxoUJ2-KDVeh5Gqq-KXU4ebPRiQ4b9QgbNBhQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0HPonHj_KjToL3q;Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1679039134,1679143234,1679204636,1679231203;Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1679231203;ab_sr=1.0.1_MzRlMjk2ZGYwYzRhNzk5MGY1MjA2NDc5OWFkY2MwYjM0ZTQxOGYyYjczNWQyOTE0MWJhYTkxNmJmZWFiYTU4ZmRjZjcxZjhmZDNlZmVkYWZhMmY4MmQwYjYyYWE5M2RhYjIzMjYyNTMzNzBmYjcyMzMyNTVkMjRiMTBkZjI3MmE2YjgzNDU4YmY4Mjc5ZWRhODY1NzkxMzc5MjBiMTBhYmE0NGE0NTY2MTY5MzI2ODQ1MzQ1ZGJhYTY4YTMzOGZj','Acs-Token':'1679231203273_1679231215801_TZnmUVeLuVlVCXU675lmFL7KXT+qZWTpNkvwrKj1/azwt2t9OYJni7f/HuDsQoPprquOTaEto81VaJEnjHeY/FjtVICpqxnDHWZZbIWO5NltIttKh4Bg74eYS7b86eVzcvVgkIDn9kR9V13wNYJyyapcvo2SeSLf1OWzc9Y0Byn3v/R+0hUvgWoAd0PsAxSkwy4kv4D+aDQFmy1SwM4P9tMy010GUgQspRcT3FBQ0bFWL67oAwYBkbqrJ2+I6G0i4wh67+uBxO73nn+I3M1dH4MZml16j0bU7rzdGDf2gI6HIM2vmwuAlARmYZJvPNmiaDgnaqbImC8kfXZGptQuTMp/8MK13wJULF//+k6HxoM='}data={'from':'zh','to':'en','query':'西瓜','transtype':'translang','simple_means_flag':'3','sign':'550632.820697','token':'89c89225cdb36e24dea4bcf09eed1996','domain':'common'}rest=requests.post(url,headers=headers,data=data)trans_dict=rest.json()print(trans_dict['trans_result']['data'][0]['dst'])print(trans_dict['trans_result']['data'][0]['src'])123456789101112131415161718192021222324拿到我们的数据了使用session发送请求模拟登录17k小说网先了解本次实战目标我们的目标就是通过模拟登录然后获取账户个人主页的内容接下来开始找数据,账号密码,方便我们登录个人主页找到数据后,我们开始写代码importrequestsfromrequestsimportSessionsession=requests.Session()url="https://passport.17k.com/ck/user/login"headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/102.0.0.0Safari/537.36',}data={'loginName':'以山河作礼','password':'********'}#session对象登录,记录登录的状态html=session.post(url=url,headers=headers,data=data)print(html.json())12345678910111213141516171819运行代码,看看我们是否登录成功。看到我们的登录昵称,说明我们登录成功了,接下来我们通过代码进入个人主页importrequestsfromrequestsimportSessionsession=requests.Session()url="https://passport.17k.com/ck/user/login"headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/102.0.0.0Safari/537.36',}data={'loginName':'以山河作礼','password':'******'}#session对象登录,记录登录的状态html=session.post(url=url,headers=headers,data=data)print(html.json())#session对象的登录的状态去请求url_main='https://user.17k.com/www/'html=session.get(url_main,headers=headers)html.encoding='utf-8'print(html.text)123456789101112131415161718192021222324运行结果:我们得到了个人主页的html页面代码,在里面我们可以看到,最近阅读和最近收藏等,说明我们本次成功的获取了想要的数据。常见问题获取不到需要的数据增加cookie等其他比较重要的请求头信息获取的数据是乱码状态写Accept-Encoding容易乱码请求头里面不要写html=requests.get(url,headers=head_data)html.encoding='utf-8'#解决数据乱码12🍁🍁今日学习笔记到此结束,感谢你的阅读,如有疑问或者问题欢迎私信,我会帮忙解决,如果没有回,那我就是在教室上课,抱歉。🍂🍂🍂🍂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 00:57 , Processed in 0.997720 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表