爬虫基础概念
网络爬虫(又被称为网页蜘蛛,网络机器人)模拟浏览器发送网络请求,接收请求响应,按照一定的规则自动抓取互联网信息的程序。原则上,只要是浏览器能做的事情,爬虫都能够做。
为什么使用爬虫?
互联网大数据时代,信息获取自由但存在海量无效垃圾信息。通过技术将相关内容收集起来,分析筛选才能得到真正需要的信息。该技术应用范畴广泛,包括生活服务、金融投资、制造业产品市场需求等。
准备工作
虽然多种语言可做爬虫,但 Python 相对简单且功能齐全。
- 环境配置:下载 Python 3.x 版本及运行环境(如 PyCharm)。
- 依赖库:需要安装支持爬虫运行的库,常见包括
BeautifulSoup、re、urllib、xlwt等。

项目实战:爬取豆瓣电影 Top250
目标网站:https://movie.douban.com/top250
爬取内容包括:电影详情链接、图片链接、影片中文名、外国名、评分、评价数、概况及相关信息。最终结果可保存为 xls 表格或数据库。

代码分析与实现
核心流程分为三步:爬取网页、解析数据、保存数据。
# -*- coding = utf-8 -*-
from bs4 import BeautifulSoup # 网页解析,获取数据
import re # 正则表达式,进行文字匹配
import urllib.request, urllib.error # 制定 URL,获取网页数据
import xlwt # 进行 excel 操作
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()
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[]
data.append(ctitle)
otitle = titles[].replace(, )
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.code)
(e, ):
(e.reason)
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()
()



