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 相关文章推荐
在Mac OS上搭建Python的开发环境
Dec 24 Python
Python制作爬虫抓取美女图
Jan 20 Python
Python实现判断一个字符串是否包含子串的方法总结
Nov 21 Python
DataFrame中的object转换成float的方法
Apr 10 Python
Python实现判断并移除列表指定位置元素的方法
Apr 13 Python
pandas把所有大于0的数设置为1的方法
Jan 26 Python
python pickle存储、读取大数据量列表、字典数据的方法
Jul 07 Python
django自带serializers序列化返回指定字段的方法
Aug 21 Python
Django和Flask框架优缺点对比
Oct 24 Python
Python测试Kafka集群(pykafka)实例
Dec 23 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
May 19 Python
Python新手学习函数默认参数设置
Jun 03 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 From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
2010/03/21 PHP
php curl基本操作详解
2013/07/23 PHP
php设计模式之单例模式使用示例
2014/01/20 PHP
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
基于php实现七牛抓取远程图片
2015/12/01 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
图片按比例缩放函数
2006/06/26 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
2017/03/09 Javascript
layui中layer前端组件实现图片显示功能的方法分析
2017/10/13 Javascript
Angular刷新当前页面的实现方法
2018/11/21 Javascript
Vue项目安装插件并保存
2019/01/28 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
vue 授权获取微信openId操作
2020/11/13 Javascript
Python实现建立SSH连接的方法
2015/06/03 Python
Python KMeans聚类问题分析
2018/02/23 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
2019/04/15 Python
pandas中DataFrame修改index、columns名的方法示例
2019/08/02 Python
Python按照list dict key进行排序过程解析
2020/04/04 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
HTML5逐步分析实现拖放功能的方法
2020/09/30 HTML / CSS
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
部队学习十八大感言
2014/01/11 职场文书
法学个人求职信范文
2014/01/27 职场文书
2014社区三八妇女节活动总结
2014/03/01 职场文书
《飞向蓝天的恐龙》教学反思
2014/04/09 职场文书
办公经费申请报告
2015/05/15 职场文书
Python的这些库,你知道多少?
2021/06/09 Python
docker-compose部署Yapi的方法
2022/04/08 Servers