python 爬取网站首页并获取资源文件

news/2024/5/10 14:12:33/文章来源:https://blog.csdn.net/json_ligege/article/details/127068915

一、使用requests模块,如果没有安装请使用如下命令,安装requests模块

pip install requests

二、打开PyCharm,创建一个新的py文件

1.请求网站,获取网页信息

首先使用浏览器,获取请求头信息,用于python模拟浏览器行为请求

 封装请求方法

def get_html(url):""" 请求网址 返回网页内容 """A = requests.Session()A.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',}web = A.get(url, timeout=7)# 设置解析编码的方式web.encoding = 'gb2312'return web

 2.通过re模块来匹配获取相应资源路径,os模块创建文件夹及创建写入文件

(1)js 路径为src

(2)image 路径为src

(3)css 路径为href 但会与a标签的href重复 故要多增加一点字符串以作区分

代码如下:

def get_all_img(content):"""获取网页所有 img css js"""# 更换编码方式content = content.replace('charset=gb2312', 'charset=utf-8')# 获取所有img js文件路径f_re = 'src="(.*?)"'file_paths = re.findall(f_re, content)# 获取单引号的img js文件路径f_re2 = "src='(.*?)'"file2_paths = re.findall(f_re2, content)# 获取所有css文件路径c_re = 'type="text/css" href="(.*?)"'css_paths = re.findall(c_re, content)# 合并到一个列表中file_paths.extend(css_paths)if file2_paths:file_paths.extend(file2_paths)for file in file_paths:# 获取文件链接后缀名 只获取css image文件file_infos = file.split('/')fileName = file_infos[len(file_infos) - 1]fileExts = fileName.split('.')ext = fileExts[len(fileExts) - 1].strip()if file.find('.js') > -1:dirName = 'js/'elif ext == 'css':dirName = 'css/'elif ext in ['jpg', 'png', 'gif']:dirName = 'images/'else:continue# 文件夹不存在 则创建文件夹if not os.path.exists(dirName):os.mkdir(dirName)# # 判断文件格式及是否已存在fileName_end = dirName + fileNameif not os.path.isfile(fileName_end):# 处理相对路径资源if file[1:8] == 'uploads':file = main_url + fileelif file[0:7] == 'scripts':continuetry:pic = get_origin_img(file, main_url)fp = open(fileName_end, 'wb')fp.write(pic.content)fp.close()except BaseException:print('获取【%s】失败' % file)continuecontent = content.replace(file, '../' + fileName_end)return content

获取资源的请求方法

def get_origin_img(url, referer):""" 请求网址图片 增加请求头 返回图片二进制 """A = requests.Session()A.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0','Accept': 'image/webp,*/*','Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Connection': 'keep-alive','Referer': referer,}return A.get(url, timeout=10)

3.把网页内容写入本地文件

def record_article(fileName, dirName, content):""" 文章内容写入处理 """if not os.path.exists(dirName):# 递归创建目录os.makedirs(dirName)f = os.open(dirName + '/' + fileName, os.O_RDWR | os.O_CREAT)os.write(f, str.encode(content))os.close(f)

最后调用方法:

html = get_html(url)
content = get_all_img(html.text)
record_article('首页.html', '首页', content)

效果如下:

访问本地首页html文件,与原网站一致

 

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

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

相关文章

c语言打字测验的系统功能分析,C语言自我测试网站的设计开题报告.doc

您所在位置:网站首页 > 海量文档&nbsp>&nbsp学术论文&nbsp>&nbsp开题报告C语言自我测试网站的设计开题报告.doc6页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。下载提示1.本站不保证该用户上传的文档完整性&…

pandas 如何删掉第一行_第16篇:Pandas快速爬取网站上的表格数据

pandas的read_html()函数是将HTML表转换为pandas内部的DataFrame类型的快速便捷的方法。更直白地说,对于专门写爬取表格的Python从业者来说, 此函数简直就是懒人一大利器,你无需重做轮子如何使用Cython去写一个table表格的解释器。因为Pandas…

手机端网站服务器软件,手机端远程连接服务器的软件

手机端远程连接服务器的软件 内容精选换一换由于在安全软件中设置了安全登录限制,导致远程桌面连接Windows云服务器报错:无法验证此远程计算机的身份。需要再次登录输入密码。云服务器安装了安全软件,防止有未知IP登录云服务器。卸载安全软件…

实验五MySQL存储过程_「mysql 存储过程」MySQL | 存储过程 - seo实验室

mysql 存储过程一、概念存储过程简称过程,procedure,是一种用来处理数据(增删改)的方式。简单点,我们也可以将其理解为没有返回值的函数。一般存储过程并不显示结果,而是把结果返回给你指定的变量二、创建过程基本语法create proc…

服务器怎么不用绑定域名搭建网站,一个空间放两个网站,且不用子目录绑定域名的方法...

一个空间绑定两个域名的办法操作很多空间支持多域名绑定,但是不支持子目录绑定,这时我们就可以考虑如下几种方法来实现一个空间放多个域名站点的方法,只是其他站点都需要在一个目录下大开,但这毫不影响搜索引擎的收录。方法一&…

宝藏网站IPOL:Image Processing On Line 经典图像处理论文+源码+在线仿真

读研已有大半年的时间,在这段时间里,我一直进行图像处理相关内容的学习,平时除了完成作业、准备项目之外,我的日常工作就是找经典论文、翻译、阅读、分析源代码、尝试自己写代码、与其它经典算法进行比较、尝试提出自己idea&#…

网站开发之数据表开发库——Datatables

我们在做网站开发时,很常见的一个需求是做数据展示表,并且可能需要数据表能够实现一些数据筛选、排序等能够定制展现方式功能,也包括对表的样式美观会有一些需求。而这些全部都已经由Javascript的一个库——Datatables做到了,我们…

vs2013开发64位网站和项目设置

最近用mvc写网站玩,需要连接oracle数据库,我电脑是64位系统,就安装了64位的oracle客户端,然而在连接数据库时总报错,折腾了半天, 按照网上的说法,修改这里,根本不起作用&#xff0c…

基于bootstrap(H+)的MVC网站开发之一登录页面

1、bootstrap form 表单自带前端验证功能。不是特殊无需自写前端验证js。 2、表单提交有两种方式,一是form表单中submit提交。二是ajax异步提交。 3、form表单action属性 action 属性规定当提交表单时,向何处发送表单数据。 默认:为当前地…

FTP发布VS2015网站项目

1、前提条件 已经部署了FTP服务。在windows下通过iis创建Ftp服务方法可参考:Windows通过 iis创建FTP服务VS2015 asp.net 项目 2、操作步骤 1、vs菜单中 生成——发布 2、 配置发布文件及发布 创建配置文件 后面的用默认配置即可,点击发布 3、查看…

Spring学习笔记(二十三)——实现网站微信扫码登录获取微信用户信息Demo

目录微信扫码登录介绍开发步骤微信扫码登录示例微信开放文档遇到的问题使用第三方工具实现网站微信扫码登录开发前介绍开发步骤微信扫码登录获取微信用户信息Demo实现流程实现效果实现过程实现源码源码下载微信扫码登录介绍 微信扫码登录是指微信OAuth2.0授权登录让微信用户使…

ffmpeg+nginx+rtmp+web实现视频直播网站

项目简介:视频直播网站由三个部分构成:1.推流端 2.服务器 3.拉流端。在该项目中,推流端用ffmpeg完成,服务器由NGINXRTMP模块完成,拉流端使用VLC完成。 一、开发环境简介: 推流端:系统&#xff1…

网站安装打包 修改app.config[六]

在winform的安装工具中,少不免有一些配置文件要放到app.config去,于是修改也是成了一种需求! 无论是修改web.config还是app.config,普遍方式都有两种,用net自带封装的类,或是自定义xml操作。 可参考之前的一…

如何在IIS里对网站限速

不管是ISP或是程序开发者,都可能需要在特定情况下,对使用IIS搭建的Web站点进行限速。 本文就简单说说在IIS中如何限速,因为之前不久,我也象大多数开发者一样,由于程序测试的需要,寻求IIS限速的方法&#xf…

换了无线路由网站打不开的解决方法

一日领导家安装adsl宽带了想用无线上网就购了个dlink双线的无线路由,设置好参数后开始拔号等了很久都没有反应,死活拔不上去。最后没有办法只好另想他法,回到单位一想单位有一个tplink三线无线路由两个换换不就行了。想到这第二天马上拿到领导…

javaweb 网站邮件发送 javaMail

我们这里是使用qq邮箱来演示邮件的发送,需要先对qq邮箱先进行一些设置。在设置-账户我需要开启这个pop3协议,他会生成一个授权码。 常用的邮件传输协议有2种:POP3/SMTP、IMAP/SMTP。 POP和IMAP的区别:在邮箱客户端的操作&#xf…

网站图片延时加载

为什么80%的码农都做不了架构师?>>> 当你看到网页上有很多图片,会不会感觉加载速度超慢,甚至有砸电脑的冲动?其实,我们可以优先加载肉眼能够看到的图片,当用户拖动滚动条时,再加载其…

在线绘图网站

https://www.freedgo.com/

【百度地图API】——国内首款团购网站的地图插件

原文:【百度地图API】——国内首款团购网站的地图插件摘要: 本文介绍了一款应用在团购网站上的地图插件,适用于目前非常流行的团购网站。使用这款地图插件,无需任何编程技术,你就把商家的位置轻松地标注在地图上。 前台地址 http:…

电商网站接入快递查询

网页跳转格式 适用场景:在管理后台中,订单列表点击显示快递详情 和 订单详情页显示快递详情,使用 iframe 嵌入该URL http://www.kuaidi100.com/chaxun?com快递名称(可以中文英文)&nu快递单号 快递名称&#xff1a…