Python 基础入门 Day14

欢迎来到 Python 基础入门 Day14!在前一节中,我们学习了如何使用 requests 模块发送和处理 HTTP 请求。如果你已经掌握了这些内容,今天的内容将更令人兴奋:Web 爬虫!爬虫是从网页提取数据的工具,它是数据分析和机器学习项目的重要基础。


目录

  1. 什么是 Web 爬虫?
  2. 安全与合法性注意事项
  3. 使用 requests 获取网页内容
  4. 使用 BeautifulSoup 解析 HTML
  5. 示例:爬取一个简单网页
  6. 处理分页与动态加载
  7. 小结与练习

一、什么是 Web 爬虫?

Web 爬虫(Web Scraper)是通过编程方式访问网页,并自动提取其中的数据。常见应用包括:

  • 数据收集(如价格监控、新闻爬取)
  • 搜索引擎索引(如 Google 搜索)
  • 内容聚合(如旅游、招聘信息)

注意:爬取网站前,请阅读目标网站的 robots.txt 文件,了解其爬取规则并避免违规操作。


二、安全与合法性注意事项

在爬取网页之前,请牢记以下事项:

  1. 尊重网站规则:检查网站的 robots.txt 文件,遵守限制。
  2. 不要过于频繁请求:设置合适的爬取间隔,避免给服务器带来压力。
  3. 不要爬取敏感数据:尊重用户隐私。
  4. 爬取合法内容:未经授权,避免爬取受版权保护的内容。

示例:访问 https://example.com/robots.txt 查看该站点的爬取限制。


三、使用 requests 获取网页内容

我们可以使用 requests 模块获取网页的 HTML 内容:

import requests url = "https://example.com" response = requests.get(url) # 检查状态码和响应内容 if response.status_code == 200: print(response.text) # 输出 HTML 源代码 else: print(f"Failed to retrieve the page: {response.status_code}")


四、使用 BeautifulSoup 解析 HTML

BeautifulSoup 是一个强大的 HTML 解析库,它能轻松提取页面中的特定数据。

4.1 安装 BeautifulSoup

使用 pip 安装:

pip install beautifulsoup4 lxml

4.2 基本用法

以下示例展示了如何提取标题和所有链接:

from bs4 import BeautifulSoup html = """ <html> <head><title>Example Page</title></head> <body> <h1>Welcome to Example Page</h1> <a href="https://example.com/page1">Page 1</a> <a href="https://example.com/page2">Page 2</a> </body> </html> """ soup = BeautifulSoup(html, 'lxml') # 提取标题 print(soup.title.string) # 提取所有链接 for link in soup.find_all('a'): print(link['href'])

输出结果

Example Page https://example.com/page1 https://example.com/page2


五、示例:爬取一个简单网页

以下示例展示了如何爬取 豆瓣读书 Top250 的书名和评分:

5.1 代码实现

import requests from bs4 import BeautifulSoup url = "https://book.douban.com/top250" response = requests.get(url) soup = BeautifulSoup(response.text, 'lxml') # 提取书名和评分 books = soup.find_all('tr', class_='item') for book in books: title = book.find('div', class_='pl2').a['title'] rating = book.find('span', class_='rating_nums').text print(f"Title: {title}, Rating: {rating}")

5.2 输出结果

Title: 平凡的世界(全三部), Rating: 9.4 Title: 红楼梦(上下), Rating: 9.6 ...


六、处理分页与动态加载

6.1 爬取多页数据

许多网站的数据分布在多个页面上。可以通过改变 URL 中的分页参数来爬取:

for page in range(1, 6): # 爬取前 5 页 url = f"https://example.com/page/{page}" response = requests.get(url) soup = BeautifulSoup(response.text, 'lxml') # 处理页面数据

6.2 动态加载内容

有些网站的数据通过 JavaScript 动态加载,此时 requests 无法获取完整内容。可以使用以下两种方法解决:

  1. 检查 API 接口:许多网站在加载动态内容时调用 API,可以直接抓取 API 数据。
  2. 使用 Selenium 模拟浏览器:适用于复杂场景(详细内容请参考后续课程)。

七、小结与练习

今天我们学习了 Python 的 Web 爬虫基础,包括使用 requests 获取网页内容和 BeautifulSoup 解析 HTML。爬虫是处理大规模数据的有效工具,但在使用时必须注意合法性和合规性。

今日练习题:

  1. 使用 requestsBeautifulSoup 爬取一个简单网站上的文章标题列表。
  2. 爬取某电商网站的商品名称和价格(尽量选择公开、无限制的数据)。
  3. 探索网站的 API 接口,尝试直接抓取 JSON 数据。

下一节预告:在 Day15 中,我们将介绍 Python 爬虫进阶:Selenium 的使用,教你如何处理动态网页爬取。敬请期待!


希望你在今天的学习中有所收获!如果有任何问题或建议,欢迎留言交流 😊。

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注