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 相关文章推荐
pycharm 使用心得(六)进行简单的数据库管理
Jun 06 Python
python通过cookie模拟已登录状态的初步研究
Nov 09 Python
Python 专题一 函数的基础知识
Mar 16 Python
Python实现发送QQ邮件的封装
Jul 14 Python
开源软件包和环境管理系统Anaconda的安装使用
Sep 04 Python
Python中进程和线程的区别详解
Oct 29 Python
Python连接Mssql基础教程之Python库pymssql
Sep 16 Python
Python解析Excle文件中的数据方法
Oct 23 Python
Django实现学员管理系统
Feb 26 Python
Django实现auth模块下的登录注册与注销功能
Oct 10 Python
Python计算信息熵实例
Jun 18 Python
Python闭包的定义和使用方法
Apr 11 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
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
对盗链说再见...
2006/10/09 PHP
php中根据变量的类型 选择echo或dump
2012/07/05 PHP
php生成图片缩略图功能示例
2017/02/22 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
PHP中rename()函数的妙用讲解
2019/02/28 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
2019/10/22 PHP
JS+ACTIVEX实现网页选择本地目录路径对话框
2013/03/18 Javascript
变量声明时命名与变量作为对象属性时命名的区别解析
2013/12/06 Javascript
jQuery实现鼠标经过图片预览大图效果
2014/04/10 Javascript
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
2014/09/26 NodeJs
Jquery遍历Json数据的方法
2015/04/20 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
Windows下使用Nodejs运行js的方法
2017/09/02 NodeJs
layui 给数据表格加序号的方法
2018/08/20 Javascript
浅谈JSON5解决了JSON的两大痛点
2020/12/14 Javascript
python比较两个列表大小的方法
2015/07/11 Python
python实现用户管理系统
2018/01/10 Python
python中matplotlib的颜色及线条控制的示例
2018/03/16 Python
Python实现使用卷积提取图片轮廓功能示例
2018/05/12 Python
Python列表推导式实现代码实例
2020/09/09 Python
详解Python 中的 defaultdict 数据类型
2021/02/22 Python
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
极度干燥澳大利亚官方网站:Superdry澳大利亚
2019/03/28 全球购物
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
工厂仓管员岗位职责
2014/01/01 职场文书
小学生国旗下演讲稿
2014/04/25 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
教师暑期培训感言
2014/08/15 职场文书
2014年残联工作总结
2014/11/21 职场文书
大学生简历自我评价2015
2015/03/03 职场文书
pytorch实现ResNet结构的实例代码
2021/05/17 Python
Spark SQL 2.4.8 操作 Dataframe的两种方式
2021/10/16 SQL Server
Mysql表数据比较大情况下修改添加字段的方法实例
2022/06/28 MySQL