使用Python实现一个简单的Web爬虫(Web Scraper)

30分钟前 4阅读

在当今数据驱动的世界中,从网页上提取信息变得越来越重要。Web爬虫(Web Scraper)是一种自动化获取网页内容的程序,广泛应用于数据分析、价格监控、舆情分析等领域。

本文将介绍如何使用 Python 编写一个简单的 Web 爬虫,从一个网页中提取所需的数据,并展示其基本原理和实现过程。我们将使用 Python 的 requestsBeautifulSoup 库来完成这项任务。


准备工作

1. 安装必要的库

我们将会用到以下两个库:

requests:用于发送 HTTP 请求并获取网页内容。BeautifulSoup:用于解析 HTML 文档并提取所需数据。

你可以通过 pip 命令安装这些库:

pip install requests beautifulsoup4

理解爬虫的基本流程

一个简单的 Web 爬虫通常包括以下几个步骤:

发送请求获取网页内容;解析 HTML 内容;提取感兴趣的数据;存储或处理数据。

编写第一个 Web 爬虫

我们以抓取 https://books.toscrape.com/ 这个网站为例,这是一个专门供练习爬虫使用的网站,列出了许多书籍的信息。

我们的目标是提取每本书的书名、价格和库存状态。

1. 获取网页内容

首先,我们使用 requests 模块向目标网址发送 GET 请求,并检查响应状态码是否为 200(表示成功)。

import requestsurl = 'https://books.toscrape.com/'response = requests.get(url)if response.status_code == 200:    html_content = response.textelse:    print("Failed to retrieve the page")

2. 解析 HTML 内容

接下来,我们使用 BeautifulSoup 来解析 HTML 并查找我们需要的元素。

from bs4 import BeautifulSoupsoup = BeautifulSoup(html_content, 'html.parser')book_containers = soup.find_all('article', class_='product_pod')

上面代码中,我们查找所有包含书籍信息的 <article> 标签,它们具有类名 product_pod

3. 提取数据

对于每个书籍容器,我们可以提取书名、价格和库存状态等信息。

for book in book_containers:    title = book.h3.a['title']    price = book.find('p', class_='price_color').text    availability = book.find('p', class_='instock availability').text.strip()    print(f"Title: {title}")    print(f"Price: {price}")    print(f"Availability: {availability}")    print("-" * 50)

输出结果如下:

Title: A Light in the AtticPrice: £51.77Availability: In stock--------------------------------------------------Title: Fifty Shades of GreyPrice: £52.13Availability: In stock--------------------------------------------------...

扩展功能:分页爬取与数据存储

1. 分页爬取

该网站有多个页面,我们可以循环访问每个页面来获取更多书籍信息。

base_url = 'https://books.toscrape.com/catalogue/page-{}.html'for page_num in range(1, 6):  # 爬取前5页    url = base_url.format(page_num)    response = requests.get(url)    if response.status_code != 200:        print(f"Failed to fetch page {page_num}")        continue    soup = BeautifulSoup(response.text, 'html.parser')    books = soup.find_all('article', class_='product_pod')    for book in books:        title = book.h3.a['title']        price = book.find('p', class_='price_color').text        availability = book.find('p', class_='instock availability').text.strip()        print(f"Page {page_num} - Title: {title}, Price: {price}, Availability: {availability}")

2. 将数据保存到 CSV 文件中

为了便于后续分析,我们可以将爬取的数据保存为 CSV 文件。

import csvwith open('books_data.csv', mode='w', newline='', encoding='utf-8') as file:    writer = csv.writer(file)    writer.writerow(['Title', 'Price', 'Availability'])    for page_num in range(1, 6):        url = base_url.format(page_num)        response = requests.get(url)        if response.status_code != 200:            print(f"Failed to fetch page {page_num}")            continue        soup = BeautifulSoup(response.text, 'html.parser')        books = soup.find_all('article', class_='product_pod')        for book in books:            title = book.h3.a['title']            price = book.find('p', class_='price_color').text            availability = book.find('p', class_='instock availability').text.strip()            writer.writerow([title, price, availability])

运行后会在当前目录下生成一个名为 books_data.csv 的文件,内容如下:

Title,Price,AvailabilityA Light in the Attic,£51.77,In stockFifty Shades of Grey,£52.13,In stock...

注意事项与合法性

尽管网络爬虫非常有用,但在使用时需要注意以下几点:

遵守 robots.txt 协议:检查目标网站的 /robots.txt 文件,了解哪些页面允许爬取。设置合理的请求频率:避免对服务器造成过大压力,建议添加延时:
import timetime.sleep(1)  # 每次请求间隔1秒
使用 User-Agent:有些网站会屏蔽没有设置 User-Agent 的请求。
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'}response = requests.get(url, headers=headers)

总结

本文介绍了使用 Python 实现 Web 爬虫的基本方法,涵盖了请求发送、HTML 解析、数据提取以及数据存储等关键步骤。通过这个例子,你已经掌握了构建一个简单但功能完整的爬虫所需的技能。

当然,实际应用中的爬虫可能需要更复杂的逻辑,例如处理 JavaScript 渲染的内容(可以考虑使用 Selenium 或 Playwright)、应对反爬机制(如验证码、IP封禁)等。不过,掌握基础是迈向高级应用的第一步。


参考资料

Requests 官方文档BeautifulSoup 官方文档Books to Scrape 示例网站

如果你喜欢这篇文章,欢迎继续关注更多技术实践类文章!

免责声明:本文来自网站作者,不代表CIUIC的观点和立场,本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。客服邮箱:ciuic@ciuic.com

目录[+]

您是本站第15180名访客 今日有30篇新文章

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!