项目之爬虫入门(豆瓣TOP250)
本文的代码是基于Python的爬虫练手,爬取豆瓣电影top250的信息
配套视频:爬虫视频
先贴一张爬虫结果图:
预备知识
- 浏览器访问网址的步骤是:1)用户发送一个url链接访问请求;2)服务器根据请求返回特定的响应;3)浏览器解析返回的响应(HTML),获取目标信息等展示出来。
- 爬虫的目的就是在3)步时,不全部解析出来,而是只取自己需要的部分保存下来。所以爬虫的整体流程分3步
- 发送url,获取响应数据(html)
- 解析数据
- 保存结果
1. 发送url,获取响应
使用urllib包
参考:urllib讲解视频
# 得到一个url的指定内容
def askURL(url):# 用户代理,模拟浏览器头部信息,向豆瓣服务器发消息head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"}# 发送url请求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
2. 解析数据
使用BeautifulSoup包
BeautifulSoup讲解视频
正则表达式、正则提取
# 正则表达式用来获得爬虫指定信息
findLink = re.compile(r'<a href="(.*?)">') # 找链接的pattern
findImg = re.compile(r'<img.*src="(.*?)"', 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)# 根据url,获得指定信息
def getData(baseurl):datalist = []for i in range(0, 1):url = baseurl + str(i*25)html = askURL(url) # 保存html源码# 2.解析数据soup = BeautifulSoup(html, "html.parser")for item in soup.find_all('div', class_="item"):# print(item)data = []item = str(item)# 使用正则表达式解析数据link = re.findall(findLink, item)[0]data.append(link)imgSrc = re.findall(findImg, item)[0]data.append(imgSrc)titles = re.findall(findTitle, item)if(len(titles) == 2):ctitile = titles[0]otitile = titles[1]data.append(ctitile)data.append(otitile)else:ctitile = titles[0]otitile = ""data.append(ctitile)data.append(otitile)rating = re.findall(findRating, item)[0]data.append(rating)judgeNum = re.findall(findJudge, item)[0]data.append(judgeNum)inq = re.findall(findInq, item)[0]if len(inq) != 0:inq = inq.replace("。", "")data.append(inq)else:data.append(" ")bd = re.findall(findBd, item)[0]bd = re.sub('<br(\s+)?/>(\s+)?', " ", bd)bd = re.sub('/', "", bd)data.append(bd.strip())datalist.append(data)return datalist
3. 保存数据
两种格式,一种xml格式,使用xlwt包;一种db格式,使用sqlite3包
xml视频讲解、sqlite视频讲解
# 保存成xml格式
def saveData(datalist, savepath):print("save...")# 创建一个xml对象book = xlwt.Workbook(encoding="utf-8", style_compression=0)# 插入页签sheet = book.add_sheet("豆瓣top250")cols = ("电影详情链接", "图片链接", "影片中文名", "外国名", "评分", "评价数","概况","相关信息")# 写入内容for i in range(8):sheet.write(0, i, cols[i])for i in range(len(datalist)):print("第{0}条".format(i+1))for j in range(0, 8):sheet.write(i+1, j, datalist[i][j])book.save(savepath)# 保存成数据库(db)格式
def saveDataDB(datalist, savepathdb):# 初始化数据库,创建表init_db(savepathdb)# 连接数据库conn = sqlite3.connect(savepathdb)# 创建游标c = conn.cursor()# 编写sql语句sql = ""for data in datalist:for idx in range(len(data)):if idx is 4 or idx is 5:continuedata[idx] = '"' + data[idx] + '"'sql = '''insert into movie250 (info_link, pic_link, cname, ename, score, rated, instroduction, infor) values(%s)'''%",".join(data)print(sql)# 执行sql语句c.execute(sql)# 提交数据库操作conn.commit()# 关闭数据库c.close()# 初始化数据库
def init_db(savepathdb):conn = sqlite3.connect(savepathdb)c = conn.cursor()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,infor text)'''c.execute(sql)conn.commit()conn.close()
有需要代码的小伙伴可以留下邮箱~
项目之爬虫入门(豆瓣TOP250)相关推荐
- Python 爬虫分析豆瓣 TOP250 之 信息字典 和 马斯洛的锥子
问题 本文是对<Python 爬虫分析豆瓣 TOP250 告诉你程序员业余该看什么书?> 一文的补充 我们以<追风少年>为例 用chrome的developer tool查看源 ...
- 爬虫入门——电影top250爬取
爬虫入门(自用) 第一篇 Python 爬虫入门之 电影top250爬取 文章目录 爬虫入门(自用) 前言 一.前置知识 requests库 正则表达式(re库) 二.使用步骤 1.引入库 2.小试牛 ...
- 爬虫-关于豆瓣top250的数据可视化
目的:该文章的目的是对豆瓣TOP250网页的爬虫就行可视化分析. 明确目标,导入所需库 使用flask库建立网络框架 完成每个网页的内容 豆瓣电影评分top250:豆瓣电影 Top 250 (doub ...
- Python 爬虫分析豆瓣 TOP250 告诉你程序员业余该看什么书?
[CSDN 编者按]程序员刷豆瓣也要刷出技术感,本文爬取豆瓣 TOP250 告诉你这些书"热门"在哪里!案例分析之外,重在梳理编写爬虫的逻辑和链路关键点,手把手教你形成自己编写爬虫 ...
- Python爬虫之豆瓣TOP250爬取
文章目录 1.分析网页 1.1为什么要分析网页 1.2如何分析网页 1.3打开编辑环境 1.4生成链接 2.请求网页 2.1导入包 2.2设置浏览器代理 2.3请求服务器 2.4请求服务器代码汇总 3 ...
- python——爬虫(豆瓣top250)
一.抓取豆瓣top250网页数据 import urllib.request as urlrequest from bs4 import BeautifulSouptop250_url = " ...
- 爬虫学习--豆瓣top250
最近在学习爬虫技术,在网上找了一些资料,也找到了一些例子,但找到的例子是基于python2的所以就改成了python3的,而且加了一个将电影的评分也打印出来的语句,话不多说,上代码: #!/usr/b ...
- Python爬虫实战----------豆瓣TOP250
*前段时间学习了一些浅显的爬虫知识,防止遗忘写个博客记录一下,如果能帮到其他人是更好的 本篇介绍一下如何一步一步实现使用python爬取豆瓣电影TOP250,博主是个小白,如果内容有误,请将宝贵的建议 ...
- python爬虫多线程下载_Python爬虫之多线程下载豆瓣Top250电影图片
爬虫项目介绍 本次爬虫项目将爬取豆瓣Top250电影的图片,其网址为:https://movie.douban.com/top250, 具体页面如下图所示: 本次爬虫项目将分别不使用多线程和使用多线程 ...
最新文章
- 期末考试中微积分的证明题的分析:Taylor级数展开
- Vivado各个过程产生的文件与ISE的对比
- ztree.js的使用整理
- curl 忽略证书访问 https
- 7.Linux 输入子系统分析
- 爬虫的基本知识第一个请求requests模块的基本使用
- Spring启动和缓存抽象
- 鲲鹏920 centos7 postgresql12 postgis2.5.4编译
- 四大利器帮你走出IT运维管理的困境
- 使用abd工具查看安卓设备cpu处理器是32位或64位
- 炼油厂将abc三种原油 matlab求解,某工厂制造三种产品A、B和C需要两种资源(劳动力和原材料),目标是要确定总利润最大的最优生产计划。列出的线性...
- [ctf.show.reverse] 红包六
- 数据库实验六:完整性语言实验
- 如何从CA获取数字证书
- 第41部分-Linux x86 64位汇编MMX使用
- Databricks 第1篇:初识Databricks,创建工作区、集群和Notebook
- mysql聚合函数查询,子查询,关联查询
- finereport自学教程_办公物语丨Finereport零基础入门教程,你不可缺少的报表神器...
- 怎么连接到局域网内的另一台电脑
- 网络经济与企业管理【九】之企业知识管理
热门文章
- qt编写的android程序在android系统中运行,中文显示乱码的解决方法
- ASP.NET中插入Flash
- 【Java从0到架构师】SpringBoot - SpringMVC
- 网络协议从入门到底层原理(3)网络互联模型、物理层、数据链路层(CSMA/CD协议、Ethernet V2帧、PPP协议)
- 小程序入门学习19--springboot之HelloWorld
- python 实现的键盘记录器 小功能
- python阅读wtfbook疑问和验证
- 解决方案大全ImportError: libta_lib.so.0: cannot open shared object file: No such file or directory
- 读书笔记_打开量化投资的黑箱10
- 离职潮来袭,但为什么HR还是很难招到人?