一、cookie
-
需求:爬取人人网当前用户的相关的用户信息(个人主页中显示的用户信息)
-
http/https协议特性:无状态。
- 没有请求到对应页面数据的原因:
发起的第二次基于个人主页页面请求的时候,服务器端并不知道该此请求是基于登录状态下的请求
- 没有请求到对应页面数据的原因:
-
cookie:用来让服务器端记录客户端的相关状态。
- 手动处理:通过抓包工具获取 cookie值,将该值封装到 headers中。(不建议)
- 自动处理:
cookie值的来源是哪里?
模拟登录post请求后,由服务器端创建
-
session会话对象:
作用:- 可以进行请求的发送。
- 如果请求过程中产生了 cookie,则该 cookie会被自动存储/携带在该 session对象
- 创建一个session对象:session= requests.Session()
- 使用 session对象进行模拟登录post请求的发送( cookie就会被存储在 session中)
- session对象对个人主页对应的get请求进行发送(携带了 cookie)
import requests
from lxml import etree
def get_info():
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'
}
url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2021201231344'
data = {
'email':'181********',
'icode' :'',
'origURL':'http://www.renren.com/home',
'domain':'renren.com',
'key_id':1,
'captcha_type':'web_login',
'password':'1e03d5db8337ef3a72b7db3fc26db97a8255780a55a175f0b654438a7413863b',
'rkey':'eacfdfd459f92cfa730315cdd2c60347',
'f':''
}
#使用session模拟登录
session = requests.Session()
response = session.post(url=url,headers=headers,data=data)
print(response.status_code)
#使用携带cookie的session进行get请求,获取用户主页信息
detai_url = 'http://www.renren.com/976379599/profile'
detai_text = session.get(url=detai_url,headers=headers).text
with open('./renren.html','w',encoding='utf-8') as f:
f.write(detai_text)
if __name__ == '__main__':
get_info()
二、代理
- 什么是代理
代理服务器 - 代理的作用
- 突破自身IP访问的限制
- 隐藏自身的真实ip
- 代理相关的网站
- 快代理
- 西祠代理
- www.goubanjia.com
- 代理ip的类型
- http:应用到http协议对应的url中
- HTTPS:应用到https协议对应的url中
- 代理ip的匿名度
- 透明:服务器知道该次请求使用了代理,也知道请求对应的真实ip
- 匿名:知道使用了代理,但是不知道真实ip
- 高匿:不知道使用了代理,更不知道真实的ip
import requests
url = 'https://www.baidu.com/s?wd=ip'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'
}
page_text = requests.get(url=url,headers=headers,proxies={'https':'113.195.225.186:9999'})
page_text.encoding = 'utf-8'
page_text = page_text.text
with open('ip.html','w',encoding='utf-8') as f:
f.write(page_text)