Python爬虫中的get和post请求

前言

Python爬虫请求数据有get和post两种请求方式,也许读者对于它们的应用已经掌握到炉火纯青的地步了,但是关于它们的基本语法是否了解吗?

文章目录

  • Python爬虫中的get和post请求
    • 1.明白urllib模块和requests模块
    • 2.urllib中的get和post请求
      • 2.1 get请求
      • 2.2 post请求
    • 3. requests中get和post请求
      • 3.1 get请求
      • 3.2 post请求
    • 4.总结

1.明白urllib模块和requests模块

Python爬虫经常使用的两个模块也就是urllib模块和requests模块了,两个模块都可以得到数据,但是相对而言,requests模块更方便,同样的效果,代码量没有urllib模块那么多。

2.urllib中的get和post请求

首先,我们看一下基本语法,也就是urllib.request.urlopen()
urllib.request.urlopen(url,data=None,timeout)
本来后面还有一些参数的,但是后面的很少用到,小编在这里就不讲了。

data这个参数是可选的,,并且它是字节流编码的格式,也就是bytes类型,需要通过bytes()方法转换。另外,如果传递了这个参数,表明已经是post请求了。

timeout参数用于设置超时时间,单位为秒,也就是如果请求超过这个设置的时间,就会抛出异常。

2.1 get请求

最简单的请求莫过于get请求了,看过我的文章都知道,我的有一篇文章是关于爬取漫客栈里面的漫画的;

from urllib import requesturl='https://www.mkzhan.com/search/?keyword=%E6%96%97%E7%A0%B4%E8%8B%8D%E7%A9%B9'
response=request.urlopen(url=url)
print(response.read().decode('utf-8'))

运行结果:


但是,这样并不安全,很容易被服务器查到这是在爬虫,所以,为了欺骗服务器,我们可以使用urllib.request.Request() ,在里面添加一个请求头,模拟浏览器。
urllib.request.Request(url,data=None,headers={},method=None)
这是里面是几个常见的参数

headers参数是一个请求头,字典格式,可以通过添加User-Agent来模拟浏览器,当然,有个时候,我们没有爬到数据,也可以添加cookies、referer等,或许就可以爬到数据了。

method是一个字符串,指明请求方法,即GET、POST等

代码:

from urllib import requesturl='https://www.mkzhan.com/search/?keyword=%E6%96%97%E7%A0%B4%E8%8B%8D%E7%A9%B9'
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.3756.400 QQBrowser/10.5.4039.400'}
requests_1=request.Request(url=url,headers=headers)
response=request.urlopen(requests_1)
print(response.read().decode('utf-8'))

虽然结果还是一样的,但是这样更加安全。

2.2 post请求

比如爬取百度翻译,那是一个post请求


我们需要翻译的内容在这个网址里面,不过仅仅添加data和User-Agent,还是不能得到需要的数据的,还要添加cookie才行
代码如下:

from urllib import request,parse
import jsonurl='https://fanyi.baidu.com/v2transapi?from=en&to=zh'
headers={'cookie':'BIDUPSID=23BF0A276A7CC6017B58F438A11C7155; PSTM=1588944507; BDUSS=RrbnFrblJxQX5oM2YxajhRaTNYYy1lYzFqQmlJQ0h4TjVjSS1ySGs1aDgyOTFlRVFBQUFBJCQAAAAAAAAAAAEAAADQ51LqX7PW1q7S1LrjX2xpdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHxOtl58TrZecm; BAIDUID=AA9D7D194B94E2982169483150100C2E:FG=1; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; BDRCVFR[sK1aAlma4-c]=mk3SLVN4HKm; delPer=0; PSINO=6; H_PS_PSSID=1454_21094; BDRCVFR[S_ukKV6dOkf]=mk3SLVN4HKm; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1591172677,1591576883,1591611470,1592096843; yjs_js_security_passport=c701a6533b1c98c347f2fd1f4598c1279606c00a_1592096842_js; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1592096856; __yjsv5_shitong=1.0_7_b776c8debaf38fc99dd0cae57e2a9d7a3480_300_1592096854782_223.155.161.167_674c7d90','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.3756.400 QQBrowser/10.5.4039.400'}
data={"from": "en","to": "zh","query": "china","simple_means_flag": "3","sign": "596529.915712","token": "4edec2b90d224b4ee85055eb3909fe93","domain": "common"}
data=bytes(parse.urlencode(data),encoding='utf-8')
requests_1=request.Request(url=url,data=data,headers=headers,method='POST')
response=request.urlopen(requests_1)
dict_1=json.loads(response.read().decode('utf-8'))
print(dict_1)

运行结果:

3. requests中get和post请求

前面说的urllib模块请求数据的确比较繁琐,如添加一个请求头还需要添加urllib.request.Request()语句。但是requests模块却简单的多,上面说了那么多,requests模块两个方法就解决了,requests.get()requests.post()

3.1 get请求

基本格式如下:
requests.get(url,params=None,**kwargs)
其中params=data,也就是有个时候一个网址比较长,可以按电脑键盘的F12键,来到开发者工具,点击NetWork,点击All,找到那个网址,可以发现在请求头下面还有一个字典数据,这个就是data数据了,只不过这样的话那个网址就要改变一下了。
如,12306的车票信息

我就知道就这个了,看一下效果

import requestsurl='https://www.doutula.com/search?keyword=%E9%A9%AC%E5%8C%96%E8%85%BE'
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.3741.400 QQBrowser/10.5.3863.400'}
response=requests.get(url=url,headers=headers)
print(response.text)

这是爬取表情包的代码,这个必须添加请求头,否则会出现404错误,相比与urllib发起的get请求,requests是不是厉害一些。
运行结果:

3.2 post请求

requests的post请求基本格式如下:
post(url, data=None, json=None, **kwargs)
如:post请求得到网易云音乐的下载链接
首先,随便听一首音乐,我听得是 :victory
按电脑键盘得F12来到开发者模式,点击NetWork下面得XHR,找到如下这个网址:


参考代码如下:

import requests
from urllib import parseurl = 'https://music.163.com/weapi/song/enhance/player/url/v1?csrf_token='
data = {'params': 'PI941sjoRh2o0SQ3Ea4rSnJZ/vM7tK1aKgeJcx7t2vUIIlH9JqTBJLgBzVYsK+Y0VAh7iBRCSKPtMIZ0W6UOpPv3H3EELsx9vUnjxKMfMg13r3ohR8BARAGGEUB0IXzG+2vTdPSYHV86MwGlhFL7PA==','encSecKey': 'd8fd94dd3331f6717a5ef7f0fc3a234da2ba1be97c2d2a2702d2e865b2d4495ec21adf8fc006aee1e2d3b8d373e3df1f482af8cd92484a6eaccc11a86193012056c60fa09a5e8547e0d4c5c42c774df80214697f9bf096f45457da5cef28e4038191c55fd149d0ffcb657365aa649e42e8b0144e28fdae2595264e30e1565da4'}
headers = {"content-type": "application/x-www-form-urlencoded",#"cookie": "JSESSIONID-WYYY=fC4sb4WIM9ylu9RkwT8uu4eq1EzkKw7yw%5CCz6GtExTZdSQQMjKq3cMrZrYeBGhTvMY1aJ1bINwjUg1qu%5Cc22kH5hrQk7nrHzVG28%5CvjnAMH2%5C1xHgrQmxiVZlGJnyI3T90H1dqs3mwli0F4aunZgpodKXZ7MI4%5CtYCR2Du1XZcXiVAyT%3A1598417345828; _iuqxldmzr_=32; _ntes_nnid=5cf082ea2b119cc75f12dcbdc6a5c19a,1598415545891; _ntes_nuid=5cf082ea2b119cc75f12dcbdc6a5c19a; WM_NI=g9Zllc7mjJqIpiF5MK1n1gJxEWVVFjqI9jCQ5CsVKzdNFdC01RvJ4dTS%2FP35wejF8S9osxhLTay6hvXGo97cdQANz3m7Db%2FKQJgwZl5u5NpM9c1RCXFTeCEupppKHCDjd2E%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6eed7d965b1b1a6d8bc68bc8a8bb6d54a939a8eaeb54286b68b92f86f8bef97b1d62af0fea7c3b92aa5e7968def69f5b3a6abf443b4b78ad6d041f3b2ff88c97487899ab7c562b397f78bc25bf79dbdb7ca72a8928a85c23cf38ebaabb770988de1b1b23fb5bba6a7bb59fbb1bd99eb4898bfb7d7eb7e9c99a1dab669a88f8faff939afe98c83ae419396a998d968f7abfbaff347fbbdffb3c254868caba4c87fb4b0c0accb4988b6acd3c837e2a3; WM_TID=xMoHBJ%2FSDwNFFVABQQJvJBiR%2B%2BfYgIeD; playerid=47887242","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"}response = requests.post(url=url,headers=headers ,data=parse.urlencode(data))
print(response.text)

运行结果:

4.总结

这是小编花了一个上午写的一篇文章,虽然写的内容还有待改进,但是对于不是很难的爬虫还是基本使用的,如果读者觉得这篇文章还行!记得点赞,小编在这里谢谢大家了。

Python爬虫的两种请求方式,读者都了解吗?相关推荐

  1. ajax onload怎么用,Ajax中onload和onreadystatechange两种请求方式的区别

    一. onreadystatechange 1. XMLHttpRequest对象有一个属性readyState,将其(xhr.readyState)打印后发现.进入onreadystatechang ...

  2. Ajax 两种请求方式的区别onload和onreadystatechange

    一. onreadystatechange 1. XMLHttpRequest对象有一个属性readyState,将其(xhr.readyState)打印后发现.进入onreadystatechang ...

  3. 浅谈CORS的两种请求方式

    先附上HTTP中文开发手册链接:http://www.php.cn/manual/view/35588.html 参考文章:https://blog.csdn.net/qq_34125349/arti ...

  4. Ajax的get/post两种请求方式及ajax封装函数

    AJAX基本用法 引言 Ajax是浏览器提供的一套方法,可以用来实现页面无刷新更新数据,提高用户体验.主要有GET和POST两种请求方式. 1. GET请求处理 GET请求会将数据放到URL后面 GE ...

  5. 记录一下前端针对下载文件的两种请求方式

    之前做了很多下载文件的接口都没习惯进行记录,现在开始规范自己,让自己养成一个随手保存代码的好习惯.写的不足之处请指出,会改正. 说一下前端下载文件常用的两种方式,get请求和post请求 get请求相 ...

  6. http消息当中,post和get两种请求方式的区别

    上周尼玛哥一直在看有关微信小程序,订阅号,服务号,等微信的应用,没来的及继续学习,今个学习到javaweb 的servlet ,觉得有个地方,可以大家稍微注意一下,就是消息请求当中,GET 与 POS ...

  7. get post请求区别_网页常见的两种请求方式Get和Post

    除了获取网页还有哪些网络请求的知识需要我们掌握呢? 我们请求网页,平时看到的是浏览器访问,实际在实现中会有不同的请求方式的,那么请求网页的方式最常用到的是Get和Post. Get和Post的区别 当 ...

  8. python爬虫:两种方法模拟登录博客园

    第一方法用第三方库(requests):参考http://www.mamicode.com/info-detail-1839685.html 源代码分析 博客园的登录页面非常简单,查看网页源代码,可以 ...

  9. Python多线程的两种实现方式

    Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装.绝大多数情况下,我们只需要使用threadi ...

最新文章

  1. linux 根目录爆满 解决 /dev/mapper/centos-root 100%问题
  2. int*p[ ]与int(*p)[ ]的不同
  3. 远程登录的机器不是域控制器的方法
  4. 德鲁克的《卓有成效的管理者》
  5. 专题导读:教育大数据
  6. QML工作笔记-NumberAnimation、RotationAnimation、Timer综合使用
  7. Axis2联接WCF(比较完整的版本)
  8. Learn For Flutter
  9. AJAX做一个动态进度条
  10. 微机8088主板图绘制
  11. QT+SQL Server实现车辆管理系统 -代码具体实现
  12. UVA 1359 POJ 3522 Slim Span(最小生成树kruskal)
  13. debian7 修改系统时间
  14. 计算机如何去除桌面名称阴影,去除桌面图标阴影 - 桌面图标有蓝色阴影怎么去掉 - 安全专题...
  15. GIS开发:Contour(轮廓线)
  16. 【Linux云计算架构:第三阶段-Linux高级运维架构】第26章——tcp三次握手四次挥手及在局域网中使用 awl伪装MAC地址进行多线程SYN攻击
  17. 第一序列任小粟的能力_第一序列:上进青年任小粟得知世界真相后,却加倍强迫六元学习?...
  18. 证券投资学原理(韩德宗 朱晋)知识点
  19. wiki服务器网页地址,搭建个人wiki站点
  20. 关于lib文件的介绍

热门文章

  1. UNITY 3D 导入raw文件创建地形以后无法绘制凹陷
  2. 关于软件开发,都应该知道的10个常识
  3. jdbc driver oracle,Driver class 'oracle.jdbc.driver.OracleDriver' could not be found
  4. 如何用社交媒体开发客户?这一篇文章告诉你
  5. SpringBoot+Vue车辆充电桩系统设计与实现
  6. buuctf小明的保险箱
  7. R语言批量将PDF中表格,转化为excel
  8. 录ppt的时候录光标_课程录制时对PPT的几种处理方法
  9. element table row-style 实现列颜色区分 以及 js生成随机色,避免相近色
  10. 快速排序的原理以及时间复杂度