龙空技术网

空中直播学习python爬虫计算机技术(本科教育实战技术)

知识分享打卡 66

前言:

目前各位老铁们对“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