requests 正则表达正式基础爬虫案例二:爬取网站数据

news/2024/5/9 5:11:31/文章来源:https://blog.csdn.net/ldz_wolf/article/details/130099120

要求:爬取https://ssr1.scrape.center/ 网站中所有电影标题、类型、地区、电影时长、上映日期、评分、简介;
分析:网站共有两个页面组成,电影列表和详情,我们所需要的内容都在详情页面里面可以找到。
列表页面共10页,根据分析可得出,列表页面地址:https://ssr1.scrape.center/page/{页码};
详情页面就利用正则表达式把一个个内容解析出来即可。
在这里插入图片描述

直接上代码了:

# coding:utf-8
import requests
import json
import re
from os import makedirs
from os.path import exists
import timeimport multiprocessingBASE_URL = 'https://ssr1.scrape.center'
RESULTS_DIR = 'movies'
exists(RESULTS_DIR) or makedirs(RESULTS_DIR)
TOTAL_PAGE = 10# 抓取列表页面内容
def grap_html(page):page_url = f'{BASE_URL}/page/{page}'res = requests.get(page_url)return res.text
# 解析列表页面,利用正则表达式解析出电影详情url地址。
def parse_index(html):results = re.findall('.*?el-card.*?href="(.*?)"', html, re.S)results = results if results else []return results
# 抓取详情页面内容
def grap_detail(path):detail_url = f'{BASE_URL}{path}'res = requests.get(detail_url)res.encoding = 'utf-8'return res.text
# 解析电影详情页面,利用正则表达式解析出需要内容,返回字典
def parse_detail(html):title_match = re.search('<h2.*?>(.*?)</h2>', html)title = title_match.group(1) if title_match else Nonecategories = re.search('<div.*?categories">(.*?)</div>', html, re.S)kind_match = re.findall('<span>(.*?)</span>', categories.group(1), re.S)kind = kind_match if kind_match else Nonearea_html = re.search('<div.*?categories">.*?</div>.*?<div.*?>(.*?)</div>', html, re.S)area_match = re.search('<span.*?>(.*?)</span>.*?<span.*?>.*?</span>.*?<span.*?>(.*?)</span>', area_html.group(1),re.S)area = area_match.group(1) if area_match else Noneusetime = area_match.group(2) if area_match else Nonetime = re.search('\d{4}-\d{2}-\d{2}', html, re.S).group() if re.search('\d{4}-\d{2}-\d{2}', html, re.S) else Noneremark = re.search('<div.*?drama.*?<p.*?>(.*?)</p>', html, re.S)desc = remark.group(1).strip() if remark else Nonescore = re.search('<p.*?score.*?>(.*?)</p>', html, re.S)score = score.group(1).strip() if score else Nonelogo = re.search('<div.*detail.*?<img.*?src="(.*?)@.*?".*?>', html, re.S)logo = logo.group(1) if logo else Nonedict = {'title': title,'kind': kind,'area': area,'usetime': usetime,'onlinetime': time,'desc': desc,'score': score,'logo': logo}return dict# 下载电影海报,并以图片形式保存
def down_movie_poster(title, url):path = f'{RESULTS_DIR}/{title}.jpg'res = requests.get(url)with open(path, "wb") as f:f.write(res.content)
# 保存电影信息到文件,电影名称作为文件名
def savefile(movie):text = '电影主题:{title}\n电影类型:{kind}\n上映地区:{area}\n电影时长:{usetime}\n上映时间:{onlinetime}\n评分:{score}\n简介:{desc}'.format(**movie)name = movie.get('title')data_path = f'{RESULTS_DIR}/{name}.json'# 将字典以json字符串形式写入文件json.dump(movie, open(data_path, 'w', encoding='utf-8'), ensure_ascii=False, indent=2)# with open(RESULTS_DIR + '/' + movie.get('title') + '.json', 'w') as f: f.write(text)down_movie_poster(name, movie.get('logo'))# 处理指定页码的列表页中数据,并存文件
def grapone(page):print("开始下载第%d页" % page)start = time.perf_counter()s = time.time()# 下载列表页面,并解析出电影详情url地址。detailurls = parse_index(grap_html(page))for result in detailurls:# 抓取详情页面detail_html = grap_detail(result)# 解析详情页面,返回电影dictmovie = parse_detail(detail_html)savefile(movie)end = time.perf_counter()e = time.time()print("第%d页完成下载,CPU用时:%d,耗时:%d" % (page, end - start, e - s))# 单一线程抓取网站内电影数据
def grapall():# 单线程模式start = time.perf_counter()s = time.time()for i in range(1, TOTAL_PAGE + 1):grapone(i)end = time.perf_counter()e = time.time()print("单线程CPU共用时:%d,耗时%d" % (end - start, e - s))# 多线程抓取电影数据
def multigrap():# 多线程模式start = time.perf_counter()s = time.time()pool = multiprocessing.Pool()pages = range(1, TOTAL_PAGE + 1)pool.map(grapone, pages)pool.close()pool.join()end = time.perf_counter()e = time.time()print("多线程CPU共用时:%d,耗时%d" % (end - start, e - s))if __name__ == '__main__':multigrap()# grapall()

最终效果:

在这里插入图片描述

其他不说了,直接看代码得了,正则表达式部分比较烂。。。
本文参考文献:https://cuiqingcai.com/202224.html ,想学习爬虫的可以移步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_877681.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PC端网站 rem适配方案

以1920设计稿为准 1、使用sass语法 转换px rem &#xff0c; vscode编辑器安装插件easy-scss 安装之后打开插件setting.json&#xff0c; 在setting.json里配置转换后css的路径 “easysass.targetDir”: “./css” 创建css文件、scss文件&#xff1a; 项目中如何使用index.sc…

给大家分享下织梦网站模板

最近需要用到一个官网模板&#xff0c;作为一个后台程序员来说写前端和专业的差了远了&#xff0c;所以想找个模板学习下&#xff0c;可是我这面是一顿搜一顿找找了好多都快绝望了因为都不是免费下载的不过最终还是找到了&#xff0c;在这里分享给大家 模板一 红色大气响应式重…

网站案例,成功案例--我的个人作品

西南贝思建筑图书连锁店网上书店成都美可快餐诚信促进会 成都商务投资网中国西部土工材料网广东劳斯丹顿卫浴设备有限公司盛世外贸服装批发城西南时报成都免费网站中国检察网成都乐于健康护理成都顺世文化传播有限公司西南大学生联盟成都川国味餐饮有限公司成都市科技进修学院…

vue 微软插件实现根据第三方网站链接预览word、pd、excelf等文件

一开始做的时候没想到会预览不了&#xff0c;报错 File not found The URL of the original file is not valid or the document is not publicly accessible. Verify the URL is correct, then contact the document owner.如下&#xff1a; 我在微软官网查到&#xff1a; 官…

世界第五大外包公司(CGI group inc)能够做出来多烂的网站,通过系分的课程设计我对于人机交互和团队合作的几个总结

文章目录 前情提要为开始刨祖坟模式做准备CGI inc发家史什么是外包公司CGI group inc看看CGI公司外包的网站你以为CGI做的网站这就算差了&#xff1f;听说你想自己改成好记的密码&#xff0c;想多了吧信息填写一次过&#xff0c;听说你想写到一半保存&#xff1f;我是随便的人吗…

小型网站到大型网站的演化过程

本文摘自书籍《大型网站技术架构.核心原理与案例分析》 1. 初始阶段&#xff1a; 应用程序、数据库、文件等所有资源都在一台服务器上。 2. 应用服务与数据服务分离 应用和数据分离后整个网站使用三台服务器&#xff1a;应用服务器、文件服务器和数据库服务器。这三台服务器对…

python爬取唯品会电商网站数据并保存到csv中

文章目录 1.目标、思路2. 获取数据3.解析数据4.保存数据 1.目标、思路 目标&#xff1a; 本次爬虫爬取的目标是唯品会中口红分类的商品。&#xff08;url &#xff09; 思路&#xff1a;打开网页后点击F12打开抓包工具&#xff0c;找到我们想要的数据包&#xff0c;并分析。 …

各大视频网站下载神器

先说介绍工具&#xff0c;后说使用方法&#xff08;其实不难&#xff09; you-get 是GitHub上的一个项目&#xff0c;其实就是通过几个命令行下载各大网站视频的&#xff0c;这对于做视频的爱好者及一些司机都是很奈斯的选择。 地址&#xff1a;https://github.com/soimort/y…

电子商务网站的 10 个易用性规则

电子商务网站的 10 个易用性规则 电子商务网站的竞争越来越激烈&#xff0c;虽然你可能在以最低的价格卖最好的东西&#xff0c;但同样重要的的是用户的购买体验&#xff0c;对电子商务网站而言&#xff0c;易用性就是让用户尽 可能快而简单的完成购买&#xff0c;有时候&…

基于jquery Stellar.js实现 网站视差滚动效果

stellar.js是一个 jQuery插件&#xff0c;能很容易地给网站添加视差滚动效果。 虽然已经停止了维护&#xff0c;但它非常稳定&#xff0c;与最新版本的jQuery兼容。 http://markdalgleish.com/projects/stellar.js/ 官网 1.引用js 包 <script src"path/to/jquery/jq…

推荐一个前沿的无线通信网站——定为电子

欢迎来到定为官网 成都定为电子技术有限公司是一家集咨询、设计、研发和生产无线通信数字基带和模拟前端等产品的高新技术企业&#xff0c;公司一直专注于算法原型验证、教学实验、无线通信和便携式仪器设备等领域。 在算法原型验证方面&#xff0c;定为电子坚持为客户提供最…

网站被DDOS攻击,我只用了2招应对

做网站难免遇到被黑客攻击&#xff0c;特别是关键词排名较靠前的站点&#xff0c;一些不正当的竞争对手会使用不正当的方法把你网站搞瘫&#xff0c;以便把流量引到自己平台上让自己得利。不管是大平台网站还是小平台网站都会遇到DDOS攻击&#xff0c;难道面对DDOS&#xff0c;…

【Python】利用网站API接口获取天气信息

本文主要讲如何利用Python来获取天气信息。主要程序实现思路是从命令行传递坐标信息&#xff0c;然后利用天气预报网站的免费接口获取到相关天气信息&#xff0c;返回结果以json格式显示&#xff0c;并打印出需要的近3天天气情况。 信息源&#xff1a;https://openweathermap.…

做一个酷网站(2)

成品 成品源码 接上篇博客 相信你根据 Demo 的源代码 已经可以制作一个简单的动态网站了 核心思想 同时动态修改 style 标签 和 页面上 某个元素的内容产生一种网站在动态展示的效果 知识点 ES6 箭头函数使用setInterval(fn, n)substring(n, m)document.querySelector()dom 元…

用户访问一个网站的整过程

原文网址&#xff1a;https://blog.csdn.net/yonggeit/article/details/72857630 用户访问网站流程框架 第一步&#xff1a;客户端用户从浏览器输入www.baidu.com网站网址后回车&#xff0c;系统会查询本地hosts文件及DNS缓存信息&#xff0c;查找是否存在网址对应的IP解析记…

手机网页的设计vs2008开发wap网站(一)

vs2008开发wap网站(一)首先新创建个项目&#xff0c;打开VS2008&#xff0c;新建个网站项目&#xff0c;我们添加新项时会发现以前在vs2003或vs2005中的“移动Web窗体”项没有了&#xff0c;下图为vs2003和2005中的。 vs2008中就没有“移动Web窗体”这一项&#xff0c;这…

优化网站性能 提高网站速度访问速度的14条实践

相信互联网已经越来越成为人们生活中不可或缺的一部分。ajax&#xff0c;flex等等富客户端的应用使得人们越加“幸福”地体验着许多原先只能在C/S实 现的功 能。比如Google机会已经把最基本的office应用都搬到了互联网上。当然便利的同时毫无疑问的也使页面的速度越来越慢。自己…

利用代码托管平台 Pages 搭建静态个人网站

一、写在前面 笔者最近接触生成个人博客的开源项目&#xff0c;玩着挺有意思的。用简单的命令生成vue或go的项目模板。通过markdown语言文档生成静态页面。网上也有很多教学博客。感谢各位大神博主的分享。这里也简单记录下我的使用笔记。 二、开源的hexo框架 框架简介 官方…

推荐3个网页设计在线配色网站

推荐3个网页设计在线配色网站 对于网页设计师而言&#xff0c;每个网站的设计都需要一套最适合它的配色方案&#xff0c;配色方案的选择关系到整个网站的成功与失败。你会不会因为苦恼于一个很急的网站项目的配色方案迟迟没有确定&#xff0c;而抓狂呢&#xff1f;下面暴风彬彬…

提高网站设计可用性(有效性)的10条原则

决定一个网站成败命运的&#xff0c;不是视觉设计&#xff0c;而是设计的可用性和有效性。访问网页的用户们握着鼠标&#xff0c;决定一切&#xff0c;“以用户为中心”已然是成功网站的标准设计方向。总之&#xff0c;用户不用的功能&#xff0c;就不该存在。 我们并不打算重复…