赞
踩
本片文章主要记录最近所学基础内容,日后会有补充。
import requests r=requests.get('http://httpbin.org/get') r=requests.post('http://httpbin.org/post') r=requests.put('http://httpbin.org/put') r=requests.delete('http://httpbin.org/delete') r=requests.head('http://httpbin.org/head') r=requests.options('http://httpbin.org/options') print(r.text) """ 结果:这里只贴了第一个的,其他自己试试(下面没给结果的代码,主要是因为结果内容过多,可以自己跑一边) { "args": {}, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Host": "httpbin.org", "User-Agent": "python-requests/2.22.0" }, "origin": "117.32.216.103, 117.32.216.103", "url": "https://httpbin.org/get" } """
import requests
r=requests.get('http://www.baidu.com') #以get方法请求网页
print(type(r)) #结果:<class 'requests.models.Response'>
print(r.status_code) #状态码 200表示成功
print(type(r.text)) #<class 'str'>
print(r.cookies) # 打印cookie信息
print(r.url) #结果:https://www.baidu.com/
print(r.headers) # 打印头信息
print(r.content) #以字节流形式打印
print(r.text) #以文本形式打印网页源码
import requests r=requests.get('http://httpbin.org/get?name=zhang&age=18') print(r.text) #这个网址是专门用来测试各种请求的,所以可以不加headers """ 结果 { "args": { "age": "18", "name": "zhang" }, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Host": "httpbin.org", "User-Agent": "python-requests/2.22.0" }, "origin": "117.32.216.103, 117.32.216.103", "url": "https://httpbin.org/get?name=zhang&age=18" }"""
import requests
data={
'name':'zhang', #注意逗号
'age': '18'
}
r=requests.get('http://httpbin.org/get',params=data)
print(r.text) #结果同上
import requests
r=requests.get('http://httpbin.org/get')
print(r.json())
print(type(r.json()))
"""结果
{'args': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.22.0'}, 'origin': '117.32.216.103, 117.32.216.103', 'url': 'https://httpbin.org/get'}
<class 'dict'> json()方法把str转成dict型
"""
import requests
r=requests.get('https://github.com/favicon.ico')
with open('D:/favicon.ico','wb') as f: #注意路径和扩展名
f.write(r.content) #wb是以二进制写入文件,content是二进制流
所以,content可以用来保存图片,音频,视频等
import requests
r=requests.get('https://zhihu.com/explore')
print(r.status_code) #400 错误请求
加上headers之后就可以了
import requests
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
} #把headers存成字典,方便管理;字典名可以改动
r=requests.get('https://zhihu.com/explore',headers=headers)
print(r.status_code) #200 成功
上面的User-Agent可以在网页源码的Network下找到:
当然headers还可以加其他内容
import requests
da={
'name':'yu', #注意逗号分隔
'age':18
} #保存为字典
r=requests.post('https://httpbin.org/post',data=da) #传参,和GET的params分清楚
print(r.text)
import requests da={ 'name':'yu', 'age':18 } #data传入字典 r=requests.post('https://httpbin.org/post',data=da) print(r.text) dat=(('na','meng'),('na','men')) r=requests.post('https://httpbin.org/post',data=dat) #data传入元祖 print(r.text) """ 这里我只放了不同的地方 "form": { "na": [ "meng", "men" ] },""" data=(('na','meng'),('neee','menggdfgg')) #data传入元祖的第一个值不同时和字典没区别 r=requests.post('https://httpbin.org/post',data=data) print(r.text)
有的网站需要上传文件时,也可以用requests完成
import requests
files={'wenjian':open('D:/favicon.ico','rb')} #注意路径和打开方式,r不行
r=requests.post('http://httpbin.org/post',files=files)
print(r.text)
"""
"files": {
"wenjian": "data:application/octet-stream;base64,.....Rf/FRUX/xUVF/8VFRf/FRA="
}, #它没有像data一样传入form,而是在files字段里
"form": {}, #结果里省略了很多,自己跑一遍
"""
cookies的作用是维持登陆状态,所以在需要登陆的界面,我们就要传递cookies值
我们先登陆一个网址,这里我用的是知乎,然后在Network下找到Cookies和User-Agent的值,复制到headers里,就可以请求网页看见登陆后的界面了
import requests
headers={
'cookie': '_xsrf=0lSl6Q1K2BTD0p6PtZ7i5MXhvFloFdpo; _zap=e9af415b-23bf-47b3-b11b-c04553c19a77; d_c0="AHBv5MBilQ-PTiHu5txEdg-bXz9GFtmdtRg=|1560503146"; q_c1=578bb87686ba49ef9d6b1abd137e86e9|1563422369000|1563422369000; __utma=51854390.1797018928.1563422372.1563422372.1563422372.1; __utmz=51854390.1563422372.1.1.utmcsr=zhihu.com|utmccn=(referral)|utmcmd=referral|utmcct=/question/330333967; __utmv=51854390.100-1|2=registration_date=20180429=1^3=entry_date=20180429=1; tgw_l7_route=578107ff0d4b4f191be329db6089ff48; capsion_ticket="2|1:0|10:1563540046|14:capsion_ticket|44:ZjM4ZDU0Nzk4ZmJjNDFjNzk3MGRmMzdhZTMwNDE1ZGY=|4fcd7ab9ef1a812d93fb0a95a9a7c7fe76e7dbd0f143973febece205e957f8b1"; z_c0="2|1:0|10:1563540060|4:z_c0|92:Mi4xbGFTLUJRQUFBQUFBY0dfa3dHS1ZEeVlBQUFCZ0FsVk5YQWdmWGdCTGxGelhaclR6VnVXRnRKQ3RXMVJ4cE16TFdB|21dc1ae7ee6d798243f8e6fdd0e14f99d8fba00ad00e2d226bf03b16b291d7e3"; tshl=; tst=r',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
r=requests.get('https://www.zhihu.com',headers=headers)
print(r.text)
这里的Cookies和User-Agent可以换成自己的
为了确保请求的是同一人的网站,我们可以设置Session对象,它常用来模拟登陆成功后的下一步操作,具体后面再讲,我还没用过!!!!!!!!!!!
我们可以在GET请求中加入verify参数(认证证书的开关),默认为True
import requests
r=requests.get('https://www.12306.cn',verify=False)
print(r.status_code)
"""
C:\Users\DELL\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\connectionpool.py:851: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning) 结果里有个警告
200
"""
我们可以忽略警告或者指定crt,key两个文件,并指定路径,传给cert作为证书
爬虫发送请求很快很频繁,容易被服务器识别,为了解决这个问题,我们可以设置代理来解决
没用过,以后写
有时因网络或服务器问题甚至无响应时,我们会很费时间,所以timeout参数就很重要了,timeout默认为None,这意味着无时间限制,给定数值后,若在规定时间内没完成发送请求和响应的任务,就会返回超时错误,这有助于我们提高爬虫效率
我们用请求库得到的是包含渲染的HTML文本,里面有很多我们不需要的内容,因此就需要处理工具选出我们想要的东西,正则是一个强大但不方便的工具。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。