Python 网络爬虫基础教程:豆瓣电影 Top250 数据抓取实战
1. 爬虫概述
1.1 什么是网络爬虫
网络爬虫(Web Crawler),又称网页蜘蛛或网络机器人,是一种按照一定规则自动抓取互联网信息的程序。它模拟浏览器发送网络请求,接收响应数据,并从中提取所需信息。
原则上,只要是浏览器能做的事情,爬虫理论上都能做。爬虫广泛应用于数据采集、舆情监控、竞品分析等领域。
1.2 为什么使用爬虫
在互联网大数据时代,信息获取虽然自由,但海量数据中往往夹杂着大量无效垃圾信息。例如新浪微博每天产生数亿条状态更新,搜索引擎返回的结果也数以亿计。
如何从碎片化信息中筛选出对自己有用的内容?答案是数据清洗与分析。网络爬虫技术能够自动化完成这一过程,无论是生活服务、出行旅行、金融投资还是制造业产品需求,都可以通过爬虫获取精准有效的信息加以利用。
2. 环境准备
2.1 语言选择
虽然 PHP、Java、C++ 等语言都可以编写爬虫,但 Python 因其语法简洁、库丰富且功能齐全,成为爬虫开发的首选语言。
2.2 安装 Python
建议下载官方最新稳定版本(如 Python 3.8+)。安装时请勾选 "Add Python to PATH"。
2.3 开发工具
推荐使用 PyCharm 或 VS Code 作为集成开发环境(IDE)。
2.4 依赖库安装
运行爬虫通常需要以下第三方库,可通过 pip 命令安装:
pip install beautifulsoup4 xlwt requests
- BeautifulSoup: 用于解析 HTML 和 XML 文档。
- xlwt: 用于将数据写入 Excel 文件。
- requests: (可选) 简化 HTTP 请求,本教程主要使用标准库
urllib。
3. 项目实战:爬取豆瓣电影 Top250
本项目目标是从豆瓣电影官网爬取 Top250 榜单的详细信息,包括电影链接、评分、简介等,并保存为 Excel 文件。
目标网址: https://movie.douban.com/top250
爬取字段:
- 电影详情链接
- 图片链接
- 影片中文名
- 影片外国名
- 评分
- 评价数
- 概况
- 相关信息
4. 代码实现
以下是完整的爬虫代码,包含注释说明。
# -*- coding: utf-8 -*-
import re
from bs4 import BeautifulSoup
import urllib.request
import urllib.error
import xlwt
# 定义正则表达式对象
findLink = re.compile()
findImgSrc = re.(, re.S)
findTitle = re.()
findRating = re.()
findJudge = re.()
findInq = re.()
findBd = re.(, re.S)
():
baseurl =
datalist = getData(baseurl)
savepath =
saveData(datalist, savepath)
()
():
datalist = []
i (, ):
url = baseurl + (i * )
html = askURL(url)
soup = BeautifulSoup(html, )
item soup.find_all(, class_=):
data = []
item = (item)
link = re.findall(findLink, item)[]
data.append(link)
imgSrc = re.findall(findImgSrc, item)[]
data.append(imgSrc)
titles = re.findall(findTitle, item)
(titles) == :
ctitle = titles[]
otitle = titles[].replace(, )
data.append(ctitle)
data.append(otitle)
:
data.append(titles[])
data.append()
rating = re.findall(findRating, item)[]
data.append(rating)
judgeNum = re.findall(findJudge, item)[]
data.append(judgeNum)
inq = re.findall(findInq, item)
(inq) != :
inq = inq[].replace(, )
data.append(inq)
:
data.append()
bd = re.findall(findBd, item)[]
bd = re.sub(, , bd)
bd = re.sub(, , bd)
data.append(bd.strip())
datalist.append(data)
datalist
():
head = {
:
}
request = urllib.request.Request(url, headers=head)
html =
:
response = urllib.request.urlopen(request)
html = response.read().decode()
urllib.error.URLError e:
(e, ):
()
(e, ):
()
html
():
()
book = xlwt.Workbook(encoding=, style_compression=)
sheet = book.add_sheet(, cell_overwrite_ok=)
col = (, , , , , , , )
i (, ):
sheet.write(, i, col[i])
i (, ):
data = datalist[i]
j (, ):
sheet.write(i + , j, data[j])
book.save(savepath)
__name__ == :
main()


