# -*- coding = utf-8 -*-
# @Time    : 2021/11/18 19:54
# @Author  : Vvfrom 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"):  # 查找符合要求的字符串,形成列表# print(item)  # 测试查看 i 全部信息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/94.0.4606.71 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# 3、保存数据
def saveData(datalist,savepath):# print("test...")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)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)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("testmovie.db")print("爬取完毕")

爬虫爬取豆瓣电影排行,保存到excel和SQLite相关推荐

  1. python爬虫爬取豆瓣电影排行榜并通过pandas保存到Excel文件当中

    我们的需求是利用python爬虫爬取豆瓣电影排行榜数据,并将数据通过pandas保存到Excel文件当中(步骤详细) 我们用到的第三方库如下所示: import requests import pan ...

  2. Python爬虫 爬取豆瓣电影TOP250

    Python爬虫 爬取豆瓣电影TOP250 最近在b站上学习了一下python的爬虫,实践爬取豆瓣的电影top250,现在对这两天的学习进行一下总结 主要分为三步: 爬取豆瓣top250的网页,并通过 ...

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

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

  4. Python爬虫爬取豆瓣电影评论内容,评论时间和评论人

    Python爬虫爬取豆瓣电影评论内容,评论时间和评论人 我们可以看到影评比较长,需要展开才能完整显示.但是在网页源码中是没有显示完整影评的.所以我们考虑到这部分应该是异步加载的方式显示.所以打开网页的 ...

  5. 爬取豆瓣电影排行top250

    功能描述V1.0: 爬取豆瓣电影排行top250 功能分析: 使用的库 1.time 2.json 3.requests 4.BuautifulSoup 5.RequestException 上机实验 ...

  6. python爬取豆瓣电影top250的代码_Python爬虫——爬取豆瓣电影Top250代码实例

    利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Excel表中 ...

  7. Python爬虫新手入门教学(一):爬取豆瓣电影排行信息

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...

  8. [爬虫] 爬取豆瓣电影排行榜

    申明:本文对爬取的数据仅做学习使用,不涉及任何商业活动,侵删 爬取豆瓣电影排行榜 这是一个Scrapy框架入门级的项目, 它可以帮助我们基本了解Scrapy的操作流程和运行原理 这次我们要做例子的网站 ...

  9. 爬虫爬取豆瓣电影top250

    最新研究了下爬虫,且将信息保存到EXCEL和sqlite: 代码供参考: 代码如下: # This is a sample Python script.# Press Shift+F10 to exe ...

最新文章

  1. 我的新浪微博,顺便总结下近况
  2. Android Studio 项目代码全部消失--出现原因及解决方法
  3. 修改Android下的radioButton字体的颜色
  4. 推荐 12 个学习前端必备的神仙级工具类项目与网站
  5. h5上传图片_怎么搭建自己的H5响应式网站
  6. Nutshell中的Java 8语言功能-第1部分
  7. opensips mysql 认证_基于ubuntu中使用mysql实现opensips用户认证的解决方法
  8. 配置说明_温室移动喷灌机简介以及配置说明
  9. 人月神话:微软开发模式和原则[转]
  10. NLP任务增强:通过引入外部知识来提供额外信息
  11. 如何处理Spring、Ibatis结合MySQL数据库使用时的事务操作
  12. python计算矩阵的散度_数据集相似度度量之KLJS散度
  13. (深度剖析结构)模块化解释矢量控制
  14. 剑指offer刷题记录(C++)
  15. 文档型数据库Mongodb
  16. 思科Cisco Telnet(三种认证方式)
  17. 随意编辑网页内容的简单方法
  18. STM32开发(14)----CubeMX配置ADC
  19. 分布式事务框架seata介绍
  20. 点开瞅瞅,再来几道Python面试题吧,Python面试题No20

热门文章

  1. 软件测试方法和技术第一章——引论
  2. 微电子电路——与非门或非门异或门
  3. 日本机器自动化初创企业Cinnamon获天使轮融资
  4. SpringBoot启动报错 Failed to read candidate component class:
  5. 北京市社会保险办理流程
  6. 手机html特效菊花的彩铅画,彩铅教程 | 菊花的画法步骤
  7. nand flash基础——浮栅结构
  8. 【SPIE独立出版|往届已检索、湘潭大学主办】第二届绿色通信、网络与物联网国际学术会议 (CNIoT 2022)
  9. 模拟器链接appium
  10. MediaInfo与wmv3 wma3 的解码器