人家网站都免费了,你还用Python去爬?

news2024/11/20 0:49:20

文章目录

    • ⛳️ 实战场景
    • ⛳️ 实战编码

⛳️ 实战场景

这次实战的目标是一个叫做猫肯的字体站点,该站点所有的字体都是免费可商用的,所以为什么还要去下载呢?

答案是练手,借免费站点学习爬虫,🌋

目标站点地址:https://www.maoken.com/all-fonts
目标页截图如下所示:
在这里插入图片描述
使用的模块是 requests + lxml,用最少的代码,学习最纯粹的爬虫。

⛳️ 实战编码

基于捕获到的页面源码,直接提取内容。

import requests
from lxml import etree


def get_html():
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36"
    }
    res = requests.get('https://www.maoken.com/all-fonts', headers=headers)
    ele = etree.HTML(res.text)
    div_list = ele.xpath("//div[@class='basetabcon']")
    for div in div_list:
        tr_list = div.xpath(".//tr")
        for tr in tr_list:
            print(tr.xpath("./td/text()"))


if __name__ == '__main__':
    get_html()

本部分代码中,可以看到优先提取了 class='basetabcon'div,然后遍历其所有节点,提取 tr 元素,并且打印了其子节点 td 中的文本内容,输出如下:

['字体系列', '字体名称', 'PS中名称', '开发者', '发布时间', '最新版本', '分类', '字重数', '简体字数', '繁体字数', '授权方式', '下载']
[]
['字体圈系列', '字体圈伟君黑', '字体圈Design', '2022年10月', 'v1.00 ', '黑体', '1', '★★★★★', '★']
['字体圈欣意吉祥宋', '字体圈Design', '2021年01月', 'v1.00 ', '宋体', '1', '★★★★★', '★']
['字体圈欣意冠黑体', '字体圈Design', '2020年04月', 'v4.000 ', '创意体', '1', '★★★★★', '★★★★★']

此时发现出现了数据问题,第一行和第二行属于冗余数据,需要清理。

def get_html():
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36"
    }
    res = requests.get('https://www.maoken.com/all-fonts', headers=headers)
    ele = etree.HTML(res.text)
    div_list = ele.xpath("//div[@class='basetabcon']")
    for div in div_list:
        tr_list = div.xpath(".//tr")
        # 去除第一行冗余 tr
        for tr in tr_list[1:]:
            # 去除空数据
            if len(tr.xpath("./td/text()")) == 0:
                continue
            print(tr.xpath("./td/text()"))

按照上述内容对数据进行处理之后,得到下述信息:

['字体圈系列', '字体圈伟君黑', '字体圈Design', '2022年10月', 'v1.00 ', '黑体', '1', '★★★★★', '★']
['字体圈欣意吉祥宋', '字体圈Design', '2021年01月', 'v1.00 ', '宋体', '1', '★★★★★', '★']
['字体圈欣意冠黑体', '字体圈Design', '2020年04月', 'v4.000 ', '创意体', '1', '★★★★★', '★★★★★']

下面要处理的是合并单元格问题,在正式编码前优先核对一下界面显示规则。
在这里插入图片描述
其中字体圈系列 显示被合并了,从内容输出看,单元格字体圈系列所在的行多一个单元格,即列表多一个元素,如下所示。

在这里插入图片描述
接下来我们对数据进行再次整理,当单元格数量等于 13 的时候,新增一个字典 KEY,后续的字体都追加到该字典项中。

def get_html():
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ……"
    }
    res = requests.get('https://www.maoken.com/all-fonts', headers=headers)
    ele = etree.HTML(res.text)
    div_list = ele.xpath("//div[@class='basetabcon']")
    for div in div_list:
        tr_list = div.xpath(".//tr")
        # 去除第一行冗余 tr
        result = {}
        for tr in tr_list[1:8]:
            td_content = tr.xpath("./td//text()")
            # 去除空数据
            if len(td_content) < 4:
                continue

            # 合并单元格
            if len(td_content)==13:
                head = td_content[0]
                td_list = td_content[1:]
                result[head] = [] # 建立一个空字典
                result[head].append(td_list[:-2]) # 字典的值增加项

            else:
                result[head].append(td_content)

        print(result)

此时运行代码就可以获取到完整的表格数据了,效果如下所示,与网页对比之后,无数据丢失问题。
在这里插入图片描述
该案例实战中最需要学习的部分是单元格的解析,其中用到了差异对比,在实践中最大的风险是需要保证数据是完整的,即数据量中无缺项,否则无法进行硬编码解析数据。

本次实战通过 div 进行了首次提取,最终输出的数据是基于单元格位置进行拆分的,学习的时候重点掌握该解题方法。

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 737 篇原创博客

从订购之日起,案例 5 年内保证更新

  • ⭐️ Python 爬虫 120,点击订购 ⭐️
  • ⭐️ 爬虫 100 例教程,点击订购 ⭐️

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python爬虫技术系列-05字符验证码识别

Python爬虫技术系列-05字符验证码识别1. 光学文字识别1.1 OCR概述1.2 OCR识别库Tesseract下载安装1.3 生成验证码图片1.4 字符验证码识别1.安装python识别验证码库&#xff1a;2.验证码识别&#xff1a;1.5 使用打码平台识别验证码1.6 滑动验证码识别1. 光学文字识别 1.1 OCR概…

卡尔曼滤波实例——预测橘子的轨迹

目录 流程 一、采用轮廓的方式检测橘子位置 &#xff08;一&#xff09;滚动条获取阈值 &#xff08;二&#xff09;获取到图像中的包围橘子对应的白色图形的最小矩形框的信息 二、获取橘子检测框的质心 三、将质心送入卡尔曼滤波器&#xff0c;获取下一次的质心位置 四…

Markdown语言的简单学习

Markdown简单语法标题#空格 一级标题##空格 二级标题 以此类推三级标题四级...五级.....引用列表代码块表格分隔线链接强调语法&#xff08;斜体、加粗、下划线&#xff09;标题 #空格 一级标题 ##空格 二级标题 以此类推 三级标题 四级… 五级… … 引用 这是一段引用 …

<人生重开模拟器>——《Python项目实战》

目录 1.模拟实现 "人生重开模拟器" 1.1 问题导引&#xff1a; 1.2 问题分析&#xff1a; 2. 模拟实现分析及步骤&#xff1a; 3.完整源码&#xff1a; 4.写在最后的话&#xff1a; 后记&#xff1a;●由于作者水平有限&#xff0c;文章难免存在谬误之处&…

数据结构与算法----栈和队列(Stack Queue)

文章目录栈栈的操作栈的初始化入栈出栈取栈顶的元素判断栈是否为空求栈中数据元素的个数遍历栈中的所有元素清空栈栈的存储结构顺序存储链式存储顺序栈和链栈的区别栈的实战题目队列队列的操作入队出队遍历队列清空队列队列的存储结构顺序存储循环队列链式存储队列实战题目总结…

快速发布windows上的web项目【免费内网穿透】

快速发布windows上的web项目【免费内网穿透】 文章目录快速发布windows上的web项目【免费内网穿透】什么是cpolar内网穿透&#xff1f;概述1. 搭建一个静态Web站点1.1 下载演示站点1.2 本地运行演示站点1.3 本地浏览测试站点是否正常2. 注册并安装cpolar内网穿透3. 本地web站点…

玩转 CSS 的艺术之美

你将获得 深刻理解各种CSS原理 解构不为人知的CSS技巧 概念、技巧、场景三合一&#xff0c;实现“神奇”效果 强化吸收CSS知识体系&#xff0c;玩转各种神操作骚技巧 作者介绍 JowayYoung&#xff0c;资深前端工程师&#xff0c;目前就职于网易互动娱乐事业群&#xff0c…

前端面试之道

小册介绍 如果需要用一句话来介绍这本小册的话&#xff0c;「一年磨一剑」应该是最好的答案了。 为什么这样说呢&#xff1f;在出小册之前&#xff0c;我收集了大量的一线大厂面试题&#xff0c;通过大数据统计出了近百个常考知识点&#xff0c;然后根据这些知识点写成了这本…

《深度学习》:CANN训练营_昇腾AI入门课学习笔记(第二章 TensorFlow模型迁移训练)

文章目录第二章 TensorFlow模型迁移&训练本章学习目标AI模型开发基础知识入门Python水平要求了解深度学习和神经网络了解TensorFlow AI框架了解基于CANN的模型开发流程&#xff08;重点&#xff09;TensorFlow AI模型迁移详解为什么要做模型迁移TensorFlow AI模型自动迁移详…

【Python数据科学快速入门系列 | 10】Matplotlib数据分布图表应用总结

这是机器未来的第59篇文章 原文首发地址&#xff1a;https://robotsfutures.blog.csdn.net/article/details/127484292 《Python数据科学快速入门系列》快速导航&#xff1a; 【Python数据科学快速入门系列 | 01】Numpy初窥——基础概念【Python数据科学快速入门系列 | 02】创…

安卓讲课笔记3.3 相对布局

文章目录零、学习目标一、导入新课二、新课讲解&#xff08;一&#xff09;相对布局概述1、布局特点2、继承关系图3、常用属性&#xff08;1&#xff09;相对于父容器居中&#xff08;2&#xff09;相对于父容器对齐&#xff08;3&#xff09;相对于其它控件位置&#xff08;4&…

牛客网经典Java面试常见题

个人主页&#xff1a;熬夜磕代码丶 作品专栏: 数据结构与算法 我变秃了&#xff0c;也变强了 给大家介绍一款程序员必备刷题平台——牛客网 点击注册一起刷题收获大厂offer吧 文章目录一、二叉搜索树与双向链表二、从尾到头打印链表三、调整数组奇数位于偶数前面四、删除链表…

大数据毕业设计可视化大屏前后端项目分享

1、前言 很久没有分享过可视化大屏的项目了&#xff0c;距离上次分享基于Echarts的数据可视化大屏系统设计分享这篇可视化系统已经过去了整整一年有余。当时分享这篇博客没想到会收获这么多的阅读量&#xff0c;并且在刚发布的时候&#xff0c;还上了CSDN的博客热搜2&#xff…

gcc环境下演示C语言变长数组

前言 &#x1f47b;作者&#xff1a;龟龟不断向前 &#x1f47b;简介&#xff1a;宁愿做一只不停跑的慢乌龟&#xff0c;也不想当一只三分钟热度的兔子。 &#x1f47b;专栏&#xff1a;C初阶知识点 &#x1f47b;工具分享&#xff1a; 刷题&#xff1a; 牛客网 leetcode笔记软…

安全帽佩戴识别算法

安全帽佩戴识别算法采用SuiJi-AI人工智能深度学习技术计算机智能视觉识别算法&#xff0c;且通过规模化的安全帽数据识别训练。安全帽佩戴识别算法借助现场已有的监控摄像头对监控画面中人员着装行为进行实时分析识别。假如检测人员不戴安全帽&#xff0c;SuiJiAi将立即记录和警…

致敬第一个1024(第一次Java代码编程)

昨日&#xff0c;笔者刚刚下载好IDEA&#xff0c;今日&#xff0c;笔者将会实现第一次的Java代码&#xff01;&#xff01;信心满满&#xff01;&#xff01;下面请看笔者的代码吧&#xff01;&#xff01;骄傲的小心&#xff0c;已经澎湃&#xff01; 因此&#xff0c;本篇文…

如何实现一个SQL解析器

作者&#xff1a;vivo 互联网搜索团队- Deng Jie 一、背景 随着技术的不断的发展&#xff0c;在大数据领域出现了越来越多的技术框架。而为了降低大数据的学习成本和难度&#xff0c;越来越多的大数据技术和应用开始支持SQL进行数据查询。SQL作为一个学习成本很低的语言&#…

【正点原子I.MX6U-MINI应用篇】5、嵌入式Linux在LCD上显示BMP、JPG、PNG图片

一、BMP图像介绍与显示 我们常用的图片格式有很多&#xff0c;一般最常用的有三种&#xff1a;JPEG(或 JPG)、PNG、BMP和GIF。其中 JPEG(或JPG)、PNG以及 BMP 都是静态图片&#xff0c;而 GIF 则可以实现动态图片。 BMP(全称 Bitmap)是Window操作系统中的标准图像文件格式&am…

计算机学院第五次ACM周赛题解

目录 HF的智能小车车 Do you like Van game&#xff1f; 好姐姐的三角形 帮帮小陈 卷点 签个到就下班 现在是摸鱼时间 现在是摸鱼时间 PLUS HF的智能小车车 签到题目&#xff0c; #include<iostream>using namespace std;int main() {string arr;cin>>ar…

学生会信息管理系统

1、项目介绍 学生会信息管理系统拥有两种角色&#xff1a;学生和管理员 学生&#xff1a;查看活动和新闻信息、发布活动、登录注册 管理员&#xff1a;公共新闻管理、用户管理、活动审核等 2、项目技术 后端框架&#xff1a; Servlet、mvc模式 前端技术&#xff1a;jsp、c…