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栈类实例分析
Jun 15 Python
Python selenium如何设置等待时间
Sep 15 Python
python+pyqt实现12306图片验证效果
Oct 25 Python
详解python eval函数的妙用
Nov 16 Python
Python2/3中urllib库的一些常见用法
Dec 19 Python
解决python使用open打开文件中文乱码的问题
Dec 29 Python
PyCharm GUI界面开发和exe文件生成的实现
Mar 04 Python
python和php哪个容易学
Jun 19 Python
windows10在visual studio2019下配置使用openCV4.3.0
Jul 14 Python
详解在Python中使用Torchmoji将文本转换为表情符号
Jul 27 Python
python实现xml转json文件的示例代码
Dec 30 Python
python 合并多个excel中同名的sheet
Jan 22 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
php实现用户在线时间统计详解
2011/10/08 PHP
PHP通过插入mysql数据来实现多机互锁实例
2014/11/05 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
2014/12/04 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
php 开发中加密的几种方法总结
2017/03/22 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
检测是否已安装 .NET Framework 3.5的js脚本
2009/02/14 Javascript
js数组方法扩展实现数组统计函数
2014/04/09 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
JavaScript类型系统之Object详解
2016/01/07 Javascript
从零学习node.js之文件操作(三)
2017/02/21 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
2018/01/16 Javascript
js实现控制文件拖拽并获取拖拽内容功能
2018/02/17 Javascript
Vue中通过Vue.extend动态创建实例的方法
2019/08/13 Javascript
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
[00:50]深扒TI7聊天轮盘语音出处6
2017/05/11 DOTA
python中实现定制类的特殊方法总结
2014/09/28 Python
python使用psutil模块获取系统状态
2016/08/27 Python
python实现二维码扫码自动登录淘宝
2016/12/27 Python
Python3.6简单操作Mysql数据库
2017/09/12 Python
Python实现的特征提取操作示例
2018/12/03 Python
python Shapely使用指南详解
2020/02/18 Python
Pandas读取csv时如何设置列名
2020/06/02 Python
python实现斗地主分牌洗牌
2020/06/22 Python
Python Tornado核心及相关原理详解
2020/06/24 Python
香港彩色隐形眼镜在线商店:Stunninglens(全球免费送货)
2019/05/10 全球购物
自我评价个人范文
2013/12/16 职场文书
新学期决心书
2014/03/11 职场文书
诚实守信演讲稿
2014/09/01 职场文书
简单租房协议书
2014/10/21 职场文书
2014年助理工程师工作总结
2014/11/14 职场文书
工作会议通知
2015/04/15 职场文书
搞笑结婚保证书
2015/05/08 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
对讲机的最大通讯距离是多少
2022/02/18 无线电