前言:
目前各位老铁们对“url重写可以把session对象的id”大致比较关怀,姐妹们都需要了解一些“url重写可以把session对象的id”的相关文章。那么小编在网摘上搜集了一些关于“url重写可以把session对象的id””的相关资讯,希望咱们能喜欢,小伙伴们一起来学习一下吧!一、爬虫是什么
(一)爬虫定义
网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
简单地说:就是用事先写好的程序去抓取网络上所需的数据,这样的程序就叫网络爬虫。编写网络爬虫的程序员叫做爬虫工程师。
(二)爬虫分类
根据使用场景,网络爬虫可分为通用爬虫和聚焦爬虫两种。
1、通用爬虫(了解)
通用网络爬虫是捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。
2、聚焦爬虫
聚焦爬虫,是"面向特定主题需求"的一种网络爬虫程序,它与通用搜索引擎爬虫的区别在于:聚焦爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。而我们今后要学习的,就是聚焦爬虫。
(三)ROBOTS协议
ROBOTS协议:网站通过Robots协议告诉搜索引擎那些页面是可以抓取的,那些页面是不能够抓取。
例如:
二、Requests
1、requests库简介
Urllib和Requests模块是发起http请求最常见的模块。
虽然Python的标准库中urllib 模块已经包含了平常我们使用的大多数功能,但是它的 API使用起来让人感觉不太好,而Requests自称“http for Humans”,让HTTP服务人类,说明使用更简洁方便。 Requests继承了urllib的所有特性。Requests支持http连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的URL和POST数据自动编码。 requests的底层实现其实就是urllib3(urllib2的升级版---python2支持) Requests的文档非常完备,中文文档也相当不错。Requests能完全满足当前网络的需求,支持Python 2.6—3.6。
开源地址:
中文文档API:
2、安装方式
pip install requests
3、基本使用
requests发送请求
get 方法,发送get请求post方法,发送post 请求
requests响应,
例:response = requests.get()
response.text
字符串类型,通常是unicode格式,通常需要转化为utf-8格式,否则是乱码
response.content
二进制类型数据,通常转化为utf-8格式
response.status_code
获取响应状态吗
response.headers
获取响应头信息
response.cookies
获取cookie
response.url
获取请求的url地址
三、requests模块
(一)网络请求
当我们在客户端输入一个url,获取url所对应的页面内容时,其过程如下图所示。客户端发送一个请求,服务器收到这个请求后就会将请求所对应的响应返回给客户端,客户端收到这个响应将其显示出来。我们使用requests模块其实就是在模仿客户端和服务器的这个过程。 客户端发送请求主要有两种请求方法—get和post。get请求主要是从服务器去获取内容,大多数的请求都是get请求,post请求是向服务器提交一些内容,比如表单等。
(二)requests案例
环境: Pycharm + Py3 + requests + 谷歌浏览器(Chrom)
谷歌浏览器
元素(Elements)
用于查看或修改HTML元素的属性、CSS属性、监听事件、断点等
控制台(Console)
控制台一般用于执行一次性代码,查看JavaScript对象,查看调试日志信息或异常信息
源代码(Sources)
该页面用于查看页面的HTML文件源代码、JavaScript源代码、CSS源代码
网络(Network)
网络页面主要用于查看header等与网络连接相关的信息。
1、爬取百度产品网页
url:
# 使用requests 模块import requests# 发送请求# 需要确定请求地址: 需要确定请求方式: get# 发送请求response = requests.get(url=";)# print(response.text)# # 保存数据# with open("百度产品.html",'w',encoding="utf-8") as f:# f.write(response.text)with open("baidu.html",'w',encoding="utf-8") as f: f.write(response.content.decode())# response.text 获取到文档内容,字符串,通常情况下,绝大部分的网站,使用text 方法即可,但是如果出现使用text导致编码错误# 可以使用response.content# response.content 获取二进制数据,例如爬取网上的图片,媒体文件,必须使用content
2、获取网络图片
# 使用requests 模块import requests# 发送请求# 请求地址# 请求方式response = requests.get(";)print(response)# 保存文件 保存为 xxxx.png xxx.jpgwith open("mbg.png","wb") as f: # 以二进制的形式写文件 f.write(response.content) # 获取二进制结果,并写文件
2、爬取新浪新闻
url:
import requests# 请求地址# url : # 请求参数:# 请求方式 get# 请求地址base_url = ";# 请求参数 类型为字典params= { "q":"java", "c":"news", "from":"index"}# 发起请求response = requests.get(url=base_url,params=params)# 处理结果with open("sina.html","w",encoding="utf-8") as f: f.write(response.text)
3、百度搜索
url:
"""import requests# 访问地址# 访问方式 get 请求# 访问参数# ?wd=python&rsv_spt=1&rsv_iqid=0xf51111e500029c79&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=13&rsv_sug1=11&rsv_sug7=101&rsv_sug2=0&rsv_btype=i&prefixsug=python&rsp=4&inputT=3704&rsv_sug4=3704&rsv_sug=2kw = input("请输入要检索的内容:") # 字符串base_url = ";params = { "wd":kw}"""请求头中,用于标识浏览器User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"""# 请求头 字典headers = { 'User-Agent':"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"}response = requests.get(url=base_url,params=params,headers = headers)print(response)print(response.headers)# 处理结果with open("{}.html".format(kw),"w",encoding="utf-8") as f: f.write(response.text)
4、百度贴吧
# 请求地址 请求方式 get 请求# 请求参数 ie=utf-8&kw=nbaimport requests# # 请求地址# base_url = ";# # 请求参数# params = {# "ie":"utf-8",# "kw":"nba"# }# # 请求头中的 UA# headers = {# 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'# }# response = requests.get(base_url,params=params,headers=headers)# # 保存数据# with open("tieba.html","w", encoding="utf-8") as f:# f.write(response.text)# 贴吧分页# 第一页 第二页 第三页 第四页 第五页 = ";# 请求参数params = { "ie":"utf-8", "kw":"nba"}# 请求头中的 UAheaders = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'}# 循环对每个地址爬取数据for one in range(5): # one 结果为 0 1 2 3 4 # 构建第三个参数 pn params["pn"] = one * 50 response = requests.get(base_url,params=params,headers=headers) # 保存数据 with open("tieba{}.html".format(one),"w", encoding="utf-8") as f: f.write(response.text)
四、登录页面信息爬取
(一)cookie和session:
(1)什么是cookie和session?
cookie是网站用来辨别用户身份,进行会话跟踪,存储在本地终端上的数据。
session(会话)本来含义是指有始有终的一系列动作和消息。在web中,session主要用来在服务器端存储特定用户对象会话所需要的信息。 (2)cookie和session产生的原因: http协议是一个无状态协议,在特定操作的时候,需要保存信息,进而产生了cookie和session。
(3)cookie原理:
cookie由服务器产生,浏览器第一次请求,服务器发送给客户端进行保存。浏览器继续访问时,就会在请求头的cookie字段上附带cookie信息,这样服务器就可以识别是谁在访问了。但是cookie存在缺陷:
不安全—本地保存,容易被篡改。大小受限,本身最大4kb。
cookie虽然在一定程度上解决了‘保持状态’的需求,但是我们希望有一种新的技术可以克服cookie缺陷,这种技术就是session。
(4)session原理:
session在服务器保存—解决安全问题。那么,问题来了:服务器上有session,但是客户端的请求发送过来,服务器如何知道session_a,session_b,到底和哪个请求对应。所以,为了解决这个问题:cookie就作为这个桥梁。在cookie有一个sessionid字段,可以用来表示这个请求对应服务器中的哪一个session。 禁用cookie,一般情况下,session也无法使用。特殊情况下可以使用url重写技术来使用session。url重写技术:将sessionid拼接到url里面。 session的生命周期:服务器创建开始,有效期结束(一般网站设定都是大约30分钟左右)就删除。
爬取虎扑新闻前五页的数据
url:
#!/usr/bin/env python# -*- coding: utf-8 -*-# author: wenqi# datetime: 2020/11/21 16:13 # ide: PyCharm# requestsbase_url = ";# 请求参数params = { "category":"all",}# 请求头中的 UAheaders = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'}# 循环对每个地址爬取数据for one in range(1,6): # one 结果为 0 1 2 3 4 # 构建第三个参数 pn params["page"] = one * 1 response = requests.get(base_url,params=params,headers=headers) # 保存数据 with open("hupu分页{}.html".format(one),"w", encoding="utf-8") as f: f.write(response.text)
标签: #url重写可以把session对象的id