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修改Excel数据的实例代码
Nov 01 Python
Python中暂存上传图片的方法
Feb 18 Python
Python异常对代码运行性能的影响实例解析
Feb 08 Python
Pycharm设置界面全黑的方法
May 23 Python
使用Python批量修改文件名的代码实例
Jan 24 Python
python 定时器,实现每天凌晨3点执行的方法
Feb 20 Python
解决Python3 抓取微信账单信息问题
Jul 19 Python
python求加权平均值的实例(附纯python写法)
Aug 22 Python
Django 实现xadmin后台菜单改为中文
Nov 15 Python
使用python turtle画高达
Jan 19 Python
利用Python自动化操作AutoCAD的实现
Apr 01 Python
Python基于内置函数type创建新类型
Oct 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
基于mysql的bbs设计(三)
2006/10/09 PHP
php 网页游戏开发入门教程一(webgame+design)
2009/10/26 PHP
Yii配置文件用法详解
2014/12/04 PHP
Yii分页用法实例详解
2014/12/04 PHP
PHP实现微信申请退款功能
2018/10/01 PHP
Javascript 验证上传图片大小[客户端]
2009/08/01 Javascript
文本框中,回车键触发事件的js代码[多浏览器兼容]
2010/06/07 Javascript
关于IE BUG与字符串截取substr的解决办法
2013/04/10 Javascript
javascript检测是否联网的实现代码
2014/09/28 Javascript
TypeScript具有的几个不同特质
2015/04/07 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
Puppet的一些技巧
2018/09/17 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
2019/07/07 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
2020/07/31 Javascript
JavaScript获取时区实现过程解析
2020/09/24 Javascript
python str与repr的区别
2013/03/23 Python
Python闭包的两个注意事项(推荐)
2017/03/20 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
2017/07/06 Python
TF-IDF算法解析与Python实现方法详解
2017/11/16 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
Python函数参数类型及排序原理总结
2019/12/19 Python
Pytorch实现各种2d卷积示例
2019/12/30 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
HTML5 Canvas实现360度全景图的示例代码
2018/01/29 HTML / CSS
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
商务英语应届生自我鉴定
2013/12/08 职场文书
高校教师思想汇报
2014/01/11 职场文书
小学生家长评语大全
2014/02/10 职场文书
诚信考试标语
2014/06/24 职场文书
中学生教师节演讲稿
2014/09/03 职场文书
中学生检讨书范文
2014/11/03 职场文书
教师远程研修感悟
2015/11/18 职场文书