首页 > 编程语言 >Python爬虫学习笔记

Python爬虫学习笔记

时间:2024-11-10 16:18:42浏览次数:5  
标签:__ 请求 Python 爬虫 笔记 url print import requests

目录

基础篇:

HTTP:

HTTP请求:

​ HTTP请求大致分为两类:GET方法与POST方法,前者向服务器发送获取数据请求,后者则向服务器发送创建数据请求

请求行:

# 请求行
方法类型 资源路径 协议版本
# 示例
POST /user/info HTTP/1.0

资源路径指明访问服务器的具体资源:
例如 www.douba.com/movie/top250 中 /movie/top250 即为资源路径
此外,还可以在资源路径后指定查询参数缩小查询范围:
www.douban.com/movie/top250?start=75&filter=unwatched
start=75filter=unwatched 均为查询参数,不同查询参数间用 & 隔开

请求头:

# 请求头 ———— 包含给服务器的具体信息
Host: 主机域名
User-Agent: 告知服务器客户端的相关参数
Accept: 客户端接受信息类型
Referer: 防盗链(反爬)
cookie: 本地字符串数据信息(用户登录信息-反爬)
# 示例
Host:www.tassel.com
User-Agent:curl/7.77.0
Accept:*/*

客户端类型及其User-Agent参数:

客户端类型 User-Agent参数
curl命令行工具 curl/7.77.0
Requests库 python-requests/2.25.1
Chrome Mozilla/5.0 (Macintosh;Intel Mac OS X 10_15_7)

信息类型及其Accept参数:

信息类型 Accept参数
HTML text/html
JSON application/json
HTML + JSON text/html,application/json
任意类型 */*

请求体:

# 请求体 ———— 客户端传递给服务器任意信息
# 示例
{"username":"Tassel",
 "email":"[email protected]"}

注意:GET方法的请求体通常为空

HTTP响应:

状态行:

# 状态行
协议版本 状态码 状态信息
# 示例
HTTP/1.0 200 OK

状态码及其状态信息:

状态码 状态信息
200 OK 客户端请求成功
301 Moved Permanently 资源被永久移动到新地址
400 Bad Request 客户端不能被服务器所理解
401 Unauthorized 请求未经授权
403 Forbidden 服务器拒绝提供服务
404 Not Found 请求资源不存在
500 Internal Server Error 服务器发生不可预期的错误
503 Server Unavailable 服务器当前不能处理客户端的请求

响应头:

# 响应头 ———— 服务器返回数据内容的部分参数
Date: 响应日期与时间
Content-Type: 返回内容类型及编码格式
cookie: 本地字符串数据信息(用户登录信息-反爬)
# 示例
Date:Fri,27 Jan 2023 02:10:48 GMT
Content-Type:text/html;charset=utf-8

响应体:

# 响应体 ———— 服务器返回的具体数据内容
# 示例
<!DOCTYPE html>
<head><title>首页</title></head>
<body><h1>Tassel</h1><p>Hello!</p></body>
</html>

Requests库:

​ 利用Python中的Requests库可以轻松快捷地进行网页爬取

GET请求:

# 导入Requests库并获取网站源码
import requests
response = requests.get("http://books.toscrape.com/")
response.status_code # 状态码
response.text # 网站源码
# 利用"response.ok"属性判断网站请求是否成功
if response.ok:
	print(response.text)
else:
	print("请求失败")
# 利用"head"参数伪造客户端访问
head = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}

image-20241103213214633
# 示例1 ———— 获取豆瓣Top250电影网页源码
import requests
head = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
    "AppleWebKit/537.36 (KHTML, like Gecko)"
    "Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"
}
response = requests.get('https://movie.douban.com/top250',headers=head)
print(response.status_code)
print(response.content.decode(encoding='utf8'))
response.close()

# 示例2 ———— 封装参数获取豆瓣电影高分排行榜
import requests
url = "https://movie.douban.com/j/search_subjects"
# 封装参数
param = {
    "type": "tv",
    "tag": "热门",
    "page_limit": 50,
    "page_start": 0,
}
head = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"
}
response = requests.get(url=url, params=param, headers=head)
print(response.json())
response.close()

POST请求:

image-20241103203945870 image-20241103204154857
# 实例 ———— 百度翻译发送请求
import requests
url = "https://fanyi.baidu.com/sug"
string = input("请输入将翻译的英语单词: ")
# data参数
data = {
    "kw": string
}
head = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"
}
# 发送POST请求必须将数据存放在字典中,通过data参数传递
response = requests.post(url, headers=head, data=data)
# 将服务器返回内容转化为json()格式
print(response.json())
response.close()

HTML:

HTML 定义网页的结构和信息
CSS 定义网页的样式
JavaScript 定义用户和网页的交互逻辑

HTML网页结构:

<!DOCTYPE HTML>
<html>
	<body>
		<h1>标题</h1>
		 <p>文字</p>
	</body>
</html>

HTML网页以起始,以结束
其中又由组合构成众多对象,各对象中包括大量由HTML标签划定的网页内容

HTML标签:

标签 说明
标题

文本
图片
链接
容器
容器

    有序列表
    无序列表
    表格
    # 标题
    <h1>一级标题</h1>
    <h2>二级标题</h2>
    <h3>三级标题</h3>
    # 实际在渲染出的网页中标题的字号还与CSS定义有关,所以不一定标题级数越高,字号越大
    
    # 文本
    <p>文本</p>
    <p><b>加粗文本</b></p>
    <p><i>斜体文本</i></p>
    <p><u>下划线文本</u></p>
    <p>换行<br>文本</p>
    
    # 图片
    <img src="图片路径"
    	 width="图片宽度">
    
    # 链接
    <a href="超链接"[target="_self" | target="_blank"]>描述信息</a>
    target 可选参数,"_self"在当前页面跳转,"_blank"在新窗口跳转
    <a href="https://space.bilibili.com/3493122610825915"target="_self">我的主页</a>
    
    # 容器
    <div style="background-color:red;">
    	<a href="https://baidu.com">链接1</a>
    	<a href="https://baidu.com">链接2</a>
    </div>
    # 便于对容器中的所有元素统一添加样式
    <span style="background-color:red;">
    	<a href="https://baidu.com">链接1</a>
    	<a href="https://baidu.com">链接2</a>
    </span>
    # span与div的区别:span为内联元素,一行可以有不止一项span容器,而div容器一行只能有一项
    
    # 列表
    # 有序列表
    <ol>
    	<li>语文</li> # 1.语文
    	<li>数学</li> # 2.数学
    	<li>英语</li> # 3.英语
    </ol>
    # 无序列表
    <ul>
    	<li>语文</li> # ·语文
    	<li>数学</li> # ·数学
    	<li>英语</li> # ·英语
    </ul>
    
    # 表格
    <table [border="1"]>
    	<thead>
    		<tr>
    			<td>表头1</td>
    			<td>表头2</td>
    		</tr>
    	</thead>
    	<tbody>
    		<tr>
    			<td>11</td>
    			<td>12</td>
    		</tr>
    		<tr>
    			<td>21</td>
    			<td>22</td>
    		</tr>
    	</tbody>
    </table>
    border 即添加表格边框,参数"1"指定边框大小
    

    网页解析:

    Regular Expression:

    正则优点:速度快,效率高,准确性高
    正则缺点:新手上手难度高

    元字符:

    元字符 作用
    . 匹配除换行符以外的任意字符
    \w 匹配字母或数字或下划线
    \s 匹配任意的空白符
    \d 匹配数字
    \n 匹配单个换行符
    \t 匹配单个制表符
    ^ 匹配字符串的开始
    $ 匹配字符串的结尾
    \W 匹配字母或数字或下划线
    \D 匹配数字
    \S 匹配空白符
    a|b 匹配字符a或字符b
    ( ) 匹配括号内的表达式,也表示元组
    [ ] 匹配字符组中的字符
    [^ ] 匹配除字符组中字符的所有字符

    量词:

    量词 作用
    * 重复零次或更多次
    + 重复单次或更多次
    ? 重复零次或单次
    重复n次
    重复n次或更多次
    重复n到m次

    标签:__,请求,Python,爬虫,笔记,url,print,import,requests
    From: https://www.cnblogs.com/code-yiyi/p/18538140

    相关文章

    • Python中的数据结构:collections库详解
      Python中的数据结构:collections库详解在日常Python开发中,我们经常需要处理各种数据结构。Python标准库自带的collections模块,为我们提供了一系列高效且灵活的容器数据类型,比基础数据结构(如list,dict,set,tuple)功能更丰富,应用场景更广泛。本文将详解collections......
    • 【python】路径与文件管理:pathlib库的现代用法
      【Python】路径与文件管理:pathlib库的现代用法在日常的Python开发中,文件和路径管理是一个常见的任务。无论是读取文件,创建目录,还是获取文件属性,都涉及到路径操作。在Python的早期版本中,我们使用os和os.path模块来处理路径,但这些方法往往显得冗长且不够直观。为了......
    • C - Sowing Stones(python解)-atcoder
      C-SowingStones**(python解)-atcoder原题链接:C-SowingStones问题分析:每个包含石头的单元格X[i]中有A[i]个石头。我们需要确保每个单元格从1到N最终都有1个石头。思路:可用的石头总数必须等于单元格的总数。即需要N个石头,但只有ΣA[i](其中A[i]是单元格......
    • 单调队列笔记
      单调队列笔记双端队列deque维护一个严格单调变化的组,可以称为一个单调队列单调队列因为可以直接对组的两端进行操作,所以可以有效的降低时间复杂度用单调队列来解决问题,一般是需要得到的某个范围内的最小值或最大值这里以一道经典的单调队列的题目为例:题目描述有一个长为\(......
    • FWT 学习笔记
      快速沃尔什变换模板题给定长度为\(2^n\)两个序列\(A,B\),设\[C_i=\sum_{j\oplusk=i}A_j\timesB_k\]分别当\(\oplus\)是or,and,xor时求出\(C\)。FWT,中文名称:快速沃尔什变换。因为已经有FFT和NTT基础,所以直接考虑构造FWT的变换。不失一般性,先考虑\(n=......
    • 【吴恩达机器学习笔记】10-正则化解决过拟合问题
      过拟合是机器学习中一个常见的问题,它发生在模型在训练数据上表现得很好,但在未见过的测试数据上表现不佳时。这通常是因为模型过于复杂,捕捉到了训练数据中的噪声和细节,而没有学习到数据的一般模式。过拟合的定义过拟合是指模型在训练数据上能够获得比其他假设更好的拟合,但在训......
    • 还在搞传统爬虫吗?2025年用人工智能轻松抓取几乎所有网站
      今天,我将介绍一种简单的方法,帮助大家从各种网站上收集数据,搭建一个能够像人在浏览器中操作的网页爬虫。这种爬虫甚至可以在Upwork等平台上独立完成一些网页抓取的自由职业任务。自2024年以来,随着AI的发展,网页抓取发生了巨大的变化。以前,大公司如亚马逊或沃尔玛为了保持价......
    • 新手上云实践:在腾讯云CVM上使用Docker部署Leanote开源笔记工具
      新手上云实践:在腾讯云CVM上使用Docker部署Leanote开源笔记工具前言一、云服务器CVM介绍1.1CVM简介1.2CVM主要特点1.3CVM主要使用场景二、本次环境规划2.1本次实践简介2.2本次环境规划三、购买CVM云服务器3.1腾讯云双十一活动3.2购买云服务器CVM3.3检查CVM云服......
    • 平板 在实际生活中具体有什么用途?学习记笔记
      平板在实际生活中具体有什么用途?学习记笔记--------------我的ipad就是。。上课/开会的时候,打开Notability,开启新页面,点击录音,开始做笔记。——不过实际上用到录音的机会也就5次左右,笔记看的也不多。主打一个自欺欺人了属于是。哦,还有ipad远程到电脑,临时改一下代码。。。https:......
    • 如何用Python代码实现闪烁的爱心?
      你可以使用Python的turtle库来绘制一个闪烁的爱心。turtle库非常适合做简单的图形绘制,同时通过控制图形的显示和清除,可以模拟闪烁的效果。以下是一个简单的例子,展示了如何使用Python创建一个闪烁的爱心形状:importturtleimporttime#设置画布screen=turtle.......