文章目录

  • 1、需求
  • 2、流程
  • 3、实现
    • 导包
    • 主函数
    • 数据获取
    • 数据解析
    • 存储到excel
    • 简易数据库
    • 存储到数据库
  • 5、完整代码
  • 6、小注

1、需求

爬取豆瓣top250的电影的播放链接,封面链接,中外文名等数据,并作数据的持久化处理(存放到excel和数据库)

2、流程

使用requests库获取网页数据,使用bs4和re对网页进行解析和文字匹配
最后使用xlwt和pymysql将数据存入excel和数据库

3、实现

导包

# -*- coding: utf-8 -*
from bs4 import BeautifulSoup  # 网页解析,获取数据
import re       # 正则,文字匹配
import requests  # 获取网页数据
import xlwt     # excel操作
import pymysql.cursors      #   数据库操作

主函数

def main():baseUrl = "https://movie.douban.com/top250?start="# 爬取网页dataList = getDate(baseUrl)# 保存数据savePath = "豆瓣top250.xls"saveData(savePath, dataList)saveDataToDb(dataList)

数据获取

# 得到指定URL的网页内容
def askUrl(url):headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'}html = ""try:r = requests.get(url=url, headers=headers, timeout=3)r.encoding = 'utf-8'html = r.textexcept Exception as e:if hasattr(e, "code"):print(e.code)if hasattr(e, "reason"):print(e.reason)return html

数据解析

def getDate(baseUrl):dataList = []for i in range(0, 10):url = baseUrl + str(i*25)html = askUrl(url)# 解析数据soup = BeautifulSoup(html, "html.parser")for item in soup.find_all("div", class_="item"):data = []  # 存放一部电影的所有信息item = str(item)link = re.findall(r'<a href="(.*)">', item)[0]  # 链接data.append(link)image = re.findall(r'<img.*src="(.*)" .*/>', item)[0]  # 图片data.append(image)titles = re.findall(r'<span class="title">(.*)</span>', item)  # 片名data.append(titles[0])   # 添加中文名if len(titles) == 2:   # 添加外国名data.append(titles[1].replace("\\", ""))else:data.append(" ")rate = re.findall(r'<span class="rating_num".*>(.*)</span>', item)[0]  # 评分data.append(rate)judge = re.findall(r'<span>(\d*)人评价</span>', item)[0]  # 评级人数data.append(judge)inq = re.findall(r'<span class="inq">(.*)</span>', item, re.S)  # 简述if len(inq) != 0:inq = inq[0].replace("。", "")data.append(inq)else:data.append("")bd = re.findall(r'<p class="">(.*?)</p>', item,  re.S)[0]    # 其他信息bd = re.sub('<br/>', " ", bd)bd = re.sub("/", " ", bd)bd = re.sub("\\n", " ", bd)bd = re.sub(r"\xa0", " ", bd)data.append(bd.strip())dataList.append(data)return dataList

存储到excel

def saveData(savePath, dataList):workbook = xlwt.Workbook(encoding="utf-8", style_compression=0)worksheet = workbook.add_sheet("豆瓣top250", cell_overwrite_ok=True)col = ("电影详情链接", "图片链接", "影片中文名", "影片英文名", "评分", "评价数", "概况", "相关信息")for i in range(0, 8):worksheet.write(0, i, col[i])for i in range(0, 250):data = dataList[i]for j in range(0, 8):worksheet.write(i+1, j, data[j])workbook.save(savePath)

简易数据库

DROP TABLE IF EXISTS `top250`;
CREATE TABLE `top250` (`id` int(11) NOT NULL AUTO_INCREMENT,`link` varchar(255) DEFAULT NULL,`image` varchar(255) DEFAULT NULL,`cname` varchar(255) DEFAULT NULL,`oname` varchar(255) DEFAULT NULL,`rate` varchar(255) DEFAULT NULL,`judge` varchar(255) DEFAULT NULL,`inq` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=517 DEFAULT CHARSET=utf8;

存储到数据库

def saveDataToDb(dataList):for i in range(0, len(dataList)):data = dataList[i]print(data)# 连接数据库connect = pymysql.Connect(host='localhost',port=3306,user='root',passwd='',db='douban',charset='utf8')# 获取游标cursor = connect.cursor()sql = "INSERT INTO top250 (link, image, cname, oname, rate, judge, inq) VALUES (  '%s', '%s', '%s', '%s', '%s', '%s', '%s')"data = (data[0], data[1], data[2], data[3], data[4], data[5], data[6])cursor.execute(sql % data)connect.commit()

5、完整代码

# -*- coding: utf-8 -*
from bs4 import BeautifulSoup  # 网页解析,获取数据
import re       # 正则,文字匹配
import requests  # 获取网页数据
import xlwt     # excel操作def main():baseUrl = "https://movie.douban.com/top250?start="# 爬取网页dataList = getDate(baseUrl)# 保存数据savePath = "豆瓣top250.xls"saveData(savePath, dataList)# saveDataToDb(dataList)# 得到指定URL的网页内容
def askUrl(url):headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'}html = ""try:r = requests.get(url=url, headers=headers, timeout=3)r.encoding = 'utf-8'html = r.textexcept Exception as e:if hasattr(e, "code"):print(e.code)if hasattr(e, "reason"):print(e.reason)return htmldef getDate(baseUrl):dataList = []for i in range(0, 10):url = baseUrl + str(i*25)html = askUrl(url)# 解析数据soup = BeautifulSoup(html, "html.parser")for item in soup.find_all("div", class_="item"):data = []  # 存放一部电影的所有信息item = str(item)link = re.findall(r'<a href="(.*)">', item)[0]  # 链接data.append(link)image = re.findall(r'<img.*src="(.*)" .*/>', item)[0]  # 图片data.append(image)titles = re.findall(r'<span class="title">(.*)</span>', item)  # 片名data.append(titles[0])   # 添加中文名if len(titles) == 2:   # 添加外国名data.append(titles[1].replace("\\", ""))else:data.append(" ")rate = re.findall(r'<span class="rating_num".*>(.*)</span>', item)[0]  # 评分data.append(rate)judge = re.findall(r'<span>(\d*)人评价</span>', item)[0]  # 评级人数data.append(judge)inq = re.findall(r'<span class="inq">(.*)</span>', item, re.S)  # 简述if len(inq) != 0:inq = inq[0].replace("。", "")data.append(inq)else:data.append("")bd = re.findall(r'<p class="">(.*?)</p>', item,  re.S)[0]    # 其他信息bd = re.sub('<br/>', " ", bd)bd = re.sub("/", " ", bd)bd = re.sub("\\n", " ", bd)bd = re.sub(r"\xa0", " ", bd)data.append(bd.strip())dataList.append(data)return dataListdef saveData(savePath, dataList):workbook = xlwt.Workbook(encoding="utf-8", style_compression=0)worksheet = workbook.add_sheet("豆瓣top250", cell_overwrite_ok=True)col = ("电影详情链接", "图片链接", "影片中文名", "影片英文名", "评分", "评价数", "概况", "相关信息")for i in range(0, 8):worksheet.write(0, i, col[i])for i in range(0, 250):data = dataList[i]for j in range(0, 8):worksheet.write(i+1, j, data[j])workbook.save(savePath)if (__name__ == "__main__"):main()  

6、小注

python操作数据库的知识
python操作数据库的知识

b站链接
https://www.bilibili.com/video/BV12E411A7ZQ

【爬虫】案例(爬取豆瓣top250)[完整+详细]相关推荐

  1. 爬虫经典案例 | 爬取豆瓣top250

    一.页面分析 1.1 单页分析 目标url:https://movie.douban.com/top250?start=0&filter= 本次的爬取目标主要是:标题.评分.评价人数.引言.电 ...

  2. 简单的爬虫例子——爬取豆瓣Top250的电影的排名、名字、评分、评论数

    爬取思路: url从网页上把代码搞下来 bytes decode ---> utf-8 网页内容就是我的待匹配的字符串 ret = re.findall(正则,待匹配的字符串), ret 是所有 ...

  3. 爬虫案例——爬取豆瓣排名及影评

    豆瓣Top500 from urllib import request import reclass MovieTop(object):def __init__(self):self.start = ...

  4. python爬虫豆瓣250_python爬虫二 爬取豆瓣Top250上

    The Dormouse's story Once upon a time there were three little sisters; and their names were Elsie, L ...

  5. Python爬取豆瓣Top250电影中2000年后上映的影片信息

    Python爬取豆瓣Top250电影中2000年后上映的影片信息 前言 双十一前加在京东购物车的一个东西,价格330,Plus会员用券后差不多310.双十一当天打开看了下399,还得去抢满300减10 ...

  6. 零基础爬虫----python爬取豆瓣电影top250的信息(转)

    今天利用xpath写了一个小爬虫,比较适合一些爬虫新手来学习.话不多说,开始今天的正题,我会利用一个案例来介绍下xpath如何对网页进行解析的,以及如何对信息进行提取的. python环境:pytho ...

  7. python爬取豆瓣电影top250_Python爬虫 - scrapy - 爬取豆瓣电影TOP250

    0.前言 新接触爬虫,经过一段时间的实践,写了几个简单爬虫,爬取豆瓣电影的爬虫例子网上有很多,但都很简单,大部分只介绍了请求页面和解析部分,对于新手而言,我希望能够有一个比较全面的实例.所以找了很多实 ...

  8. Python爬虫入门 | 4 爬取豆瓣TOP250图书信息

      先来看看页面长啥样的:https://book.douban.com/top250   我们将要爬取哪些信息:书名.链接.评分.一句话评价--   1. 爬取单个信息 我们先来尝试爬取书名,利用之 ...

  9. 一起学爬虫——通过爬取豆瓣电影top250学习requests库的使用

    一起学爬虫--通过爬取豆瓣电影top250学习requests库的使用 学习一门技术最快的方式是做项目,在做项目的过程中对相关的技术查漏补缺. 本文通过爬取豆瓣top250电影学习python req ...

最新文章

  1. org.apache.poi 读取数字问题
  2. N*N匹马,N个赛道,求出最快N匹马的解法
  3. 转:Web Service入门开发简单例子--很详尽
  4. SparseArray代替HashMap
  5. [剑指offer]面试题16:反转链表
  6. 浅谈 Linux 高负载的系统化分析
  7. 数论 —— 莫比乌斯反演
  8. 【多项式求逆】[BZOJ3456]城市规划
  9. JS 运行、复制、另存为 代码。
  10. Halcon 学习总结——电子加密狗字符检测(ocr_dongle)
  11. 拼多多服务端实习生笔试-滑动窗口2018/4/3
  12. 开课吧课堂之如何创建多级类层次
  13. freemarker在线编辑
  14. 推荐24款好用的数据可视化分析工具,个个堪称神器!
  15. amd服务器epyc系列,AMD在市场上有EPYC系列的两个版本
  16. SQLMAP-Tamper之较为通用的双写绕过
  17. Value did not match schema:\n1. return.ok.Ok2: Invalid type. Expected: array, given: null
  18. Linux命令之dos2unix
  19. 解释reverse=True等python基础问题
  20. 中文文本纠错神器Pycorrector是如何收获2000 Star的?

热门文章

  1. 设置输入框el-input图标 / el-input表单只显示number
  2. vdp备份oracle系统,vsphere虚拟化使用第三方备份方案常见CBT故障实战处理
  3. java简易画图工具_求Java简单画图工具
  4. win7为什么无法共享计算机名称,win7共享文件夹无法访问怎么办?共享文件夹无权限访问设置方法...
  5. SAP 理解期末清帐和重分类
  6. 【Android】设置EditText输入类型和内容长度
  7. 开门!要源代码!这个网红机械妖姬竟踢爆对方公司总部
  8. 100天精通Python(可视化篇)——第82天:matplotlib绘制不同种类炫酷散点图参数说明+代码实战(二维散点图、三维散点图、散点图矩阵)
  9. Apache Flink 1.10.0 最新发布,年度最大规模版本升级!
  10. sugarcrm连接mysql_SugarCRM 主表-自定义字段