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

昨天 4阅读

在当今数据驱动的世界中,网络爬虫(Web Crawler)已经成为获取互联网数据的重要工具。本文将介绍如何使用 Python 编写一个简单的 Web 爬虫,并展示如何从网页中提取有用的信息。我们将使用 requestsBeautifulSoup 两个主要库来完成这项任务。

目录

什么是Web爬虫?准备环境发送HTTP请求解析HTML内容提取数据保存数据到CSV文件总结

什么是Web爬虫?

Web爬虫是一种自动访问网页并抓取信息的程序。搜索引擎如Google、Bing等都依赖于大规模的爬虫系统来索引全球的网页内容。除了搜索引擎之外,爬虫也被广泛用于价格监控、舆情分析、市场研究等领域。


准备环境

首先,我们需要安装必要的 Python 库:

pip install requests beautifulsoup4 lxml pandas
requests:用于发送HTTP请求,获取网页内容。beautifulsoup4:用于解析HTML文档。lxml:提供更快的HTML解析速度。pandas:用于处理和保存数据。

发送HTTP请求

我们首先使用 requests 库向目标网站发送 HTTP 请求,获取网页内容。

import requestsdef fetch_page(url):    try:        headers = {            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0 Safari/537.36'        }        response = requests.get(url, headers=headers, timeout=10)        if response.status_code == 200:            return response.text        else:            print(f"Failed to fetch page: {url}, status code: {response.status_code}")            return None    except Exception as e:        print(f"Error fetching page: {e}")        return None# 示例调用html_content = fetch_page("https://example.com")print(html_content[:500])  # 打印前500个字符

注意:在实际项目中,请遵守目标网站的 robots.txt 文件和相关法律法规,避免对服务器造成过大压力。


解析HTML内容

我们使用 BeautifulSoup 来解析 HTML 内容,从而更容易地提取所需的数据。

from bs4 import BeautifulSoupdef parse_html(html_content):    soup = BeautifulSoup(html_content, "lxml")  # 使用lxml解析器    title = soup.title.string if soup.title else "No Title"    print(f"Page Title: {title}")    return soup# 示例调用soup = parse_html(html_content)

提取数据

为了演示目的,我们以抓取一个虚拟的商品列表页面为例。假设每个商品包含名称、价格和链接三个字段。

示例HTML结构

<div class="product">    <h3 class="name">商品A</h3>    <span class="price">¥99.99</span>    <a href="/products/a" class="link">查看详情</a></div><div class="product">    <h3 class="name">商品B</h3>    <span class="price">¥129.99</span>    <a href="/products/b" class="link">查看详情</a></div>

我们可以使用以下代码提取这些信息:

def extract_products(soup):    products = []    product_divs = soup.find_all("div", class_="product")    for div in product_divs:        name = div.find("h3", class_="name").get_text(strip=True)        price = div.find("span", class_="price").get_text(strip=True)        link = div.find("a", class_="link")['href']        full_link = f"https://example.com{link}"        products.append({            "name": name,            "price": price,            "link": full_link        })    return products# 示例调用products = extract_products(soup)for p in products:    print(p)

输出示例:

{'name': '商品A', 'price': '¥99.99', 'link': 'https://example.com/products/a'}{'name': '商品B', 'price': '¥129.99', 'link': 'https://example.com/products/b'}

保存数据到CSV文件

最后,我们将提取的数据保存为 CSV 文件,方便后续分析或导入数据库。

import pandas as pddef save_to_csv(products, filename="products.csv"):    df = pd.DataFrame(products)    df.to_csv(filename, index=False, encoding="utf-8-sig")    print(f"数据已保存至 {filename}")# 示例调用save_to_csv(products)

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

name,price,link商品A,¥99.99,https://example.com/products/a商品B,¥129.99,https://example.com/products/b

总结

通过本文的学习,我们掌握了使用 Python 实现一个简单 Web 爬虫的基本流程,包括:

使用 requests 获取网页内容;使用 BeautifulSoup 解析 HTML;提取特定结构的数据;将数据保存为 CSV 文件。

当然,实际应用中的爬虫可能更加复杂,比如需要处理 JavaScript 渲染的内容(此时可考虑使用 Selenium 或 Playwright)、设置代理、应对反爬机制等。但掌握本文所讲的基础知识,是迈向高级爬虫开发的第一步。


参考资料

Requests 官方文档BeautifulSoup 官方文档Pandas 官方文档

如需进一步学习,可以尝试爬取真实网站(如豆瓣电影、京东商品页等),并结合数据库进行持久化存储。

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

目录[+]

您是本站第2378名访客 今日有6篇新文章

微信号复制成功

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