基础爬虫框架小结——使用requests库

将前序urllib总结中的各项功能用更简单实用的requests库方法替代

七大方法之1:get()

包含了添加请求头、查看cookies、保存为html或json文件、内网认证、免费代理、ssl证书问题的代码:

import requests
import random
url="https://www.baidu.com"
url='https://www.baidu.com/s?wd=美女'
url='https://api.github.com/user'
user_agent_list=[
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1",
        "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
        "Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50"
]
headers={"User-Agent":random.choice(user_agent_list)}
#不随机就自己复制粘贴浏览器头部信息,注意与urllib不同这里headers是一个字典,且不用写request直接response=
# headers = {
#         "User-Agent": " "
#     }
#请求数据
response=requests.get(url,headers=headers)
# 1.获取请求头
request_headers = response.request.headers
print(request_headers)
# 2.获取响应头
response_headers = response.headers
print(response_headers)
# 3.响应状态码
code = response.status_code
print(code)
# 4.请求的cookie
request_cookie = response.request._cookies
print(request_cookie)
# 5.响应的cookie
response_cookie = response.cookies
print(response_cookie)
# 6.1 对于百度搜索结果获取数据并保存
data=response.content.decode('utf-8')
with open('baidu.html','w')as f:
    f.write(data)
    
#6.2 保存json数据:
#url='https://api.github.com/user'
#由于data=response.content.decode()是str类型
#因此需要str-->dict:
#第一种方法
#data_dict=json.loads(data)
#print(data_dict['message'])
#第二种方法
#json()自动将json字符串 转换成 Python dict list
data=response.json()
print(type(data))

#7. 内网认证
user=""
pwd=""
auth=(user,pwd)
response=requests.get(url,auth=auth)

# 8.免费代理
free_proxy={'http':'121.233.251.218:9999'}
response=requests.get(url,headers=headers,proxies=free_proxy)
print(response.status_code)

#9.12306的ssl问题
url='https://www.12306.cn'
#因为https是有第三方CA证书认证的
#12306虽然是https 但不是CA证书,是自己颁布的
#解决办法:告诉web 忽略证书访问
#添加参数:verify
response=requests.get(url,headers=headers,verify=False)
data=response.content.decode()
with open('ssl.html','w')as f:
    f.write(data)

七大方法之2:post()

#发送post请求
url=""
headers={}
data={

}
response=requests.post(url,data=data)

关于cookies参数——requests库的session类

#用session替代urllib的cookiejar
#session类 可以自动保存cookies===cookiesJar

session=requests.session()
#1.代码登录
login_url=""
headers={
    ""
}
login_form_data={
    "username":"",
    "pwd":"",
    "formhash":"",
    "backurl":""
}
login_response=session.post(login_url,data=login_form_data,headers=headers)

#2.登录成功之后,带着有效的cookie去访问 请求目标数据
data=session.get(url,headers=headers).content.decode()
with open('cookie2.html','w')as f:
    f.write(data)

Q:为什么不用开头获取到的cookies参数呢?
A:requests.get()中与headers类似,cookies的参数类型也要求是dict。所以也可以自己转,但很明显便捷性比以上代码差远了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值