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抓取百度查询结果的方法
Jul 08 Python
教你用Python写安卓游戏外挂
Jan 11 Python
python 剪切移动文件的实现代码
Aug 02 Python
django DRF图片路径问题的解决方法
Sep 10 Python
Python3数字求和的实例
Feb 19 Python
详解PyCharm安装MicroPython插件的教程
Jun 24 Python
PyCharm-错误-找不到指定文件python.exe的解决方法
Jul 01 Python
python3.7 使用pymssql往sqlserver插入数据的方法
Jul 08 Python
python2爬取百度贴吧指定关键字和图片代码实例
Aug 14 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
Aug 31 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
Python爬取某拍短视频
Jun 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
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
2011/12/28 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
2018/05/11 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
php实现简单四则运算器
2020/11/29 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
Jquery 表单验证类介绍与实例
2013/06/09 Javascript
jQuery中:file选择器用法实例
2015/01/04 Javascript
理解javascript闭包
2015/12/15 Javascript
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
javaScript事件机制兼容【详细整理】
2016/07/23 Javascript
WEB 前端开发中防治重复提交的实现方法
2016/10/26 Javascript
JavaScript实现弹出广告功能
2017/03/30 Javascript
详解vuejs之v-for列表渲染
2017/06/22 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
layui表格 返回的数据状态异常的解决方法
2019/09/10 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
jQuery 动画与停止动画效果实例详解
2020/05/19 jQuery
原生js滑动轮播封装
2020/07/31 Javascript
Django1.7+python 2.78+pycharm配置mysql数据库教程
2014/11/18 Python
Ruby元编程基础学习笔记整理
2016/07/02 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
2018/10/14 Python
解决Python print输出不换行没空格的问题
2018/11/14 Python
python读取各种文件数据方法解析
2018/12/29 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
2020/05/28 Python
墨西哥皇宫度假村预订:Palace Resorts
2018/06/16 全球购物
Stutterheim瑞典:瑞典高级外套时装品牌
2019/06/24 全球购物
美国渔具店:FishUSA
2019/08/07 全球购物
一份Java笔试题
2012/02/21 面试题
文明倡议书范文
2014/04/15 职场文书
教师竞聘上岗演讲稿
2014/09/03 职场文书
2015最新民情日记范文
2015/06/26 职场文书
开业典礼致辞
2015/07/29 职场文书