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实现baidu hi自动登录的代码
Feb 10 Python
python中查找excel某一列的重复数据 剔除之后打印
Feb 10 Python
python中合并两个文本文件并按照姓名首字母排序的例子
Apr 25 Python
Python编程中用close()方法关闭文件的教程
May 24 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
Jul 17 Python
Python面向对象之类的内置attr属性示例
Dec 14 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
Jun 26 Python
远程部署工具Fabric详解(支持Python3)
Jul 04 Python
python将邻接矩阵输出成图的实现
Nov 21 Python
Tensorflow与Keras自适应使用显存方式
Jun 22 Python
基于Python pyecharts实现多种图例代码解析
Aug 10 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
Nov 30 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实现微信支付之现金红包
2018/05/30 PHP
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
判断某个字符在一个字符串中是否存在的js代码
2014/02/28 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
详解使用vue脚手架工具搭建vue-webpack项目
2017/05/10 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
安装多版本Vue-CLI的实现方法
2020/03/24 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
简单谈谈Python中函数的可变参数
2016/09/02 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
解决python 输出是省略号的问题
2018/04/19 Python
python批量修改文件编码格式的方法
2018/05/31 Python
Python实现E-Mail收集插件实例教程
2019/02/06 Python
python scatter散点图用循环分类法加图例
2019/03/19 Python
python使用百度文字识别功能方法详解
2019/07/23 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
利用Python将图片中扭曲矩形的复原
2020/09/07 Python
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
德国大型的家具商店:Pharao24.de
2016/10/02 全球购物
英国儿童图书网站:Scholastic
2017/03/26 全球购物
英国家庭和商业健身器材购物网站:Fitness Options
2018/07/05 全球购物
庆七一活动方案
2014/01/25 职场文书
信息工作经验交流材料
2014/05/28 职场文书
学校学雷锋活动总结
2014/06/26 职场文书
学风建设演讲稿
2014/09/12 职场文书
父母教会我观后感
2015/06/17 职场文书
培训心得体会怎么写
2016/01/25 职场文书
Python Parser的用法
2021/05/12 Python
logback如何自定义日志存储
2021/08/30 Java/Android
mysql insert 存在即不插入语法说明
2022/03/25 MySQL
Mysql开启外网访问
2022/05/15 MySQL