【爬虫】案例(爬取豆瓣top250)[完整+详细]
文章目录
- 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)[完整+详细]相关推荐
- 爬虫经典案例 | 爬取豆瓣top250
一.页面分析 1.1 单页分析 目标url:https://movie.douban.com/top250?start=0&filter= 本次的爬取目标主要是:标题.评分.评价人数.引言.电 ...
- 简单的爬虫例子——爬取豆瓣Top250的电影的排名、名字、评分、评论数
爬取思路: url从网页上把代码搞下来 bytes decode ---> utf-8 网页内容就是我的待匹配的字符串 ret = re.findall(正则,待匹配的字符串), ret 是所有 ...
- 爬虫案例——爬取豆瓣排名及影评
豆瓣Top500 from urllib import request import reclass MovieTop(object):def __init__(self):self.start = ...
- python爬虫豆瓣250_python爬虫二 爬取豆瓣Top250上
The Dormouse's story Once upon a time there were three little sisters; and their names were Elsie, L ...
- Python爬取豆瓣Top250电影中2000年后上映的影片信息
Python爬取豆瓣Top250电影中2000年后上映的影片信息 前言 双十一前加在京东购物车的一个东西,价格330,Plus会员用券后差不多310.双十一当天打开看了下399,还得去抢满300减10 ...
- 零基础爬虫----python爬取豆瓣电影top250的信息(转)
今天利用xpath写了一个小爬虫,比较适合一些爬虫新手来学习.话不多说,开始今天的正题,我会利用一个案例来介绍下xpath如何对网页进行解析的,以及如何对信息进行提取的. python环境:pytho ...
- python爬取豆瓣电影top250_Python爬虫 - scrapy - 爬取豆瓣电影TOP250
0.前言 新接触爬虫,经过一段时间的实践,写了几个简单爬虫,爬取豆瓣电影的爬虫例子网上有很多,但都很简单,大部分只介绍了请求页面和解析部分,对于新手而言,我希望能够有一个比较全面的实例.所以找了很多实 ...
- Python爬虫入门 | 4 爬取豆瓣TOP250图书信息
先来看看页面长啥样的:https://book.douban.com/top250 我们将要爬取哪些信息:书名.链接.评分.一句话评价-- 1. 爬取单个信息 我们先来尝试爬取书名,利用之 ...
- 一起学爬虫——通过爬取豆瓣电影top250学习requests库的使用
一起学爬虫--通过爬取豆瓣电影top250学习requests库的使用 学习一门技术最快的方式是做项目,在做项目的过程中对相关的技术查漏补缺. 本文通过爬取豆瓣top250电影学习python req ...
最新文章
- org.apache.poi 读取数字问题
- N*N匹马,N个赛道,求出最快N匹马的解法
- 转:Web Service入门开发简单例子--很详尽
- SparseArray代替HashMap
- [剑指offer]面试题16:反转链表
- 浅谈 Linux 高负载的系统化分析
- 数论 —— 莫比乌斯反演
- 【多项式求逆】[BZOJ3456]城市规划
- JS 运行、复制、另存为 代码。
- Halcon 学习总结——电子加密狗字符检测(ocr_dongle)
- 拼多多服务端实习生笔试-滑动窗口2018/4/3
- 开课吧课堂之如何创建多级类层次
- freemarker在线编辑
- 推荐24款好用的数据可视化分析工具,个个堪称神器!
- amd服务器epyc系列,AMD在市场上有EPYC系列的两个版本
- SQLMAP-Tamper之较为通用的双写绕过
- Value did not match schema:\n1. return.ok.Ok2: Invalid type. Expected: array, given: null
- Linux命令之dos2unix
- 解释reverse=True等python基础问题
- 中文文本纠错神器Pycorrector是如何收获2000 Star的?
热门文章
- 设置输入框el-input图标 / el-input表单只显示number
- vdp备份oracle系统,vsphere虚拟化使用第三方备份方案常见CBT故障实战处理
- java简易画图工具_求Java简单画图工具
- win7为什么无法共享计算机名称,win7共享文件夹无法访问怎么办?共享文件夹无权限访问设置方法...
- SAP 理解期末清帐和重分类
- 【Android】设置EditText输入类型和内容长度
- 开门!要源代码!这个网红机械妖姬竟踢爆对方公司总部
- 100天精通Python(可视化篇)——第82天:matplotlib绘制不同种类炫酷散点图参数说明+代码实战(二维散点图、三维散点图、散点图矩阵)
- Apache Flink 1.10.0 最新发布,年度最大规模版本升级!
- sugarcrm连接mysql_SugarCRM 主表-自定义字段