使用Python进行Web数据抓取:实战教程

今天 5阅读

在当今大数据时代,网络上的信息量非常庞大,如何高效地获取和处理这些数据成为了一项重要的技能。网络爬虫(Web Scraper) 是一种自动化从网页中提取结构化数据的技术,广泛应用于数据分析、市场研究、舆情监控等领域。

本文将带你一步步实现一个简单的 Python 网络爬虫项目,包括使用 requestsBeautifulSoup 两个库来抓取网页内容,并将其保存为结构化的 CSV 文件。我们还将介绍一些基本的反爬应对策略,帮助你更好地理解实际开发中可能遇到的问题。


环境准备

首先,确保你的系统上安装了以下 Python 库:

requestsbeautifulsoup4pandas

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

pip install requests beautifulsoup4 pandas

目标网站分析

我们将以 https://books.toscrape.com/ 为例,这是一个专门为练习爬虫而设计的网站,提供了一个虚拟书店的页面,里面包含了各种书籍的信息。

我们的目标是抓取该网站首页所有书籍的书名、价格和评分信息,并将这些数据保存到 CSV 文件中。

页面结构分析

打开 https://books.toscrape.com/ 并查看网页源代码或使用浏览器开发者工具(F12),我们可以发现每本书的信息都包含在一个 <article> 标签中,类名为 product_pod

例如,一本书的 HTML 结构如下:

<article class="product_pod">    <h3><a href="catalogue/a-light-in-the-attic_1000/index.html" title="A Light in the Attic">A Light in the Attic</a></h3>    <div class="product_price">        <p class="price_color">£51.77</p>    </div>    <p class="star-rating Three"></p></article>

从中可以提取:

书名:<a> 标签中的文本价格:<p class="price_color"> 的内容星级评分:<p class="star-rating XXXX"> 中的 XXXX 部分,如 Three 表示三颗星

编写爬虫代码

下面是一个完整的 Python 爬虫程序,用于抓取并保存书籍信息。

import requestsfrom bs4 import BeautifulSoupimport pandas as pd# 定义请求头,模拟浏览器访问headers = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0 Safari/537.36'}def fetch_books(url):    # 发送HTTP请求    response = requests.get(url, headers=headers)    # 检查是否成功    if response.status_code != 200:        print(f"Failed to retrieve page: {url}")        return []    # 解析HTML内容    soup = BeautifulSoup(response.text, 'html.parser')    # 找到所有书籍容器    books = soup.find_all('article', class_='product_pod')    book_data = []    for book in books:        # 提取书名        title = book.h3.a['title']        # 提取价格        price = book.find('p', class_='price_color').text        # 提取评分        rating_class = book.find('p', class_='star-rating')['class']        rating = rating_class[1]  # 第二个类名为评分等级,如 'Three'        # 添加到列表中        book_data.append({            'Title': title,            'Price': price,            'Rating': rating        })    return book_datadef save_to_csv(data, filename='books.csv'):    # 使用pandas保存为CSV文件    df = pd.DataFrame(data)    df.to_csv(filename, index=False)    print(f"Data saved to {filename}")if __name__ == '__main__':    base_url = 'https://books.toscrape.com/'    # 获取书籍数据    books_data = fetch_books(base_url)    # 保存到CSV文件    save_to_csv(books_data)

运行上述程序后,将在当前目录下生成一个名为 books.csv 的文件,内容如下:

TitlePriceRating
A Light in the Attic£51.77Three
Seven Deadly Sins£54.23Five
.........

进阶功能:翻页抓取

目前我们只抓取了首页的内容。如果想要抓取所有页面的数据,我们需要识别分页链接。

观察网站结构,可以发现每个页面都有一个“next”按钮,其 HTML 如下:

<li class="next">    <a href="catalogue/page-2.html">next</a></li>

我们可以修改代码,使其自动遍历所有页面:

def scrape_all_pages(start_url):    current_url = start_url    all_books = []    while True:        print(f"Scraping {current_url}...")        books = fetch_books(current_url)        if not books:            break        all_books.extend(books)        # 解析当前页面,寻找下一页链接        response = requests.get(current_url, headers=headers)        soup = BeautifulSoup(response.text, 'html.parser')        next_link = soup.find('li', class_='next')        if not next_link:            break        # 构建完整URL        current_url = '/'.join(current_url.split('/')[:-1]) + '/' + next_link.a['href']    return all_booksif __name__ == '__main__':    base_url = 'https://books.toscrape.com/'    all_books_data = scrape_all_pages(base_url)    save_to_csv(all_books_data, 'all_books.csv')

反爬虫机制与对策(简单介绍)

虽然这个练习网站没有设置复杂的反爬措施,但在真实场景中,很多网站会采取以下手段防止爬虫:

IP封禁:频繁访问会被封锁IP。验证码:弹出人机验证。动态加载内容:使用 JavaScript 加载数据,需要 Selenium 或 Puppeteer 等工具。User-Agent检测:伪装成浏览器访问。

对于简单的反爬,可以通过以下方式应对:

设置合理的请求间隔(如使用 time.sleep())使用代理 IP 轮换设置随机 User-Agent使用 SeleniumPlaywright 模拟浏览器行为

总结

本篇文章介绍了如何使用 Python 编写一个基础但实用的 Web 数据抓取程序。我们使用了 requests 来发起 HTTP 请求,用 BeautifulSoup 解析 HTML 内容,并最终将数据保存为 CSV 文件。此外,还实现了自动翻页功能,使得爬虫能够抓取整个网站的数据。

网络爬虫是一项强大且实用的技术,但也需要注意合法性和道德性。在抓取任何网站前,请务必阅读其 robots.txt 文件,尊重网站的爬取政策。

如果你希望进一步提升爬虫能力,可以学习以下方向:

使用 Scrapy 框架构建更专业的爬虫系统抓取动态网页内容(使用 Selenium)存储数据到数据库(如 MySQL、MongoDB)分布式爬虫架构设计

附录:参考文档

Requests 官方文档BeautifulSoup 文档Pandas 文档

如需源码或完整工程文件,欢迎留言交流!

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

目录[+]

您是本站第8397名访客 今日有20篇新文章

微信号复制成功

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