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实现socket客户端和服务端简单示例
Feb 24 Python
浅谈python多线程和队列管理shell程序
Aug 04 Python
Python图像处理之识别图像中的文字(实例讲解)
May 10 Python
Python图像处理之gif动态图的解析与合成操作详解
Dec 30 Python
详解Python3注释知识点
Feb 19 Python
详解Python3 对象组合zip()和回退方式*zip
May 15 Python
opencv实现简单人脸识别
Feb 19 Python
django xadmin 管理器常用显示设置方式
Mar 11 Python
pytorch实现查看当前学习率
Jun 24 Python
python 实现压缩和解压缩的示例
Sep 22 Python
python实现图像随机裁剪的示例代码
Dec 10 Python
pygame面向对象的飞行小鸟实现(Flappy bird)
Apr 01 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不使用插件导出excel的简单方法
2014/03/04 PHP
简单的php新闻发布系统教程
2014/05/09 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
Yii2框架可逆加密简单实现方法
2017/08/25 PHP
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
javascript中利用数组实现的循环队列代码
2010/01/24 Javascript
NodeJS学习笔记之MongoDB模块
2015/01/13 NodeJs
JavaScript之数组(Array)详解
2015/04/01 Javascript
js实现当复选框选择匿名登录时隐藏登录框效果
2015/08/14 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
基于JavaScript实现屏幕滚动效果
2017/01/18 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
Angular中的$watch方法详解
2017/09/18 Javascript
React-intl 实现多语言的示例代码
2017/11/03 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
2019/09/21 Javascript
[01:37]DOTA2超级联赛专访ChuaN 传奇般的电竞之路
2013/06/19 DOTA
[07:40]DOTA2每周TOP10 精彩击杀集锦vol.4
2014/06/25 DOTA
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
Django之路由层的实现
2019/09/09 Python
django中media媒体路径设置的步骤
2019/11/15 Python
python编写俄罗斯方块
2020/03/13 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
python获取本周、上周、本月、上月及本季的时间代码实例
2020/09/08 Python
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
销售人员个人求职信
2013/09/26 职场文书
面料业务员岗位职责
2013/12/26 职场文书
大学生学习面向未来的赶考思想汇报
2014/09/12 职场文书
2014年度考核工作总结
2014/12/24 职场文书
团员自我评价范文
2015/03/10 职场文书
2015年艾滋病防治工作总结
2015/05/22 职场文书
教你使用Python pypinyin库实现汉字转拼音
2021/05/27 Python
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python