python爬虫-豆瓣电影Top250
豆瓣电影Top250
一、准备环境
idea+python插件/python
一、需求分析
1. 运用代码获取豆瓣电影Top250里面电影的相关信息:
- 影片详情链接;
- 影片名称;
- 影片图片链接;
- 影片评分;
- 影片评价人数;
- 影片概况;
- 影片相关信息。
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相关推荐
- Python爬虫豆瓣电影top250
我的另一篇博客,Python爬虫豆瓣读书评分9分以上榜单 有了上次的基础,这次简单爬了下豆瓣上电影TOP250,链接豆瓣电影TOP250. 打开链接,查看网页源代码,查找我们需要的信息的字 ...
- python 豆瓣电影top250_[python爬虫]豆瓣电影Top250简单数据分析绘图
一:简介 通过抓取豆瓣电影Top250的数据,分别进行了三个数据统计,分别是:上榜的电影上映的年份,该年份总共上榜的电影数量,数量为0的就没有统计了:各个国家地区出品的电影数量:250部电影的各个类型 ...
- Python爬虫实战,pyecharts模块,Python实现豆瓣电影TOP250数据可视化
前言 利用Python实现豆瓣电影TOP250数据可视化.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: pandas模块 pyecharts模块: 以及一些 ...
- 爬虫——豆瓣电影top250
爬虫--豆瓣电影top250 无论是动态网页爬虫和静态网页爬虫,实现的思路基 本上都是获取页面 html.页面解析.数据保存或输出.虽然获取页面 html 以及数据保存都 已经封装为通用函数,但依然编 ...
- python pandas 豆瓣电影 top250 数据分析
python pandas 豆瓣电影 top250 数据分析 豆瓣电影top250数据分析 数据来源(豆瓣电影top250) 爬虫代码比较简单 数据较为真实,可以进行初步的数据分析 可以将前面的几篇文 ...
- python爬虫—豆瓣电影海报(按类别)
原文地址:http://www.alannah.cn/2019/04/06/getdouban/ python爬虫-豆瓣电影海报 目标:通过python爬虫在豆瓣电影上按类别对电影海报等数据进行抓取, ...
- 牛刀小试:利用Python分析豆瓣电影Top250(一)
使用Scrapy框架抓取豆瓣电影TOP250信息(https://movie.douban.com/top250). 获取影片信息后对数据进行清洗,手动填补遗漏的电影信息等. 整理完毕后具体信息如下 ...
- python爬虫豆瓣电影评价_使用爬虫爬取豆瓣电影影评数据Python版
在 使用爬虫爬取豆瓣电影影评数据Java版 一文中已详细讲解了爬虫的实现细节,本篇仅为展示Python版本爬虫实现,所以直接上代码 完整代码 爬虫主程序 # 爬虫启动入口 from C02.data ...
- python爬虫 豆瓣电影
最近学习python 顺便写下爬虫练手 爬的是豆瓣电影排行榜 http://movie.douban.com/chart python版本2.7.6 // 安装 Beautiful Soup sudo ...
最新文章
- c++ 继承访问控制初步
- [转]Linux awk 命令 说明
- Android Relativelayout
- 以美术资源生产为例,谈游戏研发中台PM实战
- weblogic创建域后启动不了_摩托车淋雨后启动不了什么原因?如何解决?
- 从程序员角度看ELF
- 静态成员调用java,Java 反射 静态变量 静态方法 静态成员 调用 获取修饰符 判断是否为静态...
- 计算机网络---网络层ARP协议
- java 中的LongAdder
- Python中参数iterable的意义
- 【优化算法】帝国主义竞争优化算法(ICA)【含Matlab源码 1635期】
- Visio图标模板库
- 手动安装Ubuntu 16.04无线wifi驱动,任意网卡型号均可
- matlab求最值(极值)
- 深入理解MPU(内存保护单元)
- Safari 兼容问题累积
- 【js语法】获取星期 new Date().getDay()
- vue删除数据,不刷新页面
- 虚幻引擎学习笔记——Month1 Week1
- golang最适合(擅长)做什么