Python 爬虫从入门到(不)入狱学习笔记

爬虫的流程:从入门到入狱

    • 1 获取网页内容
      • 1.1 发送 HTTP 请求
      • 1.2 Python 的 Requests 库
      • 1.2 实战:豆瓣电影 scrape_douban.py
    • 2 解析网页内容
      • 2.1 HTML 网页结构
      • 2.2 Python 的 Beautiful Soup 库
    • 3 存储或分析数据(略)

一般爬虫的基本流程:获取网页内容、解析网页内容、存储或分析数据。

1 获取网页内容

1.1 发送 HTTP 请求

网课链接

(1)定义

HTTP(超文本传输协议)请求是客户端(如网页浏览器)和服务器之间进行通信的一种方式。

(2)方法

  • GET方法:获取数据
  • POST方法:创建数据

(3)HTTP请求例子

在这里插入图片描述

(4)HTTP响应例子

在这里插入图片描述

1.2 Python 的 Requests 库

网课链接

(1)加载所需的包

conda instal python
pip install requests

在这里插入图片描述

(2) 引用和使用 Requests 库

import requestsresponse = requests.get("http://books.toscrape.com/") # 使用 GET 请求, 参数传入完整的包含协议名的 URL
print(response)
print(response.status_code) # HTTP 状态码# 如果等于 200, 则表示请求成功;# 如果等于 404, 则表示请求失败

状态码 4 开头表示 ”请求失败,客户端错误“

(3)根据状态码判断成不成功获取网页内容

http://books.toscrape.com/:专门给练习爬虫的网站

## 方法一
if response.status_code >= 200 and response.status_code < 400:print(response.text) # 获取响应体内容
elif response.status_code >= 400 and response.status_code < 500:print("请求失败,客户端错误")
elif response.status_code >= 500:print("请求失败,服务器错误")## 方法二(推荐)
if response.ok:print(response.text) # 获取响应体内容
else:print("请求失败")

(4)如果想指定某些信息进行更改,可传入 headers 参数

作用:把爬虫程序伪装成正常浏览器

head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
response = requests.get("http://books.toscrape.com/", headers=head)
if response.ok:print(response.text) # 获取响应体内容
else:print("请求失败")

1.2 实战:豆瓣电影 scrape_douban.py

网课链接

(1)要爬取的网站:https://movie.douban.com/top250

import requestsresponse = requests.get("https://movie.douban.com/top250")
print(response)
print(response.status_code) # 直接查看返回的状态码

(2)通过定义请求头,把服务器伪装成浏览器

先去网站抄作业获取 User-Agent

在这里插入图片描述

headers = {"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"
}
response = requests.get("https://movie.douban.com/top250", headers=headers)
print(response.status_code)
print(response.text)

2 解析网页内容

2.1 HTML 网页结构

网课链接

(1)网页的三大技术要素

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

(2)最简单的 HTML

<!DOCTYPE HTML> 								# 告知浏览器,文件类型是 HTML
<html>											# 起始标签,表示开始<body>										# body 表示文档的主体内容<h1>这是一个标题</h1>						# h1 表示最大字号的标题<p>这是一段文字这是一段文字这是一段文字</p>	# p 表示文本段落</body>
</html>											# 闭合标签,表示结束

网课链接

(3)HTML 的常用标签类型

  • 标题标签
    在这里插入图片描述
  • 文本段落标签
    在这里插入图片描述
  • 换行标签
    在这里插入图片描述
  • 加粗标签
    在这里插入图片描述
  • 斜体标签
    在这里插入图片描述
  • 下划线

在这里插入图片描述

  • 图片标签
    在这里插入图片描述
  • 链接标签
    在这里插入图片描述
  • 容器标签
    在这里插入图片描述
  • 有序列表标签
    在这里插入图片描述
  • 列表元素标签
    在这里插入图片描述
  • 无序列表标签
    在这里插入图片描述
  • 表格标签
<table border="1">			# table 为表格标签; border 为边框标签<thead> 				# 表示表格的头部,一般为表格第一行<tr> 				# table row, 定义表格行<td>表头1</td><td>表头2</td></tr></thead><tbody> 				# 表示表格的主体<tr><td>111</td> # table data, 表示单元格内的数据<td>222</td></tr><tr><td>333</td><td>444</td></tr></tbody>
</table>

在这里插入图片描述

  • class 属性标签:定义元素类的名称

在这里插入图片描述

(4)HTML 常见标签练习:demo.py

<!DOCTYPE html>                                    <!--声明文件类型--><html>                                             <!--整个文档的根--><head>                                           <!--文档的头部--><title>这是一个标题</title>                     <!--定义展示在浏览器选项卡上的标题--></head><body><div style="background-color:red;">          <!--style 是 CSS 的内容,可以不用管--><h1>我是一个一级标题</h1><h2>我是一个二级标题</h2><h6>我是一个六级标题</h6><h7>我是一个七级标题</h7>                    <!--其实七级标题不存在,所以不显示--><p>这是一个<b>文本段落</b>这是一个<i>文本段落</i>这是一个文本段落这是一个<u>文本段落</u>这是一个文本段落这是一个文本段落这是一个文本段落</p></div><p>这是一个<span style="background-color:aqua;">文本段落</span>这是一个<span style="background-color:plum;">文本段落</span>这是一个文本<br>段落这是一个文本段落这是一个文本段落</p><img src="https://t7.baidu.com/it/u=1415984692,3889465312&fm=193&f=GIF" with="500px"><a href="https://www.baidu.com" target="_blank">百度链接</a>"   <!--添加超链接,href 参数是 URL,target 参数是打开方式--><ol>                                            <!--定义有序列表--><li>我是第一项</li><li>我是第二项</li></ol><ul>                                            <!--定义无序列表--><li>我是一项</li><li>我是另一项</li></ul><table border="'2" class="data-table">          <!--定义表格--><thead><tr><td>头部1</td><td>头部2</td><td>头部3</td></tr></thead><tbody><tr><td>111</td><td>222</td><td>333</td></tr><tr><td>444</td><td>555</td><td>666</td></tr><tr><td>777</td><td>888</td></tr></tbody></table></body></html>

2.2 Python 的 Beautiful Soup 库

网课链接

(1)下载 Beautiful Soup 库

pip install bs4

(2)导入 Beautiful Soup 并使用

from bs4 import BeautifulSoup
import requestscontent = requests.get("http://www.example.com/").text
soup = BeautifulSoup(content, "html.parser") # 第2个参数是解析器,默认是lxml
print(soup.p)

Beautiful Soup 可以解析 HTML 结构,让搜索和修改 HTML 结构变得更加容易
在这里插入图片描述
(3) 浏览器辅助检查标签
实例网站:http://books.toscrape.com/
在这里插入图片描述
(4)实例:导出所有价格

from bs4 import BeautifulSoup
import requestscontent = requests.get("http://books.toscrape.com/").text
soup = BeautifulSoup(content, "html.parser") # 第2个参数是解析器,默认是lxml
all_prices = soup.findAll("p", attrs={"class":"price_color"}) # 查找所有p标签,传入可选参数 attrs 来选择想要的内容
for price in all_prices:print(price.string[2:])

(5)实例:导出所有书名

all_titles = soup.findAll("h3")
for title in all_titles:all_links = title.findAll("a")for link in all_links:print(link.string)

(6)实例:导出豆瓣 top250 的所有标题

import requests
from bs4 import BeautifulSoupheaders = {"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"
}for start_num in range(0,250,25):response = requests.get(f"https://movie.douban.com/top250?start={start_num}", headers=headers)html = response.textsoup = BeautifulSoup(html, "html.parser")  # html: 待解析的HTML文本# "html.parser": 解析器all_titles = soup.findAll("span",attrs={"class":"title"})for title in all_titles:title_string = title.stringif "/" not in title_string:print(title_string)

3 存储或分析数据(略)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/62038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黄仁勋:人形机器人在内,仅有三种机器人有望实现大规模生产

11月23日&#xff0c;芯片巨头、AI时代“卖铲人”和最大受益者、全球市值最高【英伟达】创始人兼CEO黄仁勋在香港科技大学被授予工程学荣誉博士学位&#xff1b;并与香港科技大学校董会主席沈向洋展开深刻对话&#xff0c;涉及人工智能&#xff08;AI&#xff09;、计算力、领导…

【Linux学习】【Ubuntu入门】2-3 make工具和makefile引入

1.使用命令新建三个.c文件vi main.c&#xff0c;vi input.c&#xff0c;vi caclcu.c&#xff0c;两个.h文件vi input.h&#xff0c;vi caclcu.h 2.vi Makefile&#xff1a;新建Makefile文件&#xff0c;输入一下内容 注意&#xff1a;命令列表中每条命令前用TAB键&#xff0c;不…

wsl2的Ubuntu18.04安装ros和anaconda

参考&#xff1a;超详细 WSL2 安装 ros 和 anaconda_wsl2安装anaconda-CSDN博客 一.安装ros 1. 更换系统源 输入 wget http://fishros.com/install -O fishros && . fishros 和上面的链接一样&#xff0c;依次输入5-2-1 2. 安装ros 输入 wget http://fishros.c…

1-golang_org_x_crypto_bcrypt测试 --go开源库测试

1.实例测试 package mainimport ("fmt""golang.org/x/crypto/bcrypt" )func main() {password : []byte("mysecretpassword")hashedPassword, err : bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)if err ! nil {fmt.Println(err)…

【FPGA】Verilog:利用 4 个串行输入- 串行输出的 D 触发器实现 Shift_register

0x00 什么是寄存器 寄存器(Register)是顺序逻辑电路中使用的基本组成部分之一。寄存器用于在数字系统中存储和处理数据。寄存器通常由位(bit)构成,每个位可以存储一个0或1的值。通过寄存器,可以设计出计数器、加法器等各种数据处理电路。 0x01 寄存器的种类 基于 D 触发…

用 Python 从零开始创建神经网络(十):优化器(Optimizers)(持续更新中...)

优化器&#xff08;Optimizers&#xff09; 引言1. 随机梯度下降/Stochastic Gradient Descent (SGD)2. 学习率&#xff08;Learning Rate&#xff09;3. 学习率衰减&#xff08;Learning Rate Decay&#xff09;4. 带动量的随机梯度下降法&#xff08;Stochastic Gradient Des…

利用c语言详细介绍下栈的实现

数据结构中&#xff0c;栈是一种线性结构&#xff0c;数据元素遵循后进先出的原则。栈的一端为栈顶&#xff0c;一端为栈底或栈尾&#xff0c;数据只在栈顶端进行操作。新插入数据称为入栈或者压栈&#xff0c;删除数据叫做出栈或者退栈。 一、图文介绍 我们通过建立一个stack…

Jackson、Gson、FastJSON三款JSON利器比拼

在Java领域&#xff0c;有多种JSON工具包&#xff0c;比如Jackson、Gson、FastJSON&#xff0c;每家都各有所长&#xff0c;下面我们从性能、特性、生态、易用 性等几个方面来展开下&#xff1a; 一、Jackson 性能 Jackson是一款高性能的JSON处理库。它在序列化和反序列化操作…

使用 OpenCV 进行视频中的行人检测

在计算机视觉领域&#xff0c;行人检测是一个重要的研究方向&#xff0c;它在视频监控、自动驾驶、人机交互等领域都有着广泛的应用。本文将介绍如何使用 OpenCV 库来实现视频中的行人检测。 环境准备 首先&#xff0c;我们需要安装 OpenCV 库。可以通过以下命令来安装&#…

pytest日志总结

pytest日志分为两类&#xff1a; 一、终端&#xff08;控制台&#xff09;打印的日志 1、指定-s&#xff0c;脚本中print打印出的信息会显示在终端&#xff1b; 2、pytest打印的summary信息&#xff0c;这部分是pytest 的默认输出&#xff08;例如测试结果PASSED, FAILED, S…

数据治理:在企业数据管理中的关键角色与实现路径——《DAMA 数据管理知识体系指南》读书笔记- 第 3 章

文章目录 1. 数据治理的核心内涵与战略价值2. 数据治理的驱动因素&#xff1a;不仅仅是合规3. 数据治理的组织模型&#xff1a;选择适合企业结构的运营模式4. 实施数据治理的关键步骤&#xff1a;战略、制度和文化5. 数据治理工具的选择&#xff1a;支持业务与流程的高效管理6.…

candence: 常用的一些命令: Move / Mirror / Rotate / Spain / Fix / unFix / Flipdesign

常用的一些命令 一、 Move 移动 一个可移动一个&#xff0c;也可多个 移动器件 二、 Mirror 镜像 Mirror 就是top 和 bottom 层的器件进行相互转换 三、 Rotate 旋转 移动过程中旋转 四、旋转 Spain 不能在移动中旋转 可以一次旋转一个&#xff0c;也可多个 一次旋转…

【测试工具JMeter篇】JMeter性能测试入门级教程(二)出炉,测试君请各位收藏了!!!

上篇文章&#xff1a;CSDN 我们介绍了JMeter的一些原理介绍&#xff0c;以及安装配置和启动流程&#xff0c;本文我们就来讲讲JMeter如何使用。 一、JMeter目录结构组成 1. 根目录 Jmeter安装包解压后的根目录如下图&#xff1a; 1.1 backups目录&#xff1a;脚本备份目录&am…

MATLAB深度学习(六)——LSTM长短期神经网络原理与应用

LSTM的应用可以参见一个相当好的视频&#xff1a;小车倒立摆最优控制教程 - Part1 Simulink Simscape Multibody仿真建模_哔哩哔哩_bilibili 6.1 序列建模——循环神经网络 循环神经网络RNN是一类专门用于处理序列性数据x&#xff0c;&#xff0c;xn的神经网络结构&#xff0c…

c++趣味编程玩转物联网:树莓派Pico控制 LED点阵屏

88 LED点阵屏是一种常见的数字显示设备&#xff0c;被广泛应用于电子时钟、公交车显示屏和游戏设备中。在本项目中&#xff0c;我们使用树莓派Pico开发板&#xff0c;通过I2C协议驱动HT16K33芯片&#xff0c;实现点阵屏显示心形图案、倒计时、动态矩形和动态圆等内容。本文详细…

transformer.js(四): 模型接口介绍

前面的文章底层架构及性能优化指南介绍了transformer.js的架构和优化策略&#xff0c;在本文中&#xff0c;将详细介绍 transformer.js 的模型接口&#xff0c;帮助你了解如何在 JavaScript 环境中使用这些强大的工具。 推荐阅读 ansformer.js&#xff08;二&#xff09;&…

11.25 校内模拟赛总结

难评 复盘 7:40 开题 还是决定采取前期审题时间长一点的策略 T1&#xff0c;显然枚举斜率比较优&#xff0c;算一下复杂度是对的&#xff0c;就会了&#xff1b;T2 好神秘啊&#xff0c;感觉又是什么根据结论然后贪心删数&#xff1b;T3 显然是优化 dp&#xff0c;感觉可做…

学习编程,学习中间件,学习源码的思路

01 看的多&#xff0c;内化不足 最近想复习一下编程相关的知识&#xff0c;在复习前我翻开了之前的一些笔记&#xff0c;这些笔记基本都是从书本、视频、博客等摘取记录的&#xff0c;看着这些笔记心里总结&#xff1a;看的多&#xff0c;内化不足。 02 整理大纲 为了解决这个…

[C++]vector:迭代器失效和vector<string>中更深层次拷贝的问题

迭代器失效 一、迭代器失效的两大类型异地扩容后的失效原地删除后的失效 二、vector<string>出现的深层次拷贝问题 一、迭代器失效的两大类型 异地扩容后的失效 在vector容器中&#xff0c;通常情况下的扩容都是异地扩容&#xff0c;例如resize, reserve&#xff0c;但…

初识 Django

声明 适用于想要快速入门的开发者&#xff0c;有前后端开发以及语言基础&#xff0c;想要学习语法或者特性。 想要学会快速开发&#xff0c;快速入门&#xff0c;请看博客【实用向】Django 框架入门并结合本篇文章。 命令 命令描述startproject创建一个 Django 项目startapp…