首先,我们来看一下源码。

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="#爬取网页datalist = getData(baseurl)#保存数据savepath = "豆瓣电影Top250.xls"saveData(datalist,savepath)dbpath = "douban250.db"saveData_db(datalist,dbpath)findLink = re.compile(r'<a href="(.*?)">')  # compile创建正则表达式对象,表示规则(字符串模式)
#封面图片
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): # 调用获取页面信息的函数10次,一次25条url = baseurl + str(i*25)html = askURL(url) # 保存获取到的网页源码# 2.逐一解析数据soup = BeautifulSoup(html,"html.parser") # html.parser网页解析器# find_all()是按照一定的标准,将符合要求的字符串一次性查找出来形成列表for item in soup.find_all('div',class_="item"):  # class后的 _ 表示属性值#print(item)data = [] # 保存一部电影的所有信息item = str(item) # 将其转为字符串# 提取超链接 re库用来通过正则表达式找到指定的字符串 findLink是自定义的全局变量Link = re.findall(findLink,item)[0] # [0]第一个data.append(Link) # 将连接追加到列表中ImgSrc = re.findall(findImgSrc,item)[0]data.append(ImgSrc)Title = re.findall(findTitle,item) # 片名可能只有一个中文名没有外文名if len(Title)==2: # 判断有几个titlesctitle = Title[0] # 添加中文名data.append(ctitle)otitle = Title[1].replace("/","") # 去掉/data.append(otitle) # 添加外文名else:data.append(Title[0])data.append(' ') # 第二个留空Rating = re.findall(findRating,item)[0]data.append(Rating) # 添加评分Judge = re.findall(findJudge,item)[0]data.append(Judge) # 添加人数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中的 <br(\s+)?/>(\s+)? 替换Bd = re.sub('<br(\s+)?/>(\s+)?'," ",Bd)data.append(Bd.strip()) # strip去掉前后空格datalist.append(data)    #把处理好的一个电影信息存储到datalist中#解析网页return datalist#获取指定一个网页内容
def askURL(url):head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.116 Safari/537.36"} #伪装成网页的形式,请求网页信息request = urllib.request.Request(url,headers=head)html = "" # 存放到html中try: # 防止出现意外response = urllib.request.urlopen(request)html = response.read().decode("utf-8")  # 读取response#print(html)except urllib.error.URLError as e:  # 捕获404 500 等浏览器错误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)  # style_compression样式压缩效果sheet = book.add_sheet('豆瓣电影Top250',cell_overwrite_ok=True) #cell_overwrite_ok单元格覆盖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('豆瓣电影Top250.xls')def saveData_db(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,introduction,info)values(%s) '''%",".join(data)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,introduction text,info text)'''conn = sqlite3.connect(dbpath) # 创建数据库cursor = conn.cursor() # 获取游标。获取操作的数据库对象cursor.execute(sql) #执行sql语句conn.commit() # 提交conn.close() #关闭数据库文件main()
print("爬取完毕")

然后运行代码

save....
第1条
第2条
第3条
第4条
第5条
第6条
第7条
第8条
第9条
第10条
第11条
第12条
第13条
第14条
第15条
第16条
第17条
第18条
第19条
第20条
第21条
第22条
第23条
第24条
第25条
第26条
第27条
第28条
第29条
第30条
第31条
第32条
第33条
第34条
第35条
第36条
第37条
第38条
第39条
第40条
第41条
第42条
第43条
第44条
第45条
第46条
第47条
第48条
第49条
第50条
第51条
第52条
第53条
第54条
第55条
第56条
第57条
第58条
第59条
第60条
第61条
第62条
第63条
第64条
第65条
第66条
第67条
第68条
第69条
第70条
第71条
第72条
第73条
第74条
第75条
第76条
第77条
第78条
第79条
第80条
第81条
第82条
第83条
第84条
第85条
第86条
第87条
第88条
第89条
第90条
第91条
第92条
第93条
第94条
第95条
第96条
第97条
第98条
第99条
第100条
第101条
第102条
第103条
第104条
第105条
第106条
第107条
第108条
第109条
第110条
第111条
第112条
第113条
第114条
第115条
第116条
第117条
第118条
第119条
第120条
第121条
第122条
第123条
第124条
第125条
第126条
第127条
第128条
第129条
第130条
第131条
第132条
第133条
第134条
第135条
第136条
第137条
第138条
第139条
第140条
第141条
第142条
第143条
第144条
第145条
第146条
第147条
第148条
第149条
第150条
第151条
第152条
第153条
第154条
第155条
第156条
第157条
第158条
第159条
第160条
第161条
第162条
第163条
第164条
第165条
第166条
第167条
第168条
第169条
第170条
第171条
第172条
第173条
第174条
第175条
第176条
第177条
第178条
第179条
第180条
第181条
第182条
第183条
第184条
第185条
第186条
第187条
第188条
第189条
第190条
第191条
第192条
第193条
第194条
第195条
第196条
第197条
第198条
第199条
第200条
第201条
第202条
第203条
第204条
第205条
第206条
第207条
第208条
第209条
第210条
第211条
第212条
第213条
第214条
第215条
第216条
第217条
第218条
第219条
第220条
第221条
第222条
第223条
第224条
第225条
第226条
第227条
第228条
第229条
第230条
第231条
第232条
第233条
第234条
第235条
第236条
第237条
第238条
第239条
第240条
第241条
第242条
第243条
第244条
第245条
第246条
第247条
第248条
第249条
第250条
爬取完毕Process finished with exit code 0

因为我抓取的是豆瓣前250项 一页25个 一共十页

运行后在此项目中会出现一个.db文件 一个Excle文件

先点开Excle表格看一下

一共有250行  有8列

然后点开db文件看一下  是一些乱码

这时候打开命令行 输入所学过的指令

然后会出现一个.sql文件

到此就结束啦~

python 电影网站爬虫项目相关推荐

  1. 第一Python第一个爬虫项目

    第一Python第一个爬虫项目 完整代碼 import urllib.request url = "https://www.douban.com" headers = {" ...

  2. Python大型网络爬虫项目开发实战

    1    讲师简介 2    课程简介及特色 实战精通Scrapy爬虫项目编写 "Scrapy是Python的一个非常流行的爬虫框架,使用Scrapy框架可以很方面做出大型爬虫项目,但Scr ...

  3. Python即时网络爬虫项目: 内容提取器的定义(Python2.7版本)

    1. 项目背景 在Python即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间太多了(见上图),从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端 ...

  4. 基于python的网站_基于Python的网站爬虫应用研究

    基于 Python 的网站爬虫应用研究 陈清 [期刊名称] <通讯世界> [年 ( 卷 ), 期] 2020(027)001 [摘要] 如何于海量的互联网网站中获取有用资源信息 , 对网站 ...

  5. python网络爬虫的项目背景_第四章 Python即时网络爬虫项目: 内容提取器的定义

    1. 项目背景 在python即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间,从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端的数据处理工作中 ...

  6. python简单网站爬虫-爬取北京7天最高、最低气温

    python简单网站爬虫-爬取北京7天最高.最低气温 前置操作: 1.待爬取网站: 北京天气的网址: http://www.weather.com.cn/weather1d/101010100.sht ...

  7. Python3 大型网络爬虫实战 004 — scrapy 大型静态商城网站爬虫项目编写及数据写入数据库实战 — 实战:爬取淘宝

    原博文链接:http://www.aobosir.com/blog/2016/12/26/python3-large-web-crawler-taobao-com-import-to-MySQL-da ...

  8. python爬电影_Python爬虫项目--爬取猫眼电影Top100榜

    本次抓取猫眼电影Top100榜所用到的知识点: 1. python requests库 2. 正则表达式 3. csv模块 4. 多进程 正文 目标站点分析 通过对目标站点的分析, 来确定网页结构, ...

  9. python入门爬虫案例_[Python入门学习]-爬虫项目案例讲解

    一.速成HTML html:超文本标记语言. 文档的第一行就表明这是一个html文档.根标签是html,然后下面有head和body,head里面是一些头信息,body就是我们想把页面渲染成什么样. ...

  10. python外国网站爬虫_Python3网络爬虫(一):利用urllib进行简单的网页抓取

    一.预备知识 1.Python3.x基础知识学习: 可以在通过如下方式进行学习: (1)廖雪峰Python3教程(文档): (2)菜鸟教程Python3教程(文档): (3)鱼C工作室Python教程 ...

最新文章

  1. hashCode() 和equals() 区别和作用
  2. AV1编码时间下降,接近使用水平
  3. HoloLens开发手记 - HoloLens shell概述 HoloLens shell overview
  4. ABAP中创建动态内表的三种方法(转载)
  5. oracle安装要多久,一次耗时4天的oracle安装过程
  6. 5分钟即可使用25年的Linux
  7. 一文读懂babel编译流程,再也不怕面试官的刁难了
  8. linux重定向到某目录文件,linux shell中12 21 1file_path重定向语法详解
  9. java反射之Method的invoke方法实现
  10. [转]4款手机音乐播放器对比
  11. Boot Loader 的设计与实现
  12. Mybatis + mysql获取元数据时出现问题以及解决
  13. openCV5-Threshold and Mask
  14. linux系统下查看 显卡 信息
  15. 华为服务器怎么进入系统,服务器怎么进入系统
  16. java join的用法
  17. Docker Hub账号申请
  18. MySQL安装--无法初始化
  19. Java大数据基础——day01
  20. 软件构造Lab2问题解决思路及感想

热门文章

  1. Leetcode Hot 100题 题解
  2. 《高质量程序设计指南——C/C++》第9章 C/C++编译预处理
  3. ubantu 编译安装xl2tpd笔记
  4. 语音识别的总结(PPT)
  5. JAVA面试宝典-Java 基础 知识
  6. 创建tableau计算字段—“占比”、“求…
  7. python输入两个整数求最大公约数和最小公倍数_python语言编程——求最大公约数和最小公倍数算法...
  8. 深入浏览器之浏览器中的进程与线程
  9. HBase写入过快性能分析及调优
  10. 小学生计算机知识科普,人工智能也分强与弱? | 小学生计算机知识科普专栏...