爬虫学习三(requests)

requests库:

  安装和文档地址:

    pip3 install requests

  中文文档:https://2.python-requests.org//zh_CN/latest/index.html

  GitHub地址:https://pypi.org/project/requests/

基本使用:

发送GET请求

  发送get请求,直接调用‘requests.get’ 就可以了,想要发送什么类型的请求, 就调用什么方法。


import requests

# 传参数
params = {
'wd': '中国'
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
}
response = requests.get("https://www.baidu.com/s", params=params, headers=headers)
with open('baidu.html', 'w', encoding='utf-8') as fp:
fp.write(response.content.decode('utf-8'))

#response的一些属性
print(response.text) #自己解码,不准确 查看响应内容和content一样
# print(type(response.text)) <class 'str'>
# print(response.text)
print(type(response)) #bytes类型
print(response.content.decode('utf-8'))
#查看完整的url地址
print(response.url) # https://www.baidu.com/
# 查看响应头字符串的编码
print(response.encoding) #ISO-8859-1
# 查看响应的
print(response.status_code) #200
# 返回为字典的形式
print(response.json())

response.text 和 response.content的区别:

  1. response.content : 这个是直接从网络上面抓取的数据。没有进行任何解码。所以是一个bytes类型, 其实在硬盘上和网路上传输的字符串都是bytes类型。

  2. response.text :  这个是str的数据类型, 是requests库将response.content 进行解码的字符串,解码需要指定一个编码方式, requests 会根据自己的猜测来判断编码的方式。所以有的时候可能会猜测错误,就会导致解码产生乱码,这时候应用 ‘response.content.decode('utf-8')’ 进行手动解码。

发送POST请求:

  1.就是把上面的get改成post就行了。

  2.已拉勾网为例:

  

from urllib import request
import requests


data = {
    'first': 'true',
    'pn': 1,
    'kd': 'python'
}
headers = {
    'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
    'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='
}

response = requests.post('https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=flase', data=data, headers=headers)

print(response.text)
print(response.url)

 使用代理:

  使用requests 添加代理也非常简单, 只要在请求的方法中(比如 get 或者 post )传递 proxies 参数就行了,代码如下:

import requests
proxy = {
    "http": '119.101.112.219:9999'
}
response = requests.get("http://httpbin.org/ip",proxies=proxy)
print(response.text)

结果:
{
  "origin": "119.101.112.219, 119.101.112.219" # 目标服务器能识别的就是你这个代理的IP地址
}

cookie:

  如果一个响应中包含 cookie 那么可以利用 cookie 属性 拿到这个值: 

from urllib import request
import requests
response = requests.get("http://www.baidu.com")
print(response.cookies.get_dict())# 获取cookie 信息, get_dict() 是以字典的方式返回
# 结果:
#{'BDORZ': '27315'}

session:

  之前使用的urllib 库, 是可以使用opener发送多个请求, 多个请求之间是可以共享 cookie 的,那么 如果使用requests, 也要达到共享 cookie 的目的, 那么就要使用requests 库给我们提供的 session 对象。注意,这里的session 不是web开发中的那个 session,这个地方只是一个会话的对象而已,以人人网为例,使用requests 来实现,代码如下:

 如果想要 在多次请求中共享 cookie 那么就应该使用 session 

import requests

url = 'http://www.renren.com/PLogin.do'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
}
data = {
        'email': '970138074@qq.com',
        'password': 'pythonspider'
    }
# 创建session对象
session = requests.Session()

# 登入
session.post(url, data=data, headers=headers)

# 访问主页 看看是否登入成功

response = session.get('http://www.renren.com/880151247/profile')
with open('zhuye.html', 'w', encoding='utf-8') as fp:
    fp.write(response.text)

进入你的 ‘zhuye.html’ 的目录下 双击zhuye.html 是否能跳转到 大鹏的主页,如果跳转就说明 上面的代码是对的

posted @ 2019-05-04 18:01  QQmini  阅读(270)  评论(0编辑  收藏  举报