豆瓣电影Top250

一、准备环境

idea+python插件/python

一、需求分析

1. 运用代码获取豆瓣电影Top250里面电影的相关信息:

  1. 影片详情链接;
  2. 影片名称;
  3. 影片图片链接;
  4. 影片评分;
  5. 影片评价人数;
  6. 影片概况;
  7. 影片相关信息。

2.将爬取到的信息进行存储
1. 存储到excel;
2. 存储到数据库中(sqlite)。

二、思路分析

1.爬取网页

1.先打开豆瓣电影Top250网页,通过右键“检查”来观察网页,完成正则表达式的编写:


2. 获得“模拟浏览器头部信息,向豆瓣服务器发送消息”的数据,如:

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/",'Cookie':...#长这样的数据

方法:
看图片步骤,找到"User-Agent": 和 ‘Cookie’:并复制其内容

2. 保存数据

1.保存到excel
引用 import xlwt # 进行excel操作
定义方法 def saveData(datalist,savepath)
2.保存到数据库sqlite
引用 import sqlite3 # 进行数据库操作
定义方法 def saveData2DB(datalist, dbpath)
加入sqlite数据库

通过点File右边的+,找到方法中定义生成的sqlite数据库,之后点击Test Connection,如果Test不成功就按照步骤加载即可

三、代码实现

# coding:utf-8from bs4 import BeautifulSoup  # 网页解析,获取数据
import re  # 正则表达式,进行文字匹配
import urllib.request, urllib.error  # 指定url,获取网页数据
import xlwt  # 进行excel操作
import sqlite3  # 进行数据库操作def main():baseurl = "https://movie.douban.com/top250?start=0"# 1.爬取网页dataList = getData(baseurl)askUrl(baseurl)getData(baseurl)# savapath = "D:/data/python/豆瓣电影Top250.xls"dbpath = "movie.db"#保存到数据库# 3.保存数据# saveData(dataList,savapath)saveData2DB(dataList,dbpath)# askUrl("https://movie.douban.com/top250?start=")#定义全局变量
#影片详情链接的规则(正则表达式)
findLink = re.compile(r'<a href="(.*?)">')#创建正则表达式对象,表示规则(字符串的模式)  加 r 是达到忽视内容里面有/等符号
#影片名称的正则表达式
findName = re.compile(r'<span class="title">(.*)</span>')
#影片图片
findImgSrc = re.compile(r'<img.*src="(.*?)"',re.S)#因为.是不包含换行符的,所以加上re.S是让换行符包含在字符中
#影片评分
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)#加上re.S是为了忽视换行符   加问号表示0次到1次,不加会得到其它很多的内容# 爬取网页
def getData(baseurl):datalist = []for i in range(0,10 ):   #调用获取页面信息的函数 10次 10*25=250url = baseurl + str(i*25)html = askUrl(url)  #保存获取到的网页源码# 2.解析数据soup = BeautifulSoup(html,"html.parser")for item in soup.find_all('div',class_="item"):#查找符合要求的字符串,形成列表# print(item)#为了查看电影itme的全部信息data=[]#保存一部电影的所有信息item=str(item)#转化成字符串#找到对象,获取到影片详情链接link = re.findall(findLink,item)[0]#re库用来通过正则表达式查找指定的字符串 ||链接data.append(link)#添加链接imgSrc = re.findall(findImgSrc,item)[0]data.append(imgSrc)#添加图片name = re.findall(findName,item)if(len(name)==2):cName = name[0]#中文名data.append(cName)oName = name[1].replace("/","")#英文名 因为源数据有/,而我们这里不需要/,所以用replace把/去掉data.append(oName)else:#只有一个的情况下data.append(name[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())#strip() 去掉前后的空格datalist.append(data)#把处理好的一步电影信息放入datalist#print(data)# for title in soup.find_all('div',class_="item"):#     data2 = []#     title = str(title)#     name = re.findall(findName,title)[0]#re库用来通过正则表达式来查找指定的字符串 ||电影名#     print(name)# 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/",'Cookie':...#这一块的数据没有完,由于每个人的不一样,所以这里提供的是获取的方法,方法在“爬取网页”的第二点。}#用户代理 表示告诉豆瓣服务器,我们是什么类型的机器,浏览器(本质上是告诉浏览器,我们可以接受什么水平的文件内容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)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)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()#1获取游标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)#先测试可不可行cursor.execute(sql)conn.commit()cursor.close()conn.close()print("save to database ......")#创建初始化数据
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("爬取完毕!")

可分每个方法块测试,B站上有相应的教学视频,可以搜索学习,如对哪些地方还有疑惑,可看视频的详解。好好学习,天天向上!

python爬虫-豆瓣电影Top250相关推荐

  1. Python爬虫豆瓣电影top250

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

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

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

  3. Python爬虫实战,pyecharts模块,Python实现豆瓣电影TOP250数据可视化

    前言 利用Python实现豆瓣电影TOP250数据可视化.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: pandas模块 pyecharts模块: 以及一些 ...

  4. 爬虫——豆瓣电影top250

    爬虫--豆瓣电影top250 无论是动态网页爬虫和静态网页爬虫,实现的思路基 本上都是获取页面 html.页面解析.数据保存或输出.虽然获取页面 html 以及数据保存都 已经封装为通用函数,但依然编 ...

  5. python pandas 豆瓣电影 top250 数据分析

    python pandas 豆瓣电影 top250 数据分析 豆瓣电影top250数据分析 数据来源(豆瓣电影top250) 爬虫代码比较简单 数据较为真实,可以进行初步的数据分析 可以将前面的几篇文 ...

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

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

  7. 牛刀小试:利用Python分析豆瓣电影Top250(一)

    使用Scrapy框架抓取豆瓣电影TOP250信息(https://movie.douban.com/top250). 获取影片信息后对数据进行清洗,手动填补遗漏的电影信息等. 整理完毕后具体信息如下 ...

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

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

  9. python爬虫 豆瓣电影

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

最新文章

  1. c++ 继承访问控制初步
  2. [转]Linux awk 命令 说明
  3. Android Relativelayout
  4. 以美术资源生产为例,谈游戏研发中台PM实战
  5. weblogic创建域后启动不了_摩托车淋雨后启动不了什么原因?如何解决?
  6. 从程序员角度看ELF
  7. 静态成员调用java,Java 反射 静态变量 静态方法 静态成员 调用 获取修饰符 判断是否为静态...
  8. 计算机网络---网络层ARP协议
  9. java 中的LongAdder
  10. Python中参数iterable的意义
  11. 【优化算法】帝国主义竞争优化算法(ICA)【含Matlab源码 1635期】
  12. Visio图标模板库
  13. 手动安装Ubuntu 16.04无线wifi驱动,任意网卡型号均可
  14. matlab求最值(极值)
  15. 深入理解MPU(内存保护单元)
  16. Safari 兼容问题累积
  17. 【js语法】获取星期 new Date().getDay()
  18. vue删除数据,不刷新页面
  19. 虚幻引擎学习笔记——Month1 Week1
  20. golang最适合(擅长)做什么

热门文章

  1. 《程序人生》系列-一个月了,我要谢谢,你、你、还有你
  2. WordPress支持ppt一键上传
  3. 互联网的996与华为的惊世骇俗
  4. Home Assistant 发现小米设备
  5. 计算机高级搜索文章内容,外文信息计算机检索
  6. php中奖概率算法,刮刮卡/大转盘抽奖算法
  7. 【综合复习_网络部分】
  8. html在一行内横向排列并排同行同时显示两个多个div盒子的方法(CSS浮动清除float-clear/inline)/办法
  9. 自主导航小车实践(一)
  10. 混淆矩阵与miou代码