顶部右侧自定义内容
顶部左侧自定义内容
当前位置:首页 > 我的文章 > 正文

Python怎么从网页上爬数据

作者:neal发布时间:2025-09-23 16:49分类: 我的文章 浏览:213评论:0


导读:太好了!你想学习Python爬虫,这是一个非常实用且有趣的技能。我来为你提供一个从零开始的、全面的入门指南。 核心思想:爬虫是什么? 简单来说,网络爬虫就是一个自动化的程序,它模仿...

太好了!你想学习Python爬虫,这是一个非常实用且有趣的技能。我来为你提供一个从零开始的、全面的入门指南。

核心思想:爬虫是什么?

简单来说,网络爬虫就是一个自动化的程序,它模仿人类浏览网页的行为,但速度更快、规模更大。它的基本工作流程是:
1.  **发送请求**:向目标网站的服务器发送一个请求(比如“请把百度首页的内容给我”)。
2.  **获取响应**:服务器返回网页的源代码(通常是HTML格式)。
3.  **解析数据**:从一大堆HTML代码中,提取出我们需要的具体信息(如文章标题、价格、链接等)。
4.  **保存数据**:将提取出的信息保存到文件(如CSV、JSON)或数据库中。

---

 第一步:必备库介绍

Python有几个库是爬虫的“神器”,你需要先安装它们。

```bash
# 在命令行/终端中使用pip安装
pip install requests
pip install beautifulsoup4
pip install lxml  # 这是一个解析器,BeautifulSoup需要它来快速解析HTML
```

- **`requests`**: 用于发送HTTP请求,获取网页源代码。简单易用,是爬虫的基础。
- **`BeautifulSoup`** (来自 `bs4`): 用于解析HTML和XML文档,从复杂的标签中提取数据,就像在汤里捞取你想要的“菜”(数据)一样,故名“美丽的汤”。

---

第二步:一个完整的入门实例(静态页面爬取)

我们以爬取**豆瓣电影Top250**的第一页电影名和评分为例。

```python
import requests
from bs4 import BeautifulSoup

# 1. 目标网址
url = 'https://movie.douban.com/top250'

# 2. 模拟浏览器访问(添加请求头,避免被网站识别为简单爬虫)
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}

# 3. 发送GET请求,获取网页源代码
response = requests.get(url, headers=headers)
# 检查请求是否成功(状态码200表示成功)
if response.status_code == 200:
    html_text = response.text  # 得到网页的HTML文本
else:
    print(‘请求失败,状态码:', response.status_code)
    exit()

# 4. 使用BeautifulSoup解析HTML
soup = BeautifulSoup(html_text, 'lxml')  # 指定使用lxml解析器

# 5. 查找和提取数据
# 在浏览器中打开豆瓣Top250,按F12打开开发者工具,使用“检查”功能找到电影名所在的HTML标签。
# 我们发现每个电影项都在一个 class="item" 的div中,电影名在 <span class="title"> 里。
movie_list = soup.find_all('div', class_='item')

for movie in movie_list:
    # 查找电影名(只取中文名,第一个span.title)
    title_tag = movie.find('span', class_='title')
    title = title_tag.get_text() if title_tag else "未找到标题"

    # 查找评分(在 <span class="rating_num"> 里)
    rating_tag = movie.find('span', class_='rating_num')
    rating = rating_tag.get_text() if rating_tag else "未找到评分"

    # 6. 打印结果
    print(f"电影:{title}, 评分:{rating}")

print("爬取完成!")
```

**运行这段代码,你就能看到第一页25部电影的名称和评分了!**

---

第三步:关键技巧与概念

1. 如何找到需要的数据?(核心技能)
这是爬虫最关键的一步。你需要使用浏览器的**开发者工具(按F12)**。
- 在网页上右键点击你想爬取的内容(比如电影名),选择“检查”或“审查元素”。
- 开发者工具会高亮显示对应的HTML代码。
- 观察它的标签(如 `div`, `span`, `a`)和属性(特别是 `class` 和 `id`),然后用 `find` 或 `find_all` 来定位。

 2. 处理动态加载的内容(Ajax)
有些网站(如淘宝、微博)的内容是通过JavaScript动态加载的,直接用 `requests.get()` 得到的HTML里没有这些内容。这时你有两个选择:

- **方案A:找Ajax接口**
    - 按F12打开“网络(Network)”选项卡。
    - 刷新页面,筛选XHR或JS类型的请求。
    - 找到真正包含数据的请求,这个接口返回的往往是JSON格式,直接用 `requests` 请求这个接口会更简单。

- **方案B:使用Selenium**
    - `Selenium` 是一个自动化测试工具,可以模拟真实浏览器操作(点击、滚动等)。
    - 它能等到JavaScript执行完毕后再获取页面内容,但速度较慢。
    ```python
    from selenium import webdriver
    driver = webdriver.Chrome()  # 需要先下载ChromeDriver
    driver.get(url)
    page_source = driver.page_source  # 此时已包含动态加载的内容
    # ... 然后用BeautifulSoup解析page_source
    driver.quit()
    ```

3. 遵守规则,做“好人”
- **查看 `robots.txt`**:访问 `网站域名/robots.txt`(如 `https://www.douban.com/robots.txt`),看网站允许爬虫爬取哪些内容。
- **设置延迟**:在请求之间使用 `time.sleep(1)` 暂停一下,减轻服务器压力。
- **识别反爬虫机制**:常见的反爬措施有:
    - **User-Agent检查**:我们上面已经通过添加 `headers` 解决了。
    - **IP频率限制**:同一个IP短时间请求太多次会被封。解决方法:使用代理IP池。
    - **验证码**:复杂情况下需要接入打码平台或使用机器学习识别。

---

第四步:进阶学习路径

1.  **爬取多页数据**:分析翻页URL规律(如 `?start=25`),用循环遍历所有页面。
2.  **保存数据**:将结果保存到文件。
    - **CSV文件**:使用内置的 `csv` 模块。
    - **JSON文件**:使用 `json` 模块。
    - **数据库**:学习使用 `sqlite3`(轻量级)或 `pymysql`/`pymongo` 连接数据库。
3.  **使用Scrapy框架**:当项目变得庞大复杂时,`Scrapy` 是一个专业的爬虫框架,它提供了强大的异步处理、管道、中间件等功能,效率远高于手动编写。
4.  **学习正则表达式**:有时用正则表达式提取数据更灵活,可以配合 `re` 模块使用。

总结

| 步骤 | 核心操作 | 常用工具 |
| **1. 获取页面** | 发送HTTP请求 | `requests`, `selenium` |
| **2. 解析页面** | 从HTML/JSON中提取数据 | `BeautifulSoup`, `lxml`, `json` |
| **3. 存储数据** | 保存到文件或数据库 | `csv`, `json`, `pymysql` |

**给你的建议:**
从简单的静态网站(如豆瓣、知乎、新闻网站)开始练习,熟练掌握 `requests` + `BeautifulSoup` 这套组合拳。然后逐步挑战有动态内容、有反爬机制的网站。

祝你爬虫之旅愉快!记得要负责任地使用爬虫,尊重网站的规定。

标签:


发表评论: