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时间整形转标准格式的示例分享
Feb 14 Python
Python3.2中Print函数用法实例详解
May 19 Python
Python学习笔记之解析json的方法分析
Apr 21 Python
Python模块的加载讲解
Jan 15 Python
python使用Plotly绘图工具绘制散点图、线形图
Apr 02 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
Apr 02 Python
python遍历文件目录、批量处理同类文件
Aug 31 Python
python实现代码统计器
Sep 19 Python
python调用函数、类和文件操作简单实例总结
Nov 29 Python
使用jupyter notebook直接打开.md格式的文件
Apr 10 Python
Python中Selenium对Cookie的操作方法
Jul 09 Python
Python 数据结构之十大经典排序算法一文通关
Oct 16 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
使用 php4 加速 web 传输
2006/10/09 PHP
hessian 在PHP中的使用介绍
2010/12/13 PHP
php中数组首字符过滤功能代码
2012/07/31 PHP
thinkphp在模型中自动完成session赋值示例代码
2014/09/09 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
PHP常用函数之格式化时间操作示例
2019/10/21 PHP
解决 firefox 不支持 document.all的方法
2007/03/12 Javascript
jQuery Jcrop插件实现图片选取功能
2011/11/23 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
vue cli3 配置proxy代理无效的解决
2019/10/30 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
2020/04/30 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
天翼开放平台免费短信验证码接口使用实例
2013/12/18 Python
使用python实现strcmp函数功能示例
2014/03/25 Python
Python程序员面试题 你必须提前准备!
2018/01/16 Python
在python下读取并展示raw格式的图片实例
2019/01/24 Python
Python数据类型之Set集合实例详解
2019/05/07 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
python小程序基于Jupyter实现天气查询的方法
2020/03/27 Python
pandas数据分组groupby()和统计函数agg()的使用
2021/03/04 Python
CSS3中文字镂空、透明值、阴影效果设置示例小结
2016/03/07 HTML / CSS
详解CSS3的box-shadow属性制作边框阴影效果的方法
2016/05/10 HTML / CSS
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
英国最大的自有市场,比亚马逊便宜:Flubit
2019/03/19 全球购物
Agoda中文官网:安可达(低价预订全球酒店)
2021/01/18 全球购物
说一下Linux下有关用户和组管理的命令
2016/01/04 面试题
酒店管理自荐信
2013/10/23 职场文书
怎么写好自荐信
2013/10/30 职场文书
喜之郎果冻广告词
2014/03/20 职场文书
小区推广策划方案
2014/06/06 职场文书
公司大门门卫岗位职责
2014/06/11 职场文书
爱牙日活动总结
2014/08/29 职场文书
党的群众路线个人对照检查材料
2014/09/23 职场文书