使用 Python 编写一个简单的网页爬虫

在数据时代,信息是金子。而网络上蕴藏着海量的数据资源,掌握一门自动化获取数据的技术就尤为重要。今天我们将通过 Python 来编写一个简单的网页爬虫,从一个网页中提取我们想要的数据内容。

一、什么是网页爬虫?

网页爬虫(Web Crawler)是一种自动访问网站并抓取其页面内容的程序。它模拟浏览器的行为,访问网站并提取页面中的结构化数据,如文本、图片、链接等。

二、准备工作

我们需要安装以下 Python 库: pip install requests beautifulsoup4

  • requests:用于模拟浏览器请求网页
  • BeautifulSoup:用于解析网页 HTML 结构,提取我们想要的数据。

三、实战:爬取豆瓣电影 Top 250

我们以 豆瓣电影 Top 250 为例,爬取电影标题和评分。

1. 获取网页内容:

python 复制代码
import requests

url = 'https://movie.douban.com/top250'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/114.0.0.0 Safari/537.36'
}

response = requests.get(url, headers=headers)
html = response.text
print(html[:500])  # 预览前500个字符

这里使用了 User-Agent 头信息,模拟浏览器访问,以防被反爬。

2. 解析网页内容

python 复制代码
from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'html.parser')
movie_items = soup.find_all('div', class_='item')

for item in movie_items:
    title = item.find('span', class_='title').text
    rating = item.find('span', class_='rating_num').text
    print(f'电影名称:{title},评分:{rating}')

3. 添加分页功能

豆瓣 Top250 分为 10 页,每页 25 部电影,我们需要循环访问每一页:

python 复制代码
def fetch_movies():
    for start in range(0, 250, 25):
        url = f'https://movie.douban.com/top250?start={start}'
        response = requests.get(url, headers=headers)
        soup = BeautifulSoup(response.text, 'html.parser')
        movie_items = soup.find_all('div', class_='item')

        for item in movie_items:
            title = item.find('span', class_='title').text
            rating = item.find('span', class_='rating_num').text
            print(f'电影名称:{title},评分:{rating}')

fetch_movies()

4.保存数据到 CSV 文件

我们可以将爬取到的数据保存到 .csv 文件中,方便后续分析:

python 复制代码
import csv

with open('douban_top250.csv', 'w', encoding='utf-8-sig', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['电影名称', '评分'])

    for start in range(0, 250, 25):
        url = f'https://movie.douban.com/top250?start={start}'
        response = requests.get(url, headers=headers)
        soup = BeautifulSoup(response.text, 'html.parser')
        movie_items = soup.find_all('div', class_='item')

        for item in movie_items:
            title = item.find('span', class_='title').text
            rating = item.find('span', class_='rating_num').text
            writer.writerow([title, rating])

四、遇到的问题与解决方案

问题 解决方式
被识别为爬虫封IP 添加 User-Agent,设置请求间隔或使用代理
网页结构变化 使用浏览器开发者工具分析网页结构,更新代码逻辑
中文乱码 注意文件编码使用 utf-8-sig

五、总结

本文主要介绍了如何使用 Python 爬取网页数据,并完成了一个实战项目 ------ 爬取豆瓣 Top250 电影数据,并保存为 CSV 文件。这只是爬虫的起点,更多高级技巧还包括:使用 Selenium 控制浏览器抓取动态页面、使用异步爬虫提升效率(如 aiohttp、scrapy)、使用 IP 代理池绕过反爬,学习爬虫的路程还很漫长。

当然您如果急需获取数据,我也建议您可以试一试一些采集工具:比如浣石采集器、八爪鱼采集器、后羿采集器等都是不错的选择!

相关推荐
weixin_468635291 小时前
用python获取双色球历史数据,纯数据处理,非爬虫
开发语言·爬虫·python
qq_252614413 小时前
python爬虫爬取视频
开发语言·爬虫·python
猫头虎1 天前
PyCharm 2025.3 最新变化:值得更新吗?
ide·爬虫·python·pycharm·beautifulsoup·ai编程·pip
有味道的男人1 天前
1688数据采集:官方API与网页爬虫实战指南
java·服务器·爬虫
有味道的男人1 天前
Python 爬虫框架设计:类封装与工程化实践
开发语言·爬虫·python
老王Bingo2 天前
Qwen Code + Chrome DevTools MCP,让爬虫、数据采集、自动化测试效率提升 100 倍
前端·爬虫·chrome devtools
小白学大数据2 天前
拼多多数据抓取:Python 爬虫中的 JS 逆向基础案例分析
开发语言·javascript·爬虫·python
道法自然|~2 天前
【PHP】简单的脚本/扫描器拦截与重要文件保护
开发语言·爬虫·php
小尘要自信2 天前
Bright Data AI Scraper Studio:企业级AI爬虫解决方案,让数据采集更智能
人工智能·爬虫·通过ai自动化爬虫·prompt生产爬虫·云端爬虫平台
失败又激情的man2 天前
爬虫逆向之观安(观镜WEB应用安全防护系统)
爬虫