当前位置: 首页 > news >正文

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 存储或分析数据(略)

相关文章:

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

爬虫的流程&#xff1a;从入门到入狱 1 获取网页内容1.1 发送 HTTP 请求1.2 Python 的 Requests 库1.2 实战&#xff1a;豆瓣电影 scrape_douban.py 2 解析网页内容2.1 HTML 网页结构2.2 Python 的 Beautiful Soup 库 3 存储或分析数据&#xff08;略&#xff09; 一般爬虫的基…...

IDEA优雅debug

目录 引言一、断点分类&#x1f384;1.1 行断点1.2 方法断点1.3 属性断点1.4 异常断点1.5 条件断点1.6 源断点1.7 多线程断点1.8 Stream断点 二、调试动作✨三、Debug高级技巧&#x1f389;3.1 watch3.2 设置变量3.3 异常抛出3.4 监控JVM堆大小3.5 数组过滤和筛选 引言 使用ID…...

wp the_posts_pagination 与分类页面搭配使用

<ul> <?php while( have_posts() ) : the_post(); <li > <a href"<?php the_permalink(); ?>"> <?php xizhitbu_get_thumbnail(thumb-pro); ?> </a> <p > <a href&q…...

大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…...

【Python】分割秘籍!掌握split()方法,让你的字符串处理轻松无敌!

在Python开发中&#xff0c;字符串处理是最常见也是最基础的任务之一。而在众多字符串操作方法中&#xff0c;split()函数无疑是最为重要和常用的一个。无论你是Python新手&#xff0c;还是经验丰富的开发者&#xff0c;深入理解并熟练运用split()方法&#xff0c;都将大大提升…...

免费实用在线AI工具集合 - 加菲工具

免费在线工具-加菲工具 https://orcc.online/ 在线录屏 https://orcc.online/recorder 时间戳转换 https://orcc.online/timestamp Base64 编码解码 https://orcc.online/base64 URL 编码解码 https://orcc.online/url Hash(MD5/SHA1/SHA256…) 计算 https://orcc.online/h…...

正则表达式灾难:重新认识“KISS原则”的意义

RSS Feed 文章标题整理 微积分在生活中的应用与思维启发 捕鹿到瞬时速度的趣味探索 微积分是一扇通往更广阔世界的门&#xff0c;从生活中学习思维的工具。 数据库才是最强架构 你还在被“复杂架构”误导吗&#xff1f; 把业务逻辑写入数据库&#xff0c;重新定义简单与效率。…...

eNSP-缺省路由配置

缺省路由是一种特殊的静态路由&#xff0c;其目的地址为0.0.0.0&#xff0c;子网掩码为0.0.0.0。 1.拓扑图搭建 2.配置路由器 AR2 <Huawei>sys #进入系统视图 [Huawei]ip route-static 0.0.0.0 0.0.0.0 192.168.3.2 #设置缺省路由 [Huawei]q #返回上一层 <Huawe…...

solr 远程命令执行 (CVE-2019-17558)

漏洞描述 Apache Velocity是一个基于Java的模板引擎&#xff0c;它提供了一个模板语言去引用由Java代码定义的对象。Velocity是Apache基金会旗下的一个开源软件项目&#xff0c;旨在确保Web应用程序在表示层和业务逻辑层之间的隔离&#xff08;即MVC设计模式&#xff09;。 Apa…...

STM32端口模拟编码器输入

文章目录 前言一、正交编码器是什么&#xff1f;二、使用步骤2.1开启时钟2.2配置编码器引脚 TIM3 CH1(PA6) CH2 (PA7)上拉输入2.3.初始化编码器时基2.4 初始化编码器输入2.5 配置编码器接口2.6 开启定时器2.7获取编码器数据 三、参考程序四、测试结果4.1测试方法4.2串口输出结果…...

Centos 8, add repo

Centos repo前言 Centos 8更换在线阿里云创建一键更换repo 自动化脚本 华为Centos 源 , 阿里云Centos 源 华为epel 源 , 阿里云epel 源vim /centos8_repo.sh #!/bin/bash # -*- coding: utf-8 -*- # Author: make.han...

MYSQL- 查看存储过程调式信息语句(二十七)

13.7.5.27 SHOW PROCEDURE CODE 语句 SHOW PROCEDURE CODE proc_name此语句是MySQL扩展&#xff0c;仅适用于已构建有调试支持的服务器。它显示了命名存储过程的内部实现的表示。类似的语句SHOW FUNCTION CODE显示有关存储函数的信息&#xff08;见第13.7.5.19节“SHOW FUNTIO…...

C#基础上机练习题

21.计算500-800区间内素数的个数cn&#xff0c;并按所求素数的值从大到小的顺序排列&#xff0c;再计算其间隔加、减之和&#xff0c;即第1个素数-第2个素数第3个素数-第4个素数第5个素数……的值sum。请编写函数实现程序的要求&#xff0c;把结果cn和sum输出。 22.在三位整数…...

5.5 W5500 TCP服务端与客户端

文章目录 1、TCP介绍2、W5500简介2.1 关键函数socketlistensendgetSn_RX_RSRrecv自动心跳包检测getSn_SR 1、TCP介绍 TCP 服务端&#xff1a; 创建套接字[socket]&#xff1a;服务器首先创建一个套接字&#xff0c;这是网络通信的端点。绑定套接字[bind]&#xff1a;服务器将…...

一区北方苍鹰算法优化+创新改进Transformer!NGO-Transformer-LSTM多变量回归预测

一区北方苍鹰算法优化创新改进Transformer&#xff01;NGO-Transformer-LSTM多变量回归预测 目录 一区北方苍鹰算法优化创新改进Transformer&#xff01;NGO-Transformer-LSTM多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab NGO-Transformer-LST…...

深入理解 MyBatis 的缓存机制:一级缓存与二级缓存

MyBatis 是目前 Java 开发中常用的一种 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;它不仅简化了 SQL 语句的编写和管理&#xff0c;还提供了强大的缓存机制&#xff0c;用以提高数据库访问的性能。MyBatis 的缓存分为一级缓存和二级缓存&#xff0c;分别应用于不…...

移远通信推出全新5G RedCap模组RG255AA系列,以更高性价比加速5G轻量化大规模商用

11月20&#xff0c;全球领先的物联网整体解决方案供应商移远通信宣布&#xff0c;正式推出其全新5G RedCap模组RG255AA系列。该系列模组支持5G NR独立组网&#xff08;SA&#xff09;和LTE Cat 4双模通信&#xff0c;具有高性能高集成度、低功耗、小尺寸、高性价比等优势&#…...

架构-微服务-环境搭建

文章目录 前言一、案例准备1. 技术选型2. 模块设计3. 微服务调用 二、创建父工程三、创建基础模块四、创建用户微服务五、创建商品微服务六、创建订单微服务 前言 ‌微服务环境搭建‌ 使用的电商项目中的商品、订单、用户为案例进行讲解。 一、案例准备 1. 技术选型 maven&a…...

conda下载与pip下载的区别

一、conda下载与pip下载的区别 最重要是依赖关系&#xff1a; pip安装包时&#xff0c;尽管也对当前包的依赖做检查&#xff0c;但是并不保证当前环境的所有包的所有依赖关系都同时满足。 当某个环境所安装的包越来越多&#xff0c;产生冲突的可能性就越来越大。conda会检查当…...

MySQL获取数据库内所有表格数据总数

在 MySQL 中&#xff0c;要获取数据库内所有表格的数据总数&#xff0c;可以编写一个查询脚本来遍历每个表并计算其行数。你可以使用 INFORMATION_SCHEMA 数据库&#xff0c;它包含了关于数据库元数据的表格&#xff0c;如 TABLES 和 COLUMNS。 以下是一个示例脚本&#xff0c…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...