Python 爬虫从零入门:豆瓣电影数据抓取实战指南
1. 什么是网络爬虫
网络爬虫(Web Crawler),又称网页蜘蛛或网络机器人,是一种按照一定规则自动抓取互联网信息的程序。它模拟浏览器发送 HTTP 请求,接收服务器响应,并解析返回的数据。原则上,只要是浏览器能做的事情,爬虫理论上都能做。
在互联网大数据时代,信息获取虽然自由,但海量数据中往往夹杂着大量无效垃圾信息。通过爬虫技术收集相关内容并进行分析筛选,是获取精准有效信息的关键手段。该技术广泛应用于生活服务、出行旅行、金融投资及各类制造业的产品市场需求分析等领域。
2. 开发环境准备
虽然多种语言(如 PHP, Java, C#)均可用于爬虫开发,但 Python 因其语法简洁、库丰富且功能齐全,成为首选。
2.1 安装 Python
建议下载官方最新稳定版本(如 Python 3.8+)。安装时请注意勾选 "Add Python to PATH"。
2.2 代码编辑器
推荐使用 PyCharm 或 VS Code。PyCharm 对 Python 支持良好,适合大型项目;VS Code 轻量灵活。
2.3 依赖库安装
运行爬虫通常需要以下第三方库,可通过 pip 命令安装:
pip install beautifulsoup4 xlwt
*注:urllib 和 re 为 Python 标准库,无需额外安装。
核心库说明:*
BeautifulSoup: 网页解析,提取数据。re: 正则表达式,进行复杂文本匹配。urllib.request: 制定 URL,获取网页原始数据。xlwt: 将数据写入 Excel 文件(旧版 .xls)。sqlite3: 可选,用于本地数据库存储。
3. 项目实战:抓取豆瓣 Top250 电影
本项目目标是爬取豆瓣电影 Top250 的详细信息,包括:电影详情链接、图片链接、影片中文名、外国名、评分、评价数、概况及相关信息。
3.1 完整代码实现
# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import re
import urllib.request
import urllib.error
import xlwt
# 定义正则表达式对象
findLink = re.compile(r'<a href="(.*?)">')
findImgSrc = re.compile(r'<img.*src="(.*?)"', re.S)
findTitle = re.compile(r'<span class="title">(.*)</span>')
findRating = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
findJudge = re.compile()
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_str = (item)
link = re.findall(findLink, item_str)[]
data.append(link)
imgSrc = re.findall(findImgSrc, item_str)[]
data.append(imgSrc)
titles = re.findall(findTitle, item_str)
(titles) == :
ctitle = titles[]
otitle = titles[].replace(, )
data.append(ctitle)
data.append(otitle)
:
data.append(titles[])
data.append()
rating = re.findall(findRating, item_str)[]
data.append(rating)
judgeNum = re.findall(findJudge, item_str)[]
data.append(judgeNum)
inq = re.findall(findInq, item_str)
(inq) != :
inq = inq[].replace(, )
data.append(inq)
:
data.append()
bd = re.findall(findBd, item_str)[]
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()


