跟着B站上的视频敲得代码,基本无改动
爬取的数据包括"电影详情链接",“图片链接”,“影片中文名”,“影片外文名”,“评分”,“评价数”,“概况”,“相关信息”
爬取到的数据有保存到excle中保存到数据库中(注释掉了)两种

具体代码如下:

# -*- codeing = utf-8 -*-
# @Time : 2021/1/12 20:39
# @Author : Chikin Lau @ SUSE
# @File : spider.py
# @Software: PyCharmimport re     #正则表达式,进行文字匹配
from bs4 import BeautifulSoup  #网页解析,获取数据
import urllib.request,urllib.error    #指定URL,获取网页数据
import xlwt     #进行Excel操作
import sqlite3  #进行SQLite数据库操作def main():baseurl = "https://movie.douban.com/top250?start="#1.爬取网页   and  #2.解析网页datalist = getData(baseurl)savepath = "豆瓣电影Top250.xls"    #保存到excle表#dbpath = "movie.db"#3.保存数据saveData(datalist,savepath)       #执行保存到excle的方法#saveData2DB(datalist,dbpath)      #执行保存到数据库的方法#askURL("https://movie.douban.com/top250?start=0")#影片详情链接的规则
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)      #保存获取到的网页源码#逐一解析数据soup = BeautifulSoup(html,"html.parser")for item in soup.find_all('div',class_="item"):     #查找符合要求的字符串,形成列表#print(item)data = []      #保存一部电影的所有信息item = str(item)# print(item)# break#获取影片详情的链接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("/","")      #去掉无关的符合otitle = re.sub('\s',"",otitle)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)# 影片概况try:                                     #解决因列表为空而报错,后果是会缺失没有影片概况(inq为空)的电影inq = re.findall(findInq,item)[0]inq = inq.replace("。","")      #去掉句号data.append(inq)except:data.append(" ")# 为解决continue导致的inq为空的电影无法执行下面代码,故把下面被跳过的代码复制上来到continue前执行bd = re.findall(findBd, item)[0]bd = re.sub('<br(\s+)?/>(\s+)?', " ", bd)  # 去掉<br/>bd = re.sub('/', " ", bd)  # 替换/bd = re.sub('\s', " ", bd)  # 去掉\xa0data.append(bd.strip())  # 去掉前后的空格datalist.append(data)continue# 影片的相关内容bd = re.findall(findBd,item)[0]bd = re.sub('<br(\s+)?/>(\s+)?'," ",bd)      #去掉<br/>bd = re.sub('/'," ",bd)                 #替换/bd = re.sub('\s'," ",bd)                #去掉\xa0data.append(bd.strip())                #去掉前后的空格datalist.append(data)#print(datalist)return datalist#得到指定的一个URL的网页内容
def askURL(url):#头部信息:模拟浏览器头部信息,向豆瓣服务器发送消息#用户代理:表示豆瓣服务器,我们是什么类型的机器、浏览器(本质上是告诉浏览器,我们可以接收什么水平的文件内容)head = {"User-Agent": "User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"}#Mozilla/5.0 (Windows NT 10.0;Win64;x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36#Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36request = urllib.request.Request(url,headers=head)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#保存数据到excle表的方法
def saveData(datalist,savepath):#print()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)cursor = conn.cursor()# 写sql语句for data in datalist:for index in range(len(data)):if index == 4 or index == 5:continuedata[index] = '"' + str(data[index]) + '"'sql = '''insert into movie250(info_link,pic_link,cname,ename,score,rated,introduction,info)values(%s)''' % ",".join(data)#print(sql)cursor.execute(sql)conn.commit()cursor.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,introduction text,info text)'''                        #创建数据表conn = sqlite3.connect(dbpath) #连接数据库cursor = conn.cursor()         #获取游标cursor.execute(sql)            #执行sql语句conn.commit()                 #提交数据库操作conn.close()                  #关闭数据库连接if __name__ == '__main__':     #设置主函数,程序入口
#调用函数main()#init_db("movietest.db")print("爬取完毕")

Python爬虫-豆瓣电影排行榜TOP250相关推荐

  1. python爬虫—豆瓣电影海报(按类别)

    原文地址:http://www.alannah.cn/2019/04/06/getdouban/ python爬虫-豆瓣电影海报 目标:通过python爬虫在豆瓣电影上按类别对电影海报等数据进行抓取, ...

  2. Python爬虫豆瓣电影top250

      我的另一篇博客,Python爬虫豆瓣读书评分9分以上榜单   有了上次的基础,这次简单爬了下豆瓣上电影TOP250,链接豆瓣电影TOP250.   打开链接,查看网页源代码,查找我们需要的信息的字 ...

  3. python爬虫 豆瓣电影

    最近学习python 顺便写下爬虫练手 爬的是豆瓣电影排行榜 http://movie.douban.com/chart python版本2.7.6 // 安装 Beautiful Soup sudo ...

  4. python爬虫-豆瓣电影Top250

    豆瓣电影Top250 一.准备环境 idea+python插件/python 一.需求分析 1. 运用代码获取豆瓣电影Top250里面电影的相关信息: 影片详情链接: 影片名称: 影片图片链接: 影片 ...

  5. python 豆瓣电影top250_[python爬虫]豆瓣电影Top250简单数据分析绘图

    一:简介 通过抓取豆瓣电影Top250的数据,分别进行了三个数据统计,分别是:上榜的电影上映的年份,该年份总共上榜的电影数量,数量为0的就没有统计了:各个国家地区出品的电影数量:250部电影的各个类型 ...

  6. Scrapy框架学习 - 爬取豆瓣电影排行榜TOP250所有电影信息并保存到MongoDB数据库中

    概述 利用Scrapy爬取豆瓣电影Top250排行榜电影信息,并保存到MongoDB数据库中 使用pymongo库操作MOngodb数据库 没有进行数据清洗 源码 items.py class Dou ...

  7. python爬虫豆瓣电影评价_使用爬虫爬取豆瓣电影影评数据Python版

    在 使用爬虫爬取豆瓣电影影评数据Java版 一文中已详细讲解了爬虫的实现细节,本篇仅为展示Python版本爬虫实现,所以直接上代码 完整代码 爬虫主程序 # 爬虫启动入口 from C02.data ...

  8. python爬虫豆瓣电影短评_豆瓣Python爬虫:500条电影短评

    豆瓣电影短评总数多少不一,但是在短评区只能显示500条评论. 例如<囧妈>,评论数达到117120条. (当我打开爬到的评论时,还以为自己代码有问题,检查代码未发现问题.用手机登录豆瓣AP ...

  9. 爬取豆瓣电影排行榜top250

    爬取豆瓣电影top250 平时不知道看什么电影,正好最近学习了爬虫,自己试着把电影排行下载下来,边看边学两不误. 下面直接上代码: import requests from bs4 import Be ...

  10. python爬虫豆瓣电影我不是药神的评价_【Python3爬虫】豆瓣《我不是药神》短评...

    工具: Python3+Pycharm+Chrome 使用到的模块: (1)requests:用来简单数据请求.(2)lxml:比BeautiSoup更快更强的解析库.(3)pandas:数据处理神器 ...

最新文章

  1. SQL判断是否存在,还在用 count 操作?试试这条 SQL 语句,性能杠杠的!
  2. 配置Fedora15 x86_32
  3. CSS实用方法 —— 三角形的编写
  4. Flutter开发之ListView使用第三方flutter_refresh加载更多(37)
  5. 【原创】一种维护型项目升级打包的解决方案
  6. 是什么影响了MySQL性能?
  7. 【Linux】一步一步学Linux——nice命令(127)
  8. JDK6u25里添加的按线程统计分配内存量: JMX
  9. java web 导出word_JavaWeb Project使用FreeMaker导出Word文件
  10. 3、play中的模板引擎
  11. mysql 慢日志报警_一则MySQL慢日志监控误报的问题分析
  12. oracle报错00838,oracle11g的内存分配不当,导致的错误ORA-01034,ORA-00838,ORA-27101
  13. 前端_JavaScript
  14. 关于annotation object的旋转
  15. 2017年全国计算机软件水平考试报名入口网址V1.0(小虎整理)
  16. 用零知识证明连接多链宇宙
  17. 安装compiz-fusion
  18. 新元宇宙每周连载《地球人奇游天球记》第十三回火星烧烤
  19. tableau免费版无法更新数据
  20. 计算机网络思维导图(零基础--思维导图详细版本及知识点)

热门文章

  1. 如果明天要上线,还有很多Bug没有修改,项目经理又没有时间管,你该怎么办?
  2. 计算机中的打印机,如何添加打印机,教您电脑如何添加打印机
  3. face_recognition人脸识别
  4. 你的 Mac 用对了吗?推荐一些 Mac 上比较好用的软件
  5. APP Launch 优化
  6. 考研数学:常见的初等函数求导公式以及其对应的积分公式
  7. Mac电脑动态壁纸怎么设置
  8. android 热补丁工具,Hotfix补丁工具报错排查步骤
  9. 安徽理工大学计算机设计大赛,安徽理工大学学子在2020年中国大学生计算机设计大赛中喜获佳绩...
  10. 使用Mac下的sequel Pro数据库错误MySQL said: Authentication plugin 'caching_sha2_password'