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的批量远程管理和部署工具Fabric用法实例
Jan 23 Python
Linux下使用python调用top命令获得CPU利用率
Mar 10 Python
CentOS安装pillow报错的解决方法
Jan 27 Python
Python基于tkinter模块实现的改名小工具示例
Jul 27 Python
pycharm下查看python的变量类型和变量内容的方法
Jun 26 Python
Python中GIL的使用详解
Oct 03 Python
在python中使用requests 模拟浏览器发送请求数据的方法
Dec 26 Python
Python中常用的8种字符串操作方法
May 06 Python
Windows 下python3.8环境安装教程图文详解
Mar 11 Python
使用python实现时间序列白噪声检验方式
Jun 03 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
Jan 27 Python
Python Django项目和应用的创建详解
Nov 27 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入门小知识
2008/03/24 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
2010/05/10 PHP
CI框架中通过hook的方式实现简单的权限控制
2015/01/07 PHP
php的ddos攻击解决方法
2015/01/08 PHP
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
2013/01/09 Javascript
js导入导出excel(实例代码)
2013/11/25 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
JavaScript实现非常简单实用的下拉菜单效果
2015/08/27 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
JS组件Bootstrap实现图片轮播效果
2016/05/16 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
Jquery Easyui表单组件Form使用详解(30)
2016/12/19 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
js getBoundingClientRect使用方法详解
2019/07/17 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
vue获取form表单的值示例
2019/10/29 Javascript
Python编程实现生成特定范围内不重复多个随机数的2种方法
2017/04/14 Python
python实现音乐下载器
2018/04/15 Python
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
python3-flask-3将信息写入日志的实操方法
2019/11/12 Python
Python从文件中读取数据的方法步骤
2020/11/18 Python
用html5的canvas和JavaScript创建一个绘图程序的简单实例
2016/07/06 HTML / CSS
canvas之自定义头像功能实现代码示例
2017/09/29 HTML / CSS
HTML5中外部浏览器唤起微信分享功能的代码
2020/09/15 HTML / CSS
哥伦比亚加拿大官网:Columbia Sportswear Canada
2020/09/07 全球购物
Java的基础面试题附答案
2016/01/10 面试题
销售副总经理岗位职责
2013/12/11 职场文书
2014年高中教师工作总结
2014/12/19 职场文书
赤壁观后感(2)
2015/06/15 职场文书
导游词之塘栖古镇
2019/12/04 职场文书