🤵♂️ 个人主页:@rain雨雨编程
😄微信公众号:rain雨雨编程
✍🏻作者简介:持续分享机器学习,爬虫,数据分析
🐋 希望大家多多支持,我们一起进步!
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+
目录
🌟 引言
电影爱好者们,是否想过将豆瓣电影Top250的数据一键保存到Excel中,方便随时查看?本文将带你实现这一目标,使用Python编写爬虫程序,抓取豆瓣电影Top250的相关信息,并将其存储为Excel文件。这不仅是一个技术挑战,更是提升数据处理能力的好机会!
📊 效果展示
以下是程序运行后生成的Excel文件截图,展示了电影信息的存储情况:
🛠️ 导入必要的模块
在开始之前,我们需要导入一些Python模块来帮助我们完成爬虫任务。
import requests # 用于发送HTTP请求 from lxml import etree # 用于解析HTML import csv # 用于处理CSV文件import requests # 用于发送HTTP请求 from lxml import etree # 用于解析HTML import csv # 用于处理CSV文件import requests # 用于发送HTTP请求 from lxml import etree # 用于解析HTML import csv # 用于处理CSV文件
如果你的环境中缺少这些模块,可以通过以下命令安装:
pip install requests lxmlpip install requests lxmlpip install requests lxml
如果你遇到模块报错,可以通过以下国内镜像源安装:
-
清华大学:
https://pypi.tuna.tsinghua.edu.cn/simple
-
阿里云:
https://mirrors.aliyun.com/pypi/simple/
-
豆瓣:
https://pypi.douban.com/simple/
-
百度云:
https://pypi.baidu.com/pypi/simple/
-
中科大:
https://pypi.mirrors.ustc.edu.cn/simple/
-
华为云:
https://mirrors.huaweicloud.com/repository/pypi/simple/
-
腾讯云:
https://mirrors.cloud.tencent.com/pypi/simple/
🌐 获取豆瓣电影页面数据
-
发送HTTP请求
:使用requests模块发送GET请求到豆瓣电影Top250的URL。为了模拟浏览器访问,我们需要设置请求头(headers),特别是User-Agent,以避免被网站识别为爬虫。
def getSource(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36' } response = requests.get(url, headers=headers) response.encoding = 'utf-8' # 确保编码正确,防止乱码 return response.text # 返回页面HTML内容def getSource(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36' } response = requests.get(url, headers=headers) response.encoding = 'utf-8' # 确保编码正确,防止乱码 return response.text # 返回页面HTML内容def getSource(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36' } response = requests.get(url, headers=headers) response.encoding = 'utf-8' # 确保编码正确,防止乱码 return response.text # 返回页面HTML内容
🔍 解析电影信息
一旦我们获取了页面数据,下一步就是解析这些数据,提取出每部电影的详细信息。
详细步骤:
-
解析HTML
:使用BeautifulSoup模块解析HTML页面,这是一个强大的库,可以帮助我们轻松提取HTML中的数据。 -
使用正则表达式提取信息
:定义一系列正则表达式来匹配和提取电影的链接、图片、名称、评分等信息。 -
遍历电影条目
:遍历每一页中的每个电影条目(div.item),对每个条目应用正则表达式提取信息,并存储到列表中。
from bs4 import BeautifulSoup import re # 正则表达式模块 # 定义正则表达式模式 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(r'<span>(\d*)人评价</span>') findInq = re.compile(r'<span class="inq">(.*)</span>') findBd = re.compile(r'<p class="">(.*?)</p>', re.S) def getdata(baseurl): datalist = [] # 存储所有电影信息的列表 for i in range(0, 10): # 豆瓣Top250共有10页 url = baseurl + str(i * 25) # 构造每页的URL html = getSource(url) # 获取页面HTML soup = BeautifulSoup(html, "html.parser") # 解析HTML for item in soup.find_all("div", class_='item'): # 遍历每部电影 data = [] # 存储单部电影信息的列表 item = str(item) link = re.findall(findLink, item)[0] # 提取电影详情链接 data.append(link) imgSrc = re.findall(findImgSrc, item)[0] # 提取图片链接 data.append(imgSrc) titles = re.findall(findTitle, item) # 提取电影名称 if len(titles) == 2: onetitle = titles[0] data.append(onetitle) twotitle = titles[1].replace("/", "") data.append(twotitle) else: data.append(titles[0]) data.append(" ") rating = re.findall(findRating, item)[0] # 提取评分 data.append(rating) judgeNum = re.findall(findJudge, item)[0] # 提取评价人数 data.append(judgeNum) inq = re.findall(findInq, item) # 提取电影概述 if len(inq) != 0: inq = inq[0].replace("。", "") data.append(inq) else: data.append(" ") bd = re.findall(findBd, item)[0] # 提取电影相关信息 bd = re.sub('<br(\s+)?/>(\s+)?', " ", bd) bd = re.sub('/', " ", bd) data.append(bd.strip()) datalist.append(data) return datalistfrom bs4 import BeautifulSoup import re # 正则表达式模块 # 定义正则表达式模式 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(r'<span>(\d*)人评价</span>') findInq = re.compile(r'<span class="inq">(.*)</span>') findBd = re.compile(r'<p class="">(.*?)</p>', re.S) def getdata(baseurl): datalist = [] # 存储所有电影信息的列表 for i in range(0, 10): # 豆瓣Top250共有10页 url = baseurl + str(i * 25) # 构造每页的URL html = getSource(url) # 获取页面HTML soup = BeautifulSoup(html, "html.parser") # 解析HTML for item in soup.find_all("div", class_='item'): # 遍历每部电影 data = [] # 存储单部电影信息的列表 item = str(item) link = re.findall(findLink, item)[0] # 提取电影详情链接 data.append(link) imgSrc = re.findall(findImgSrc, item)[0] # 提取图片链接 data.append(imgSrc) titles = re.findall(findTitle, item) # 提取电影名称 if len(titles) == 2: onetitle = titles[0] data.append(onetitle) twotitle = titles[1].replace("/", "") data.append(twotitle) else: data.append(titles[0]) data.append(" ") rating = re.findall(findRating, item)[0] # 提取评分 data.append(rating) judgeNum = re.findall(findJudge, item)[0] # 提取评价人数 data.append(judgeNum) inq = re.findall(findInq, item) # 提取电影概述 if len(inq) != 0: inq = inq[0].replace("。", "") data.append(inq) else: data.append(" ") bd = re.findall(findBd, item)[0] # 提取电影相关信息 bd = re.sub('<br(\s+)?/>(\s+)?', " ", bd) bd = re.sub('/', " ", bd) data.append(bd.strip()) datalist.append(data) return datalistfrom bs4 import BeautifulSoup import re # 正则表达式模块 # 定义正则表达式模式 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(r'<span>(\d*)人评价</span>') findInq = re.compile(r'<span class="inq">(.*)</span>') findBd = re.compile(r'<p class="">(.*?)</p>', re.S) def getdata(baseurl): datalist = [] # 存储所有电影信息的列表 for i in range(0, 10): # 豆瓣Top250共有10页 url = baseurl + str(i * 25) # 构造每页的URL html = getSource(url) # 获取页面HTML soup = BeautifulSoup(html, "html.parser") # 解析HTML for item in soup.find_all("div", class_='item'): # 遍历每部电影 data = [] # 存储单部电影信息的列表 item = str(item) link = re.findall(findLink, item)[0] # 提取电影详情链接 data.append(link) imgSrc = re.findall(findImgSrc, item)[0] # 提取图片链接 data.append(imgSrc) titles = re.findall(findTitle, item) # 提取电影名称 if len(titles) == 2: onetitle = titles[0] data.append(onetitle) twotitle = titles[1].replace("/", "") data.append(twotitle) else: data.append(titles[0]) data.append(" ") rating = re.findall(findRating, item)[0] # 提取评分 data.append(rating) judgeNum = re.findall(findJudge, item)[0] # 提取评价人数 data.append(judgeNum) inq = re.findall(findInq, item) # 提取电影概述 if len(inq) != 0: inq = inq[0].replace("。", "") data.append(inq) else: data.append(" ") bd = re.findall(findBd, item)[0] # 提取电影相关信息 bd = re.sub('<br(\s+)?/>(\s+)?', " ", bd) bd = re.sub('/', " ", bd) data.append(bd.strip()) datalist.append(data) return datalist
💾 保存数据到Excel
解析完数据后,我们需要将这些数据保存到Excel文件中,以便于离线查看和分析。
详细步骤:
-
创建Excel工作簿
:使用xlwt模块创建一个新的Excel工作簿,并定义一个工作表。 -
写入列标题
:在工作表的第一行写入列标题,对应我们之前提取的电影信息字段。 -
写入电影数据
:遍历每部电影的信息列表,将数据写入对应的列中。
import xlwt # 用于写入Excel文件 def savedata(datalist, savepath): workbook = xlwt.Workbook(encoding="utf-8", style_compression=0) # 创建Excel工作簿 worksheet = workbook.add_sheet("豆瓣电影top250", cell_overwrite_ok=True) # 创建工作表 column = ("电影详情链接", "图片链接", "影片中文名", "影片外国名", "评分", "评价数", "概况", "相关信息") # 列标题 for i in range(0, 8): worksheet.write(0, i, column[i]) # 写入列标题 for i in range(0, 250): # 遍历每部电影信息 data = datalist[i] for j in range(0, 8): # 遍历每部电影的每个信息 worksheet.write(i + 1, j, data[j]) # 写入电影信息 workbook.save(savepath) # 保存Excel文件import xlwt # 用于写入Excel文件 def savedata(datalist, savepath): workbook = xlwt.Workbook(encoding="utf-8", style_compression=0) # 创建Excel工作簿 worksheet = workbook.add_sheet("豆瓣电影top250", cell_overwrite_ok=True) # 创建工作表 column = ("电影详情链接", "图片链接", "影片中文名", "影片外国名", "评分", "评价数", "概况", "相关信息") # 列标题 for i in range(0, 8): worksheet.write(0, i, column[i]) # 写入列标题 for i in range(0, 250): # 遍历每部电影信息 data = datalist[i] for j in range(0, 8): # 遍历每部电影的每个信息 worksheet.write(i + 1, j, data[j]) # 写入电影信息 workbook.save(savepath) # 保存Excel文件import xlwt # 用于写入Excel文件 def savedata(datalist, savepath): workbook = xlwt.Workbook(encoding="utf-8", style_compression=0) # 创建Excel工作簿 worksheet = workbook.add_sheet("豆瓣电影top250", cell_overwrite_ok=True) # 创建工作表 column = ("电影详情链接", "图片链接", "影片中文名", "影片外国名", "评分", "评价数", "概况", "相关信息") # 列标题 for i in range(0, 8): worksheet.write(0, i, column[i]) # 写入列标题 for i in range(0, 250): # 遍历每部电影信息 data = datalist[i] for j in range(0, 8): # 遍历每部电影的每个信息 worksheet.write(i + 1, j, data[j]) # 写入电影信息 workbook.save(savepath) # 保存Excel文件
🚀 程序入口
程序入口是执行整个爬虫任务的地方,它将调用上述函数来完成数据的获取、解析和保存。
详细步骤:
-
定义基础URL
:设置豆瓣电影Top250的基础URL。 -
获取数据
:调用getdata函数,传入基础URL,获取电影数据。 -
保存数据
:调用savedata函数,传入电影数据和保存路径,将数据保存到Excel文件。 -
执行主函数
:如果这是主程序,则执行main函数,并在完成后打印成功信息。
if __name__ == '__main__': baseurl = "https://movie.douban.com/top250?start=" # 豆瓣电影Top250的基础URL datalist = getdata(baseurl) # 获取电影数据 savepath = ".\\豆瓣电影top250.xls" # 保存路径 savedata(datalist, savepath) # 保存数据到Excel print("爬取成功!!!") # 打印成功信息if __name__ == '__main__': baseurl = "https://movie.douban.com/top250?start=" # 豆瓣电影Top250的基础URL datalist = getdata(baseurl) # 获取电影数据 savepath = ".\\豆瓣电影top250.xls" # 保存路径 savedata(datalist, savepath) # 保存数据到Excel print("爬取成功!!!") # 打印成功信息if __name__ == '__main__': baseurl = "https://movie.douban.com/top250?start=" # 豆瓣电影Top250的基础URL datalist = getdata(baseurl) # 获取电影数据 savepath = ".\\豆瓣电影top250.xls" # 保存路径 savedata(datalist, savepath) # 保存数据到Excel print("爬取成功!!!") # 打印成功信息
💻 源码
以下是完整的源码,你可以直接复制并在你的Python环境中运行:
from bs4 import BeautifulSoup import re # 正则表达式,进行文字匹配 import urllib.request, urllib.error # 指定URL,获取网页数据 import xlwt # 进行excel操作 def main(): baseurl = "https://movie.douban.com/top250?start=" datalist = getdata(baseurl) savepath = ".\\豆瓣电影top250.xls" savedata(datalist, savepath) # compile返回的是匹配到的模式对象 findLink = re.compile(r'<a href="(.*?)">') # 正则表达式模式的匹配,影片详情 findImgSrc = re.compile(r'<img.*src="(.*?)"', re.S) # 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(r'<span>(\d*)人评价</span>') # 找到评价人数 #\d表示数字 findInq = re.compile(r'<span class="inq">(.*)</span>') # 找到概况 findBd = re.compile(r'<p class="">(.*?)</p>', re.S) # 找到影片的相关内容,如导演,演员等 ##获取网页数据 def getdata(baseurl): datalist = [] for i in range(0, 10): url = baseurl + str(i * 25) ##豆瓣页面上一共有十页信息,一页爬取完成后继续下一页 html = geturl(url) soup = BeautifulSoup(html, "html.parser") # 构建了一个BeautifulSoup类型的对象soup,是解析html的 for item in soup.find_all("div", class_='item'): ##find_all返回的是一个列表 data = [] # 保存HTML中一部电影的所有信息 item = str(item) ##需要先转换为字符串findall才能进行搜索 link = re.findall(findLink, item)[0] ##findall返回的是列表,索引只将值赋值 data.append(link) imgSrc = re.findall(findImgSrc, item)[0] data.append(imgSrc) titles = re.findall(findTitle, item) ##有的影片只有一个中文名,有的有中文和英文 if (len(titles) == 2): onetitle = titles[0] data.append(onetitle) twotitle = titles[1].replace("/", "") # 去掉无关的符号 data.append(twotitle) else: data.append(titles) data.append(" ") ##将下一个值空出来 rating = re.findall(findRating, item)[0] # 添加评分 data.append(rating) judgeNum = re.findall(findJudge, item)[0] # 添加评价人数 data.append(judgeNum) inq = re.findall(findInq, item) # 添加概述 if len(inq) != 0: inq = inq[0].replace("。", "") data.append(inq) else: data.append(" ") bd = re.findall(findBd, item)[0] bd = re.sub('<br(\s+)?/>(\s+)?', " ", bd) bd = re.sub('/', " ", bd) data.append(bd.strip()) # 去掉前后的空格 datalist.append(data) return datalist ##保存数据 def savedata(datalist, savepath): workbook = xlwt.Workbook(encoding="utf-8", style_compression=0) ##style_compression=0不压缩 worksheet = workbook.add_sheet("豆瓣电影top250", cell_overwrite_ok=True) # cell_overwrite_ok=True再次写入数据覆盖 column = ("电影详情链接", "图片链接", "影片中文名", "影片外国名", "评分", "评价数", "概况", "相关信息") ##execl项目栏 for i in range(0, 8): worksheet.write(0, i, column[i]) # 将column[i]的内容保存在第0行,第i列 for i in range(0, 250): data = datalist[i] for j in range(0, 8): worksheet.write(i + 1, j, data[j]) workbook.save(savepath) ##爬取网页 def geturl(url): head = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36" } req = urllib.request.Request(url, headers=head) try: ##异常检测 response = urllib.request.urlopen(req) html = response.read().decode("utf-8") except urllib.error.URLError as e: if hasattr(e, "code"): ##如果错误中有这个属性的话 print(e.code) if hasattr(e, "reason"): print(e.reason) return html if __name__ == '__main__': main() print("爬取成功!!!")from bs4 import BeautifulSoup import re # 正则表达式,进行文字匹配 import urllib.request, urllib.error # 指定URL,获取网页数据 import xlwt # 进行excel操作 def main(): baseurl = "https://movie.douban.com/top250?start=" datalist = getdata(baseurl) savepath = ".\\豆瓣电影top250.xls" savedata(datalist, savepath) # compile返回的是匹配到的模式对象 findLink = re.compile(r'<a href="(.*?)">') # 正则表达式模式的匹配,影片详情 findImgSrc = re.compile(r'<img.*src="(.*?)"', re.S) # 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(r'<span>(\d*)人评价</span>') # 找到评价人数 #\d表示数字 findInq = re.compile(r'<span class="inq">(.*)</span>') # 找到概况 findBd = re.compile(r'<p class="">(.*?)</p>', re.S) # 找到影片的相关内容,如导演,演员等 ##获取网页数据 def getdata(baseurl): datalist = [] for i in range(0, 10): url = baseurl + str(i * 25) ##豆瓣页面上一共有十页信息,一页爬取完成后继续下一页 html = geturl(url) soup = BeautifulSoup(html, "html.parser") # 构建了一个BeautifulSoup类型的对象soup,是解析html的 for item in soup.find_all("div", class_='item'): ##find_all返回的是一个列表 data = [] # 保存HTML中一部电影的所有信息 item = str(item) ##需要先转换为字符串findall才能进行搜索 link = re.findall(findLink, item)[0] ##findall返回的是列表,索引只将值赋值 data.append(link) imgSrc = re.findall(findImgSrc, item)[0] data.append(imgSrc) titles = re.findall(findTitle, item) ##有的影片只有一个中文名,有的有中文和英文 if (len(titles) == 2): onetitle = titles[0] data.append(onetitle) twotitle = titles[1].replace("/", "") # 去掉无关的符号 data.append(twotitle) else: data.append(titles) data.append(" ") ##将下一个值空出来 rating = re.findall(findRating, item)[0] # 添加评分 data.append(rating) judgeNum = re.findall(findJudge, item)[0] # 添加评价人数 data.append(judgeNum) inq = re.findall(findInq, item) # 添加概述 if len(inq) != 0: inq = inq[0].replace("。", "") data.append(inq) else: data.append(" ") bd = re.findall(findBd, item)[0] bd = re.sub('<br(\s+)?/>(\s+)?', " ", bd) bd = re.sub('/', " ", bd) data.append(bd.strip()) # 去掉前后的空格 datalist.append(data) return datalist ##保存数据 def savedata(datalist, savepath): workbook = xlwt.Workbook(encoding="utf-8", style_compression=0) ##style_compression=0不压缩 worksheet = workbook.add_sheet("豆瓣电影top250", cell_overwrite_ok=True) # cell_overwrite_ok=True再次写入数据覆盖 column = ("电影详情链接", "图片链接", "影片中文名", "影片外国名", "评分", "评价数", "概况", "相关信息") ##execl项目栏 for i in range(0, 8): worksheet.write(0, i, column[i]) # 将column[i]的内容保存在第0行,第i列 for i in range(0, 250): data = datalist[i] for j in range(0, 8): worksheet.write(i + 1, j, data[j]) workbook.save(savepath) ##爬取网页 def geturl(url): head = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36" } req = urllib.request.Request(url, headers=head) try: ##异常检测 response = urllib.request.urlopen(req) html = response.read().decode("utf-8") except urllib.error.URLError as e: if hasattr(e, "code"): ##如果错误中有这个属性的话 print(e.code) if hasattr(e, "reason"): print(e.reason) return html if __name__ == '__main__': main() print("爬取成功!!!")from bs4 import BeautifulSoup import re # 正则表达式,进行文字匹配 import urllib.request, urllib.error # 指定URL,获取网页数据 import xlwt # 进行excel操作 def main(): baseurl = "https://movie.douban.com/top250?start=" datalist = getdata(baseurl) savepath = ".\\豆瓣电影top250.xls" savedata(datalist, savepath) # compile返回的是匹配到的模式对象 findLink = re.compile(r'<a href="(.*?)">') # 正则表达式模式的匹配,影片详情 findImgSrc = re.compile(r'<img.*src="(.*?)"', re.S) # 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(r'<span>(\d*)人评价</span>') # 找到评价人数 #\d表示数字 findInq = re.compile(r'<span class="inq">(.*)</span>') # 找到概况 findBd = re.compile(r'<p class="">(.*?)</p>', re.S) # 找到影片的相关内容,如导演,演员等 ##获取网页数据 def getdata(baseurl): datalist = [] for i in range(0, 10): url = baseurl + str(i * 25) ##豆瓣页面上一共有十页信息,一页爬取完成后继续下一页 html = geturl(url) soup = BeautifulSoup(html, "html.parser") # 构建了一个BeautifulSoup类型的对象soup,是解析html的 for item in soup.find_all("div", class_='item'): ##find_all返回的是一个列表 data = [] # 保存HTML中一部电影的所有信息 item = str(item) ##需要先转换为字符串findall才能进行搜索 link = re.findall(findLink, item)[0] ##findall返回的是列表,索引只将值赋值 data.append(link) imgSrc = re.findall(findImgSrc, item)[0] data.append(imgSrc) titles = re.findall(findTitle, item) ##有的影片只有一个中文名,有的有中文和英文 if (len(titles) == 2): onetitle = titles[0] data.append(onetitle) twotitle = titles[1].replace("/", "") # 去掉无关的符号 data.append(twotitle) else: data.append(titles) data.append(" ") ##将下一个值空出来 rating = re.findall(findRating, item)[0] # 添加评分 data.append(rating) judgeNum = re.findall(findJudge, item)[0] # 添加评价人数 data.append(judgeNum) inq = re.findall(findInq, item) # 添加概述 if len(inq) != 0: inq = inq[0].replace("。", "") data.append(inq) else: data.append(" ") bd = re.findall(findBd, item)[0] bd = re.sub('<br(\s+)?/>(\s+)?', " ", bd) bd = re.sub('/', " ", bd) data.append(bd.strip()) # 去掉前后的空格 datalist.append(data) return datalist ##保存数据 def savedata(datalist, savepath): workbook = xlwt.Workbook(encoding="utf-8", style_compression=0) ##style_compression=0不压缩 worksheet = workbook.add_sheet("豆瓣电影top250", cell_overwrite_ok=True) # cell_overwrite_ok=True再次写入数据覆盖 column = ("电影详情链接", "图片链接", "影片中文名", "影片外国名", "评分", "评价数", "概况", "相关信息") ##execl项目栏 for i in range(0, 8): worksheet.write(0, i, column[i]) # 将column[i]的内容保存在第0行,第i列 for i in range(0, 250): data = datalist[i] for j in range(0, 8): worksheet.write(i + 1, j, data[j]) workbook.save(savepath) ##爬取网页 def geturl(url): head = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36" } req = urllib.request.Request(url, headers=head) try: ##异常检测 response = urllib.request.urlopen(req) html = response.read().decode("utf-8") except urllib.error.URLError as e: if hasattr(e, "code"): ##如果错误中有这个属性的话 print(e.code) if hasattr(e, "reason"): print(e.reason) return html if __name__ == '__main__': main() print("爬取成功!!!")
文章持续跟新,可以微信搜一搜公众号 [ rain雨雨编程 ],第一时间阅读,涉及数据分析,机器学习,Java编程,爬虫,实战项目等。
原文链接:https://blog.csdn.net/qq_51749909/article/details/143833089?ops_request_misc=%257B%2522request%255Fid%2522%253A%252206059dfdd2cc1f1072c2148d51985129%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=06059dfdd2cc1f1072c2148d51985129&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-30-143833089-null-null.nonecase&utm_term=%E9%A3%9E%E7%89%9BOS