使用Python实现一个简单的Web爬虫
在当今数据驱动的世界中,网络爬虫(Web Crawler)已经成为获取互联网数据的重要工具。本文将介绍如何使用 Python 编写一个简单的 Web 爬虫,并展示如何从网页中提取有用的信息。我们将使用 requests
和 BeautifulSoup
两个主要库来完成这项任务。
目录
什么是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 官方文档如需进一步学习,可以尝试爬取真实网站(如豆瓣电影、京东商品页等),并结合数据库进行持久化存储。