爬虫的基本知识&第一个请求&requests模块的基本使用

1.请求过程与网页基础

1.1 URL介绍

  • URL(Uniform Resource Locator),统一资源定位符,是互联网上标准资源的地址
  • 组成:<协议>://<主机>:<端口>/<路径>
    在这里插入图片描述

不同scheme的URL一般只包括其中的部份组件,其中最重要的3个部份是方案(scheme)、主机(host)和路径(path)

1.2 HTTP请求过程

# 请求过程:
	客户端, 通常指web浏览器或APP向服务器发起请求, 服务器接收到请求进行处理, 并向客户端发起响应.

在这里插入图片描述

1.3请求

请求方法:常见有8种

  • GET: 请求页面, 并返回页面内容
  • POST: 用于提交表单数据或上传文件, 数据包含在请求体中
  • PUT: 从客户端向服务器传送的数据取代指定文档中的内容
  • DELETE: 请求服务器删除指定的页面
  • HEAD: 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头
  • CONNECT: 把服务器当作跳板,让服务器代替客户端访问其他网页
  • OPTIONS: 允许客户端查看服务器的性能
  • TRACE: 回显服务器收到的请求,主要用于测试或诊断
  • 重点掌握GET & POST : GET与POST的区别(重点) --> (面试出镜率较高)
    ( 1.GET请求中的参数包含在URL里面, 数据可以在URL中看到, 而POST请求的URL不会包含这些数据, POST的数据都是通过表单形式传输的, 会包含在请求体中
    2.GET请求提交的数据最多只有1024字节, 而POST方式没有限制)
# 请求网址:
请求的网址,即统一资源定位符URL,它可以唯一确定我们想请求的资源

请求头:
请求头,用来说明服务器要使用的附加信息. 重点掌握: Accept, Cookie, Referer, User-Agent
1.Accept:请求报头域,用于指定客户端可接受哪些类型的信息
2.Cookie:也常用复数形式 Cookies,这是网站为了辨别用户进行会话跟踪而存储在用户本地的数据。它的主要功能是维持当前访问会话。例如,我们输入用户名和密码成功登录某个网站后,服务器会用会话保存登录状态信息,后面我们每次刷新或请求该站点的其他页面时,会发现都是登录状态,这就是Cookies的功劳。Cookies里有信息标识了我们所对应的服务器的会话,每次浏览器在请求该站点的页面时,都会在请求头中加上Cookies并将其发送给服务器,服务器通过Cookies识别出是我们自己,并且查出当前状态是登录状态,所以返回结果就是登录之后才能看到的网页内容
3.Referer:此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如作来源统计、防盗链处理等
4.User-Agent:简称UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时加上此信息,可以伪装为浏览器;如果不加,很可能会被识别出为爬虫 # 重点
5.x-requested-with :XMLHttpRequest # 代表ajax请求
5.Accept-Language:指定客户端可接受的语言类型
6.Accept-Encoding:指定客户端可接受的内容编码
7.Content-Type:也叫互联网媒体类型(Internet Media Type)或者MIME类型,在HTTP协议消息头中,它用来表示具体请求中的媒体类型信息。例如,text/html代表HTML格式,image/gif代表GIF图片,application/json代表JSON类型

# 请求体:
请求体一般承载的内容是POST请求中的表单数据,而对于GET请求,请求体则为空。

1.4 响应

# 响应, 是由服务端返回给客户端的, 可以分为三部分: 
响应状态码(response status code), 响应头(response headers), 响应体(response body)

响应状态码: 用于判断请求后的相应状态, 如200代表请求成功, 404代表页面页面找不到, 500代表服务器错误
常见的状态码:
200系列:
200 成功 服务器已成功处理了请求
300系列:
301 永久移动 请求的网页已永久移动到新位置,即永久重定向 # 重点
302 临时移动 请求的网页暂时跳转到其他页面,即暂时重定向 # 重点
400系列:
400 错误请求 服务器无法解析该请求 # 重点
401 未授权 请求没有进行身份验证或验证未通过
403 禁止访问 服务器拒绝此请求 # 重点
404 未找到 服务器找不到请求的网页
500系列:
500 服务器内部错误 服务器遇到错误,无法完成请求 # 重点
501 未实现 服务器不具备完成请求的功能
502 错误网关 服务器作为网关或代理,从上游服务器收到无效响应
504 网关超时 服务器作为网关或代理,但是没有及时从上游服务器收到请求
505 HTTP版本不支持 服务器不支持请求中所用的HTTP协议版本

(注意: 状态码不能完全代表响应状态, 部分网站的状态码是自定义的, 一切以响应的数据为准)

# 响应头:
响应头包含了服务器对请求的应答信息
Date:标识响应产生的时间。
Content-Encoding:指定响应内容的编码。

Server:包含服务器的信息,比如名称、版本号等。

Content-Type:文档类型,指定返回的数据类型是什么,如text/html代表返回HTML文档,
application/x-javascript则代表返回JavaScript文件,image/jpeg则代表返回图片。

Set-Cookie:设置Cookies。响应头中的Set-Cookie告诉浏览器需要将此内容放在Cookies中,
下次请求携带Cookies请求。

Expires:指定响应的过期时间,可以使代理服务器或浏览器将加载的内容更新到缓存中。
如果再次访问时,就可以直接从缓存中加载,降低服务器负载,缩短加载时间。
# 响应体:
最重要的当属响应体的内容了。响应的正文数据都在响应体中,比如请求网页时,
它的响应体就是网页的HTML代码;请求一张图片时,它的响应体就是图片的二进制数据。
我们做爬虫请求网页后,要解析的内容就是响应体.

1.4 网页基础

# 网页的组成:
网页可以分为三部分, HTML, CSS, JavaScript
1.HTML: 其全称叫作Hyper Text Markup Language,即超文本标记语言。
        定义了网页的骨架
        
2.CSS: 全称叫作Cascading Style Sheets,即层叠样式表。
       定义了网页的样式
        
3.JavaScript: 简称JS,是一种脚本语言
              定义了网页与用户的交互行为, 如下载进度条, 提示框, 轮播图 

2.第一个请求

2.1 爬虫工作流(复习)

  • 确定url, 向服务器发送请求并获得响应: requests, urllib, aiohttp
  • 在响应中提取目标数据, 即数据解析: xpath, bs4, 正则, PyQuery
  • 数据持久化: 文件, 关系型数据库, 非关系型数据库

2.2 第一个爬虫

# requests库的安装
pip install requests
# 需求: 爬取百度首页, 并写入文件中, 最后用浏览器打开文件查看效果

import requests

# 1.确定url, 向服务器发送请求
url = 'https://www.baidu.com'
res = requests.get(url=url)

# 2.操作响应数据, 获取目标数据
res.encoding = 'utf-8'

# 3.将目标数据持久化到本地: 写入文件
with open('baidu.html', 'w', encoding='utf-8') as f:
    f.write(res.text)
# 需求: 爬取前程无忧, 并写入文件, 最后用浏览器打开文件查看结果
import requests

# 1.确定url, 向服务器发送请求
url = 'https://search.51job.com/list/010000,000000,0000,00,9,99,Python%25E7%2588%25AC%25E8%2599%25AB,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='

# 2.发起请求, 获取响应
ret = requests.get(url='https://search.51job.com/list/010000,000000,0000,00,9,99,Python%25E7%2588%25AC%25E8%2599%25AB,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=', headers=headers)

# 3.对相应数据进行编码
ret.encoding = 'gbk'

# 4.数据持久化
with open('bs.html', 'w', encoding='gbk') as f:
    f.write(ret.text)

3.requests模块基本使用

1.get请求:
    不携带参数的get请求: 搜狗首页
    不携带参数的get请求 + headers: 爬取知乎的发现页
    携带参数的get请求 + headers: 知乎的发现栏中搜索Python
    res = requests.get(url=url, headers=headers, params=params)
    
2.post请求: 构建参数的post请求
    
3.响应数据的获取与属性
	(1).响应数据的获取:
			res.text: 文本数据
			res.json(): json数据
			res.content:, 图片, 视频, 压缩包, 软件包
    (2).响应的其他属性:
            res.status_code: 获取响应状态码
            res.headers: 响应头
            res.cookie: cookie信息

3.1 requests模块的get请求

# 不携带参数的get请求: 爬取搜狗主页
import requests
url = 'https://www.sogou.com/'
res = requests.get(url=url)
print(res)
print(res.text)

with open('sougou.html', 'w', encoding='utf-8') as f:
    f.write(res.text)
# 不携带参数的get请求  +  headers: 爬取知乎的发现页
import requests
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
url = 'https://www.zhihu.com/explore'
res = requests.get(url=url, headers=headers)
with open('zhihu.html', 'w', encoding='utf-8') as f:
    f.write(res.text)
# 携带参数的get请求  +  headers: 知乎的发现栏中搜索Python
import requests
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
url= 'https://www.zhihu.com/search?'
params = {
    'type':'content',
    'q':'python'
}

res = requests.get(url=url, headers=headers, params=params)
print(res)
print(res.text)
with open('python.html', 'w', encoding='utf-8') as f:
    f.write(res.text)

3.2 requests模块的post请求

# requests的post请求: 以post方式请求httpbin.org/post时会返回提交的请求信息
import requests
headers = {
     'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
url = 'http://httpbin.org/post'
data = {
    'name': 'spiderman',
    'age': 8
}
res = requests.post(url=url, headers=headers, data=data)
print(res.text)

3.3 json形式与流形式的响应数据示例

# json形式响应数据示例: bilibili的Python视频教程, 目录列表
import requests
headers = {
     'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
url = 'https://api.bilibili.com/x/web-interface/view?aid=14184325&cid=23153678'
res = requests.get(url=url, headers=headers)
print(res)
print(res.status_code)
print(res.headers)
print('-----------------------------------------------------------------------------')
print(res.json())
# 流形式响应数据示例: 站长素材的简历模板
import requests
headers = {
     'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
url = 'http://fjdx.sc.chinaz.net/Files/DownLoad/jianli/201907/jianli10810.rar'
res = requests.get(url=url, headers=headers)
print(res.content)
with open('janli.rar', 'wb') as f:
    f.write(res.content)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我了解您的问题了。下面是我的回答: 爬虫基础知识介绍: 爬虫是一种自动化程序,能够模拟人类浏览网页的行为,从中获取所需信息。爬虫的本质是发送 HTTP 请求,获取服务器返回的数据,并对数据进行处理和分析。 爬虫基本流程: 1. 发送 HTTP 请求获取网页数据; 2. 解析网页数据,提取所需信息; 3. 保存信息。 获取数据: 获取数据的模块有很多,比如urllib模块requests模块等。urllib是Python自带的HTTP请求库,可以发送HTTP请求并获取HTTP响应。requests是第三方HTTP请求库,功能更加强大,使用更加方便。 下面是使用requests模块获取网页数据的示例代码: ```python import requests url = 'https://www.baidu.com' response = requests.get(url) html = response.text ``` 分析数据: 分析数据的工具有很多,比如BeautifulSoup、正则表达式和Xpath等。BeautifulSoup最为常用,它是一个HTML/XML的解析器,可以将HTML/XML文档转换成一个复杂的树形结构,便于我们对其进行分析。 下面是使用BeautifulSoup解析网页数据的示例代码: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'html.parser') title = soup.title.string ``` 保存数据: 保存数据的方法有很多,可以将数据保存到文件、数据库等。在Python中,我们可以使用内置的文件操作函数打开文件并写入数据。 下面是将数据保存到文件的示例代码: ```python with open('data.txt', 'w', encoding='utf-8') as f: f.write(title) ``` 以上就是爬虫基础知识介绍、爬虫基本流程以及获取数据、分析数据、保存数据的相关模块和工具的简单介绍。希望对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值