人家网站都免费了,你还用Python去爬?
创始人
2024-01-16 12:03:23
0

文章目录

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

⛳️ 实战场景

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

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

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

⛳️ 实战编码

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

import requests
from lxml import etreedef 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")# 去除第一行冗余 trfor tr in tr_list[1:]:# 去除空数据if len(tr.xpath("./td/text()")) == 0:continueprint(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")# 去除第一行冗余 trresult = {}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 例教程,点击订购 ⭐️

相关内容

热门资讯

春节作文400字 春节作文400字4篇  在现实生活或工作学习中,大家对作文都再熟悉不过了吧,作文是通过文字来表达一个...
寒假游记海南行作文 寒假游记海南行作文  无论是身处学校还是步入社会,大家都经常接触到作文吧,作文是人们以书面形式表情达...
湖南卫视小年夜春晚播出时间及... 湖南卫视2015小年夜春晚播出时间及节目单  主持人:何炅、汪涵、谢娜、梁田  播出时间:2015年...
生活告诉我作文 生活告诉我作文3篇  在平平淡淡的日常中,大家对作文都不陌生吧,借助作文可以宣泄心中的情感,调节自己...
人生路上坎坷多作文 人生路上坎坷多作文(精选28篇)  无论在学习、工作或是生活中,大家都接触过作文吧,借助作文可以宣泄...
梦的翅膀作文 梦的翅膀作文梦的翅膀成功就是让人梦想成真的终点,在通往成功的路上,我们品尝着生活的酸甜苦辣。每当我听...
描写动物的作文 描写动物的作文范文4篇  小兔子太可爱了!小朋友,你们有没有养过这样的小兔子?没有就赶快去养一只吧!...
中秋节赏月的作文400字 中秋节赏月的作文400字汇总7篇  在平平淡淡的学习、工作、生活中,大家都有写作文的经历,对作文很是...
猴年短信祝福语 猴年短信祝福语精选  1、新年佳节到,向你问个好,身体倍健康,心情特别好;好运天天交,口味顿顿妙。最...
各民族的风俗习惯 各民族的风俗习惯各民族的风俗习惯1.藏族藏族主要分布在西-藏,其余在青海、甘肃、四川、云南等地。藏族...
快乐的春节作文300字 【必备】快乐的春节作文300字6篇  在日常学习、工作和生活中,大家都跟作文打过交道吧,通过作文可以...
元宵节花灯字谜 2017年元宵节花灯字谜大全  以下是小编给大家整理的元宵节花灯字谜的内容,欢迎大家查看。  百无一...
行善作文 行善作文600字(通用14篇)  在平平淡淡的日常中,大家都不可避免地要接触到作文吧,借助作文可以宣...
教师节英文祝福语 教师节英文祝福语大全  在日常的学习、工作、生活中,大家都有写祝福语的经历,对祝福语很是熟悉吧,祝福...
过春节的作文900字 关于过春节的作文900字4篇  无论在学习、工作或是生活中,大家对作文都再熟悉不过了吧,通过作文可以...
家乡的春节作文 家乡的春节作文(通用40篇)  在我们平凡的日常里,大家都经常看到作文的身影吧,写作文是培养人们的观...
有意义的暑假生活作文400字 有意义的暑假生活作文400字 虽然美好的暑假生活过去了,那些零零星星的生活碎片我还记忆犹新,特别是那...
春节发生的事的作文 春节发生的事的作文  无论是身处学校还是步入社会,大家都有写作文的经历,对作文很是熟悉吧,作文可分为...
我的爸爸的作文 关于我的爸爸的作文(精选14篇)  在学习、工作乃至生活中,许多人都写过作文吧,借助作文可以宣泄心中...
我的生活作文 【精品】我的生活作文五篇  在我们平凡的日常里,大家对作文都不陌生吧,借助作文可以宣泄心中的情感,调...