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

2023-05-16

一、使用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 + fileName
        if not os.path.isfile(fileName_end):
            # 处理相对路径资源
            if file[1:8] == 'uploads':
                file = main_url + file
            elif file[0:7] == 'scripts':
                continue
            try:
                pic = get_origin_img(file, main_url)
                fp = open(fileName_end, 'wb')
                fp.write(pic.content)
                fp.close()
            except BaseException:
                print('获取【%s】失败' % file)
                continue
        content = 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文件,与原网站一致

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 爬取网站首页并获取资源文件 的相关文章

随机推荐

  • 关于电脑出厂时间查询工具的构思

    在做一个单位的计算机盘点 管理的时候 xff0c 很容易遇见需要知道电脑的采购时间 xff0c 或者出厂时间 这个信息能够帮助管理人员决定电脑是否该按定期报废制度进行报废或更换 目前为止 xff0c 作者接触过的各类电脑 xff0c 没有看
  • Outlook频繁崩溃解决方法

    这几天新换了笔记本 xff0c IT部门帮忙进行了配置 xff0c 拿到手上却屡屡发现邮件系统这出问题那出问题 xff0c 好生烦躁 经过几天的修修补补 xff0c 今天总算完全OK了 xff0c 又恢复到正常的轨道上来了 由于被折磨得够呛
  • Manifest文件详解

    一 关于AndroidManifest xml AndroidManifest xml 是每个android程序中必须的文件 它位于整个项目的根目录 xff0c 描述了package中暴露的组件 xff08 activities servi
  • Android蓝牙完全学习手册

    1 前言 市面上关于Android的技术书籍很多 xff0c 几乎每本书也都会涉及到蓝牙开发 xff0c 但均是上层应用级别的 xff0c 而且篇幅也普遍短小 对于手机行业的开发者 xff0c 要进行蓝牙模块的维护 xff0c 就必须从An
  • 【高级】深入理解Word里的字号、行距、段距、间距、样式

    昨天领导交给我一份文档 xff0c 让我帮忙修改一下 改完后最后一页只有单独的一行 xff0c 打印出来不够美观 因此 xff0c 我缩小了行距 xff0c 把默认的单倍行距改为了固定值28磅 结果是 xff0c 整个文档的确少了一页 xf
  • 笔记本插上耳机后仍在外放Realtek Audio Console不支持此机器

    大年初七 xff0c 开工第一天 下午办公室新来的同事请教的如题问题 他用的华硕笔记本 xff0c 飞行堡垒FX86FE 插上华为耳机 xff0c 耳机始终播放不出来声音 显示已经检测到耳机插入了耳机孔 xff0c 点击弹窗会显示 Real
  • git Filename too long

    全局 git config global core longpaths true 当前仓库 git config core longpaths true 转载于 https www cnblogs com EasonJim p 108038
  • VxWorks入门级开发环境学习

    由于实习需要 xff0c 最近在学习VxWorks xff0c 久闻该操作系统大名 xff0c 一直被其深厚的内力震撼着从未敢去了解 xff0c 直到最近 操作系统Vxworks本身的优点特点等详细信息不多说了 xff0c 这里讲讲几天来我
  • 树莓派 Retropie 4.4中文版使用说明 含roms资源

    漫步云端服务器 http chdong top bbs http www chdong top 相关名词 Retropie Retropie可以将你的树莓派或者PC变成一台复古游戏机 Retropie基于完整的操作系统之上 xff0c 你可
  • selenium 中 css-寻找元素

    等同于 tag名 不改变 elements 61 wd find elements by css selector 39 div 39 elements 61 wd find elements by tag name 39 div 39 i
  • 解决 The following packages have unmet dependencies: 问题

    The following packages have unmet dependencies libvtk5 dev Depends libfreetype6 dev but it is not going to be installed
  • 2.1Ubuntu20.4安装QT5.14.2

    QT简介 xff1a Qt是一个跨平台的C 43 43 图形用户界面库 xff0c 我们平时所说所使用的Qt xff0c 准确的来说是它的GUI编程部分 Qt提供给应用程序开发者建立图形用户界面所需要的功能 xff0c 并且Qt很容易扩展
  • 美国出台最严技术出口管制!14项前沿科技面临封锁

    关注ITValue xff0c 查看企业级市场最新鲜 最具价值的报道 xff01 xff08 本文转载自量子位公众号 xff0c ID xff1a QbitAI xff0c 作者 xff1a 乾明 夏乙 问耕 xff09 美国又打出一套七伤
  • sftp文件上传详解

    JSch是Java Secure Channel的缩写 JSch是一个SSH2的纯Java实现 它允许你连接到一个SSH服务器 xff0c 并且可以使用端口转发 xff0c X11转发 xff0c 文件传输等 xff0c 当然你也可以集成它
  • 数据库设计 ER图

    一 E R图构成要素 E R图也称实体 联系图 Entity Relationship Diagram xff0c 提供了表示实体类型 属性和联系的方法 xff0c 用来描述现实世界的概念模型 它是描述现实世界关系概念模型的有效方法 是表示
  • ssh-keygen -t rsa详解

    ssh keygen q 安静模式 b bits 位数 t dsa ecdsa ed25519 rsa rsa1 加密算法 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 6
  • samba源码编译安装(版本4.13.0)

    目录 前言编译安装samba下载三个包安装依赖共需要安装samba gnutls nettle1 进入解压后的samba目录执行 xff1a 2 进入解压后的gnutls目录执行3 进入解压后的nettle目录执行3 1 卸载已存在nett
  • mybatis+postgresql10插入返回主键ID

    MyBatis如果使用useGeneratedKeys去生成自增列会造成不成功 xff0c 因为官方提供只支持这些数据库 xff1a mybatis generatedkeys xff0c 那么如果要用在oracle和postgresql上
  • Mac 环境下使用 homebrew 安装和彻底卸载 MySQL5.7

    一 安装 MySQL5 7 在终端执行下列命令 xff1a brew install mysql 64 5 7 使用 brew 安装好 MySQL 5 7 版本后 xff0c 此时 MySQL root 用户的密码是空的 我们需要修改一下
  • python 爬取网站首页并获取资源文件

    一 使用requests模块 xff0c 如果没有安装请使用如下命令 xff0c 安装requests模块 pip install requests 二 打开PyCharm xff0c 创建一个新的py文件 1 请求网站 xff0c 获取网