python抓取多种类型的页面方法实例


Posted in Python onNovember 20, 2019

与抓取预定义好的页面集合不同,抓取一个网站的所有内链会带来一个 挑战,即你不知道会获得什么。好在有几种基本的方法可以识别页面类型。

通过URL

一个网站中所有的博客文章可能都会包含一个 URL(例如 http://example.com/blog/title-of-post)。

通过网站中存在或者缺失的特定字段

如果一个页面包含日期,但是不包含作者名字,那你可以将其归类 为新闻稿。如果它有标题、主图片、价格,但是没有主要内容,那么它 可能是一个产品页面。

通过页面中出现的特定标签识别页面

即使不抓取某个标签内的数据,你仍然可以利用这个标签。你的爬 虫可以寻找类似于 <div id="related-products"> 这样的元素来识 别产品页面,即便是爬虫对相关产品的内容并不感兴趣。

为了跟踪多个页面类型,你需要在 Python 中有多个类型的页面对象。 这通过两种方式来实现。

如果页面都是相似的(它们基本上都是相同类型的内容),你可能需要 在现有的网页对象中加入一个 pageType 属性:

class Website:
"""所有文章/网页的共同基类"""
def __init__(self, type, name, url, searchUrl, resultListing,
resultUrl, absoluteUrl, titleTag, bodyTag):
self.name = name
self.url = url
self.titleTag = titleTag
self.bodyTag = bodyTag
self.pageType = pageType

如果你在一个类 SQL 的数据库中对这些页面进行排序,这种模式类型 意味着这些页面应该被存放在同一张表中,并且加入一个额外的 pageType 列。

如果你抓取的页面或内容各不相同(它们包含不同类型的字段),就需 要为每个页面类型创建一个新的对象。当然,有些东西是所有网页共有 的——它们都有一个 URL,也可能都有一个名称或者页面标题。这种 情况非常适合用子类:

class Website:
"""所有文章/网页的共同基类"""

def __init__(self, name, url, titleTag):
self.name = name
self.url = url
self.titleTag = titleTag

这不是一个由你的爬虫直接使用的对象,而是将被你的页面类型引用的 对象:

class Product(Website):
"""产品页面要抓取的信息"""
def __init__(self, name, url, titleTag, productNumber, price):    
Website.__init__(self, name, url, TitleTag)
self.productNumberTag = productNumberTag
self.priceTag = priceTag
class Article(Website):
"""文章页面要抓取的信息"""
def __init__(self, name, url, titleTag, bodyTag, dateTag):
Website.__init__(self, name, url, titleTag)
self.bodyTag = bodyTag
self.dateTag = dateTag

这个产品页面扩展了Website基类,并且加入了仅适用于产品的productNumber和price属性,而Article类加入了body和date属性,这两个属性是不适用于产品的。

你可以用这两个类去抓取一个商店网站,该网站除了产品,可能还包含博客文章或新闻稿。

希望以上知识点能够帮助到大家,感谢大家对三水点靠木的支持。

Python 相关文章推荐
在Python中利用Into包整洁地进行数据迁移的教程
Mar 30 Python
使用python绘制常用的图表
Aug 27 Python
Python多线程threading和multiprocessing模块实例解析
Jan 29 Python
django 解决manage.py migrate无效的问题
May 27 Python
Django Form 实时从数据库中获取数据的操作方法
Jul 25 Python
Python集合基本概念与相关操作实例分析
Oct 30 Python
Python3 A*寻路算法实现方式
Dec 24 Python
Python实现井字棋小游戏
Mar 09 Python
Python参数传递对象的引用原理解析
May 22 Python
用python批量移动文件
Jan 14 Python
Python制作春联的示例代码
Jan 22 Python
python模板入门教程之flask Jinja
Apr 11 Python
Python超越函数积分运算以及绘图实现代码
Nov 20 #Python
python自动化实现登录获取图片验证码功能
Nov 20 #Python
python通过链接抓取网站详解
Nov 20 #Python
python爬虫之遍历单个域名
Nov 20 #Python
python matplotlib 画dataframe的时间序列图实例
Nov 20 #Python
python中Lambda表达式详解
Nov 20 #Python
TensorFlow索引与切片的实现方法
Nov 20 #Python
You might like
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
php线性表的入栈与出栈实例分析
2015/06/12 PHP
javaScript call 函数的用法说明
2010/04/09 Javascript
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
Javascript模块化编程(一)AMD规范(规范使用模块)
2013/01/17 Javascript
Jquery 垂直多级手风琴菜单附源码下载
2015/11/17 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
javascript实现复选框全选或反选
2017/02/04 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
JS实现select选中option触发事件操作示例
2018/07/13 Javascript
node.js中 redis 的安装和基本操作示例
2020/02/10 Javascript
Vue实现简易计算器
2020/02/25 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
详解Python中的变量及其命名和打印
2016/03/11 Python
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
python爬虫爬取网页表格数据
2018/03/07 Python
python中csv文件的若干读写方法小结
2018/07/04 Python
对python中的 os.mkdir和os.mkdirs详解
2018/10/16 Python
pygame游戏之旅 添加游戏介绍
2018/11/20 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
详解CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
2016/12/20 HTML / CSS
CSS3实现时间轴特效
2020/11/02 HTML / CSS
html5视频自动横过来自适应页面且点击播放功能的实现
2020/06/03 HTML / CSS
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
介绍一下常见的木马种类
2014/11/15 面试题
争先创优活动总结
2014/08/27 职场文书
教师四风自我剖析材料
2014/09/30 职场文书
自查自纠工作情况报告
2014/10/29 职场文书
年度考核表个人总结
2015/03/06 职场文书
出国留学自荐信模板
2015/03/06 职场文书
2016年五一促销广告语
2016/01/28 职场文书
nginx请求限制配置方法
2021/07/09 Servers
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏
Python 视频画质增强
2022/04/28 Python