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

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

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

response = 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 requests

response = 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

html 复制代码
<!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 requests

content = 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 requests

content = 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 BeautifulSoup

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

for start_num in range(0,250,25):
    response = requests.get(f"https://movie.douban.com/top250?start={start_num}", headers=headers)
    html = response.text
    soup = BeautifulSoup(html, "html.parser")  # html: 待解析的HTML文本
                                            # "html.parser": 解析器
    all_titles = soup.findAll("span",attrs={"class":"title"})
    for title in all_titles:
        title_string = title.string
        if "/" not in title_string:
            print(title_string)

3 存储或分析数据(略)

相关推荐
奔跑吧邓邓子8 分钟前
【Python爬虫(12)】正则表达式:Python爬虫的进阶利刃
爬虫·python·正则表达式·进阶·高级
Dizzy.5179 分钟前
数据结构(查找)
数据结构·学习·算法
码界筑梦坊31 分钟前
基于Flask的京东商品信息可视化分析系统的设计与实现
大数据·python·信息可视化·flask·毕业设计
pianmian132 分钟前
python绘图之箱型图
python·信息可视化·数据分析
lalapanda33 分钟前
Unity学习part4
学习
csbDD1 小时前
2025年网络安全(黑客技术)三个月自学手册
linux·网络·python·安全·web安全
啄缘之间2 小时前
4.6 学习UVM中的“report_phase“,将其应用到具体案例分为几步?
学习·verilog·uvm·sv
赔罪2 小时前
Python 高级特性-切片
开发语言·python
伊一大数据&人工智能学习日志3 小时前
selenium爬取苏宁易购平台某产品的评论
爬虫·python·selenium·测试工具·网络爬虫
说是用户昵称已存在3 小时前
Pycharm+CodeGPT+Ollama+Deepseek
ide·python·ai·pycharm