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中暂存上传图片的方法
Feb 18 Python
wxPython使用系统剪切板的方法
Jun 16 Python
Django在win10下的安装并创建工程
Nov 20 Python
Python实现读取及写入csv文件的方法示例
Jan 12 Python
Python字典及字典基本操作方法详解
Jan 30 Python
在Django中URL正则表达式匹配的方法
Dec 20 Python
Python实现简单的列表冒泡排序和反转列表操作示例
Jul 10 Python
pycharm重命名文件的方法步骤
Jul 29 Python
Python3如何对urllib和urllib2进行重构
Nov 25 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
Feb 03 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
Sep 17 Python
python中mongodb包操作数据库
Apr 19 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正则
2006/07/07 PHP
AJAX for PHP简单表数据查询实例
2007/01/02 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
zShowBox 图片放大展示jquery版 兼容性
2011/09/24 Javascript
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
2013/03/21 Javascript
node.js中的http.response.write方法使用说明
2014/12/14 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
2015/09/24 Javascript
javascript检查某个元素在数组中的索引值
2016/03/30 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
jquery实现tab键进行选择后enter键触发click行为
2017/03/29 jQuery
nodejs入门教程四:URL相关模块用法分析
2017/04/24 NodeJs
Angular项目中$scope.$apply()方法的使用详解
2017/07/26 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
详解如何在Vue里建立长按指令
2018/08/20 Javascript
React 使用Hooks简化受控组件的状态绑定
2019/03/18 Javascript
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
jquery轻量级数字动画插件countUp.js使用详解
2019/10/17 jQuery
vue项目中在可编辑div光标位置插入内容的实现代码
2020/01/07 Javascript
微信小程序wxs实现吸顶效果
2020/01/08 Javascript
Element Badge标记的使用方法
2020/07/27 Javascript
小程序自定义圆形进度条
2020/11/17 Javascript
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
python妹子图简单爬虫实例
2015/07/07 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
Python面向对象进阶学习
2019/05/21 Python
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
linux面试题参考答案(9)
2015/01/07 面试题
异步传递消息系统的作用
2016/05/01 面试题
《美丽的公鸡》教学反思
2014/02/25 职场文书
北体毕业生求职信
2014/02/28 职场文书
新兵入伍心得体会
2014/09/04 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
布达拉宫导游词
2015/02/02 职场文书
班级元旦晚会开幕词
2016/03/04 职场文书
django如何自定义manage.py管理命令
2021/04/27 Python