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

news/2024/11/26 23:00:57/

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

    • 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)加载所需的包

python">conda instal python
pip install requests

在这里插入图片描述

(2) 引用和使用 Requests 库

python">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/:专门给练习爬虫的网站

python">## 方法一
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 参数

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

python">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

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

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

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

在这里插入图片描述

python">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

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

网课链接

(3)HTML 的常用标签类型

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

在这里插入图片描述

  • 图片标签
    在这里插入图片描述
  • 链接标签
    在这里插入图片描述
  • 容器标签
    在这里插入图片描述
  • 有序列表标签
    在这里插入图片描述
  • 列表元素标签
    在这里插入图片描述
  • 无序列表标签
    在这里插入图片描述
  • 表格标签
python"><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 库

python">pip install bs4

(2)导入 Beautiful Soup 并使用

python">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)实例:导出所有价格

python">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)实例:导出所有书名

python">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 的所有标题

python">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.ppmy.cn/news/1550170.html

相关文章

如何开发一个脚手架

简介 你是否好奇如何通过命令 npm create vitelatest 来创建项目&#xff1f;使用脚手架可以是我们方便快捷的创建一些初始化的项目&#xff0c;这些基本都是一些常用的技术栈&#xff0c;比如 React、Vue、Angular、Node.js 等。那么&#xff0c;每次创建你是否都需要自己额外…

python深度学习机器学习编程序接单服务代码指导编写脚本调试爬虫

您提到的Python在深度学习、机器学习、编程、接单服务、代码指导、编写脚本、调试以及爬虫等多个方面的应用&#xff0c;确实展示了Python作为一种强大且多功能的编程语言在多个领域的广泛应用。以下是对这些方面的简要说明及建议&#xff1a; Python深度学习与机器学习 深度…

Python爬虫:获取1688关键词API接口数据

引言 在当今的电子商务领域&#xff0c;数据的价值不言而喻。对于商家来说&#xff0c;掌握行业关键词趋势是洞察市场动态、优化产品布局的重要手段。1688作为中国领先的B2B电商平台&#xff0c;提供了海量的商品数据。本文将介绍如何使用Python编写爬虫程序&#xff0c;通过A…

2025杭州国际智能网联新能源汽车展览会

2025杭州国际智能网联新能源汽车展览会 同期举办&#xff1a;杭州国际车灯与车辆照明技术展览会 杭州国际汽车零配件、动力电池与充&#xff08;换&#xff09;电技术展览会 杭州国际汽车内外饰与车用纺织品展览会 时间&#xff1a;2025年06月20日-22日 地点&#xff1a;杭州大…

【ChatGPT】ChatGPT在多领域知识整合中的应用

ChatGPT在多领域知识整合中的应用 随着人工智能技术的发展&#xff0c;ChatGPT以其强大的自然语言处理能力&#xff0c;在知识整合和信息生成方面展现出独特优势。通过将多个领域的知识有机结合&#xff0c;ChatGPT不仅能够回答复杂问题&#xff0c;还能帮助用户处理跨学科的任…

第九章 使用Apache服务部署静态网站

1. 网站服务程序 1970 年&#xff0c;作为互联网前身的 ARPANET&#xff08;阿帕网&#xff09;已初具雏形&#xff0c;并开始向非军用部门开放&#xff0c;许多大学和商业机构开始陆续接入。虽然彼时阿帕网的规模&#xff08;只有 4 台主机联网运行&#xff09;还不如现在的…

【eNSP】ISIS动态路由协议实验

和OSPF一样&#xff0c;IS-IS也是一种基于链路状态并使用最短路径优先算法进行路由计算的一种IGP协议。IS-IS最初是国际化标准组织ISO为它的无连接网络协议CLNP设计的一种动态路由协议。 为了提供对IP的路由支持&#xff0c;IETF在RFC1195中对IS-IS进行了扩充和修改&#xff0c…

大语言模型提示词工程学习--写小说系列(文心一言豆包通义千问):2~确定核心谜团

在上一篇 大语言模型提示词工程学习--写小说系列&#xff08;文心一言&豆包&通义千问&#xff09;&#xff1a;1~创作前的准备工作 中&#xff0c;我们已经使用AI确定了进行小说创作的8个步骤&#xff0c;在接下来的章节中&#xff0c;我们将一步一步按照AI给出的步骤&…