任务介绍
想网页效果的小伙伴,可以直接拉到最后!!!哈哈哈!!!

基本流程

在豆瓣上通过F12调试,可以看出我们需要爬取的内容在<div class="item">这里

下面废话不多说直接上代码:

from bs4 import BeautifulSoup  # 网页解析,获取数据
import re  # 正则表达式,进行文字匹配
import urllib.request, urllib.error  # 制定URL,获取网页数据
import xlwt  # 进行excel操作def main():baseurl = "https://movie.douban.com/top250?start="# 1.爬取网页datalist = getData(baseurl)savepath = "豆瓣电影Top250.xls"# 3.保存数据saveData(datalist,savepath)# askURL("https://movie.douban.com/top250?start=")# 影片详情链接的规则
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>')
# 找到概况
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):  # 调用获取页面信息的函数,10次url = baseurl + str(i * 25)html = askURL(url)  # 保存获取到的网页源码# 2.逐一解析数据soup = BeautifulSoup(html, "html.parser")for item in soup.find_all('div', class_="item"):  # 查找符合要求的字符串,形成列表,class加下划线就是为了避免与python语言的关键字class冲突# print(item)   #测试:查看电影item全部信息data = []  # 保存一部电影的所有信息item = str(item)# 影片详情的链接link = re.findall(findLink, item)[0]  # re库用来通过正则表达式查找指定的字符串data.append(link)  # 添加链接imgSrc = re.findall(findImgSrc, item)[0]data.append(imgSrc)  # 添加图片titles = re.findall(findTitle, item)  # 片名可能只有一个中文名,没有外国名if (len(titles) == 2):ctitle = titles[0]  # 添加中文名data.append(ctitle)otitle = titles[1].replace("/", "")  # 去掉无关的符号data.append(otitle)  # 添加外国名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)  # 去掉<br/>bd = re.sub('/', " ", bd)  # 替换/data.append(bd.strip())  # 去掉前后的空格datalist.append(data)  # 把处理好的一部电影信息放入datalist# print(datalist)return datalist# 得到指定一个URL的网页内容
def askURL(url):head = {  # 模拟浏览器头部信息,向豆瓣服务器发送消息"User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.122  Safari / 537.36"}# 用户代理,表示告诉豆瓣服务器,我们是什么类型的机器、浏览器(本质上是告诉浏览器,我们可以接收什么水平的文件内容)request = urllib.request.Request(url, headers=head)html = ""try:response = urllib.request.urlopen(request)html = response.read().decode("utf-8")# print(html)except urllib.error.URLError as e:if hasattr(e, "code"):print(e.code)if hasattr(e, "reason"):print(e.reason)return html# 保存数据
def saveData(datalist, savepath):print("save....")book = xlwt.Workbook(encoding="utf-8", style_compression=0)  # 创建workbook对象sheet = book.add_sheet('豆瓣电影Top250', cell_overwrite_ok=True)  # 创建工作表col = ("电影详情链接", "图片链接", "影片中文名", "影片外国名", "评分", "评价数", "概况", "相关信息")for i in range(0, 8):sheet.write(0, i, col[i])  # 列名for i in range(0, 250):print("第%d条" % (i + 1))data = datalist[i]for j in range(0, 8):sheet.write(i + 1, j, data[j])  # 数据book.save(savepath)  # 保存if __name__ == "__main__":  # 当程序执行时# 调用函数main()print("爬取完毕!")

下面来看下效果:

目标实现啦,哈哈哈!

今天来补充下如何保存为db文件,在这里说明下专业版pycharm功能就是比社区版厉害,我看的教程是关于专业版的,那个数据库的database功能真的是让人羡慕,说道这里默默的打开了我的社区版叹了口气!!!
好了,再上面代码的基础上,添加saveData2DBinit_db方法,下面直接上代码:

from bs4 import BeautifulSoup  # 网页解析,获取数据
import re  # 正则表达式,进行文字匹配
import urllib.request, urllib.error  # 制定URL,获取网页数据
import xlwt  # 进行excel操作
import sqlite3  # 进行SQLite数据库操作def main():baseurl = "https://movie.douban.com/top250?start="# 1.爬取网页datalist = getData(baseurl)savepath = "豆瓣电影Top250.xls"dbpath = "movie.db"# 3.保存数据# saveData(datalist,savepath)saveData2DB(datalist, dbpath)# askURL("https://movie.douban.com/top250?start=")# 影片详情链接的规则
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>')
# 找到概况
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):  # 调用获取页面信息的函数,10次url = baseurl + str(i * 25)html = askURL(url)  # 保存获取到的网页源码# 2.逐一解析数据soup = BeautifulSoup(html, "html.parser")for item in soup.find_all('div', class_="item"):  # 查找符合要求的字符串,形成列表,class加下划线就是为了避免与python语言的关键字class冲突# print(item)   #测试:查看电影item全部信息data = []  # 保存一部电影的所有信息item = str(item)# 影片详情的链接link = re.findall(findLink, item)[0]  # re库用来通过正则表达式查找指定的字符串data.append(link)  # 添加链接imgSrc = re.findall(findImgSrc, item)[0]data.append(imgSrc)  # 添加图片titles = re.findall(findTitle, item)  # 片名可能只有一个中文名,没有外国名if (len(titles) == 2):ctitle = titles[0]  # 添加中文名data.append(ctitle)otitle = titles[1].replace("/", "")  # 去掉无关的符号data.append(otitle)  # 添加外国名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)  # 去掉<br/>bd = re.sub('/', " ", bd)  # 替换/data.append(bd.strip())  # 去掉前后的空格datalist.append(data)  # 把处理好的一部电影信息放入datalist# print(datalist)return datalist# 得到指定一个URL的网页内容
def askURL(url):head = {  # 模拟浏览器头部信息,向豆瓣服务器发送消息"User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.122  Safari / 537.36"}# 用户代理,表示告诉豆瓣服务器,我们是什么类型的机器、浏览器(本质上是告诉浏览器,我们可以接收什么水平的文件内容)request = urllib.request.Request(url, headers=head)html = ""try:response = urllib.request.urlopen(request)html = response.read().decode("utf-8")# print(html)except urllib.error.URLError as e:if hasattr(e, "code"):print(e.code)if hasattr(e, "reason"):print(e.reason)return html# 保存数据
def saveData(datalist, savepath):print("save....")book = xlwt.Workbook(encoding="utf-8", style_compression=0)  # 创建workbook对象sheet = book.add_sheet('豆瓣电影Top250', cell_overwrite_ok=True)  # 创建工作表col = ("电影详情链接", "图片链接", "影片中文名", "影片外国名", "评分", "评价数", "概况", "相关信息")for i in range(0, 8):sheet.write(0, i, col[i])  # 列名for i in range(0, 250):print("第%d条" % (i + 1))data = datalist[i]for j in range(0, 8):sheet.write(i + 1, j, data[j])  # 数据book.save(savepath)  # 保存def saveData2DB(datalist, dbpath):init_db(dbpath)conn = sqlite3.connect(dbpath)cur = conn.cursor()for data in datalist:for index in range(len(data)):if index == 4 or index == 5:continuedata[index] = '"' + data[index] + '"'sql = '''insert into movie250 (info_link,pic_link,cname,ename,score,rated,instroduction,info) values(%s)''' % ",".join(data)# print(sql)cur.execute(sql)conn.commit()cur.close()conn.close()def init_db(dbpath):sql = '''create table movie250 (id integer primary key autoincrement,info_link text,pic_link text,cname varchar,ename varchar,score numeric ,rated numeric ,instroduction text,info text)'''  # 创建数据表conn = sqlite3.connect(dbpath)cursor = conn.cursor()cursor.execute(sql)conn.commit()conn.close()if __name__ == "__main__":  # 当程序执行时# 调用函数main()# init_db("movietest.db")print("爬取完毕!")

运行完代码,就会生成一个movie.db文件。

因为我是用的DB Browser,打开的效果如下图:

保存成功啦!!!

今天又在阿里云服务器上部署了自己的这个项目,说实话第一次部署感觉很装杯!!!!下面附上我的网站地址:豆瓣TOP250电影

如果有同学需要,且我有空的话(目前在忙着写论文和秋招),会出一期阿里云服务器的教程!!!!期待的小伙伴留言点赞呀,哈哈哈!!!

2020年9月30日21:04:58
今天要早点回宿舍先写到这里,有空了继续补充。
明天国庆节,祖国万岁!!!

修改:2020年10月3日14:46:44
如果本文对你有用,欢迎点赞评论收藏呀!

爬取豆瓣TOP250电影并保存为excel文件与db文件,有网页展示哦!相关推荐

  1. Python爬取豆瓣Top250电影可见资料并保存为excel形式

    Python爬取豆瓣Top250电影可见资料并保存为excel形式 利用requests第三方库实现网页的元素爬取,再使用openpyxl库进行信息的录入. 具体思路 1.分析网页的headers. ...

  2. 爬取豆瓣Top250电影

    爬取豆瓣Top250电影数据一直是爬虫小白的入门练手项目,下面就来分享一下自己的爬取过程. 开始之前,先简单写一下需求和实现思路. 需求: 爬取豆瓣电影Top250的数据,数据包含排名.电影名称.导演 ...

  3. [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

    这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对 ...

  4. 爬取豆瓣top250电影并分析

    爬取豆瓣top250电影,提取评论关键词,然后将同一国家的关键词做成一个词云,轮廓是每个国家的地图轮廓 爬取数据 需要爬取电影名称.导演.年份.地区和前10个评论除了地区,其他的都没什么问题,我们来研 ...

  5. scrapy爬取豆瓣top250电影数据

    scrapy爬取豆瓣top250电影数据 scrapy框架 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. sc ...

  6. 【实战1】用BeatuifulSoup解析器爬取豆瓣Top250电影的名称

    [实战1]用BeatuifulSoup解析器爬取豆瓣Top250电影的名称 一. 爬虫的普遍步骤 二. 项目目标分析 三.完整爬取代码 参考链接: https://www.bilibili.com/v ...

  7. 【实战2】爬取豆瓣Top250电影的海报

    [实战2]爬取豆瓣Top250电影的海报 一. 项目目标分析 二. 完整代码 参考链接: https://www.bilibili.com/video/BV1ZJ411N7Fq?p=4 一. 项目目标 ...

  8. Python爬取豆瓣Top250电影中2000年后上映的影片信息

    Python爬取豆瓣Top250电影中2000年后上映的影片信息 前言 双十一前加在京东购物车的一个东西,价格330,Plus会员用券后差不多310.双十一当天打开看了下399,还得去抢满300减10 ...

  9. python采用requests+bs4爬取豆瓣top250电影信息

    爬取豆瓣top250电影说明 (链接:https://movie.douban.com/top250,可爬取一页或者多页(输出电影的正标题(肖申克的救赎),副标题( The Shawshank Red ...

最新文章

  1. 织梦怎么改网站主页php,无忧主机教你修改织梦DedeCms网站首页为动态显示的方法...
  2. 华胜天成1.18亿美元收购美国GD公司
  3. 准备mysql函数库和PHP文件
  4. 矢量图标库如何引入html,Iconfont矢量图标库在网站中的使用方法
  5. imageloader图片基本加载
  6. Spark高级操作之json复杂和嵌套数据结构的操作二
  7. python echo off_生活中的python-随机分配单词输出至word
  8. java loadclass_【java 类加载的深入研究1】loadClass()的研究
  9. 人工智能产业链深度透析—基础层
  10. 计算机设计思想 —— 虚拟化
  11. 客户端主动断开连接_Go实现客户端和服务器抓包分析TCP三次握手和断开操作
  12. ref: 九大数据仓库方案特点比较
  13. 阿里云短信服务SDK使用方法
  14. 程序员的一天:硅谷女程序员 mayuko
  15. 余承东吐槽iPhone X长的丑体验差;雷军称小米明年要进世界500强;特斯拉股价被指太荒唐丨价值早报
  16. 如何修改Windows10系统文本背景色
  17. 关于云开发数据库的使用经验和建议
  18. 计算机片段教学优秀教案,高中数学片段教学方法
  19. 使用memccpy函数替代不安全的str[n]cpy、str[n]cat等
  20. 基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(八)使用domoticz+mosquitto+Android客户端实现控制mini2440上的LED(一)

热门文章

  1. C# 获取汉字拼音首字母
  2. mysql导出设计文档_Mysql导出数据库设计文档
  3. c语言逻辑或逻辑与优先级,c语言逻辑运算符的优先级介绍
  4. YOLOV5代码解析(更新中)
  5. dble 不支持的关键字 mysql_分布式 | MySQL分布式中间件使用指南:第十二课 DBLE 3.0 规划揭秘与社区问题答疑...
  6. 陈绍鹏:让信息科技渗入奥运会的每一个细胞
  7. 微信小程序是什么?有哪些特点?
  8. Vr算php吗,vr原理介绍
  9. 【智能优化算法-飞蛾扑火优化算法】基于水循环混合飞蛾扑火优化算法求解约束的工程优化问题附matlab代码WCMFO
  10. Win_BAT批处理汇总