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装饰器在Django框架下去除冗余代码的教程
Apr 16 Python
Python实现对PPT文件进行截图操作的方法
Apr 28 Python
深入理解Django中内置的用户认证
Oct 06 Python
python使用邻接矩阵构造图代码示例
Nov 10 Python
python3+PyQt5实现自定义窗口部件Counters
Apr 20 Python
基于Python中的yield表达式介绍
Nov 19 Python
python实现扫雷小游戏
Apr 24 Python
浅谈TensorFlow之稀疏张量表示
Jun 30 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 Python
用python对excel进行操作(读,写,修改)
Dec 25 Python
用python批量移动文件
Jan 14 Python
Python竟然能剪辑视频
May 25 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代码
2008/04/09 PHP
php函数array_merge用法一例(合并同类数组)
2013/02/03 PHP
php的ddos攻击解决方法
2015/01/08 PHP
PHP实现通过URL提取根域名
2016/03/31 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
cssQuery()的下载与使用方法
2007/01/12 Javascript
js 三级关联菜单效果实例
2013/08/13 Javascript
jQuery Animation实现CSS3动画示例介绍
2013/08/14 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
js判断是否为ie的方法小结
2014/01/13 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
JS实现图片放大镜效果的方法
2015/02/27 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
2015/11/21 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
详解Node.js中path模块的resolve()和join()方法的区别
2018/10/29 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
2019/06/21 Javascript
微信小程序实现音频文件播放进度的实例代码
2020/03/02 Javascript
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
python使用三角迭代计算圆周率PI的方法
2015/03/20 Python
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
Python网络爬虫实例讲解
2016/04/28 Python
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
2019/07/30 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
使用Django清空数据库并重新生成
2020/04/03 Python
HTML5中微数据概述及在搜索引擎中的使用举例
2013/02/07 HTML / CSS
通信工程专业女生个人求职信
2013/09/21 职场文书
小学作文评语大全
2014/04/21 职场文书
产品推广策划方案
2014/05/10 职场文书
北京天坛导游词
2015/02/12 职场文书
《鸟的天堂》教学反思
2016/02/19 职场文书
Django路由层如何获取正确的url
2021/07/15 Python