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字符串排序方法
Aug 29 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
Dec 25 Python
Python的SQLalchemy模块连接与操作MySQL的基础示例
Jul 11 Python
解决Python网页爬虫之中文乱码问题
May 11 Python
python排序函数sort()与sorted()的区别
Sep 18 Python
破解安装Pycharm的方法
Oct 19 Python
教你如何编写、保存与运行Python程序的方法
Jul 12 Python
python实现百度OCR图片识别过程解析
Jan 17 Python
Python中的 ansible 动态Inventory 脚本
Jan 19 Python
使用tensorflow显示pb模型的所有网络结点方式
Jan 23 Python
PyTorch安装与基本使用详解
Aug 31 Python
python 生成器需注意的小问题
Sep 29 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
简单易用的计数器(数据库)
2006/10/09 PHP
图书管理程序(一)
2006/10/09 PHP
Mysql的GROUP_CONCAT()函数使用方法
2008/03/28 PHP
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
2009/04/25 PHP
PHP array_push 数组函数
2009/12/26 PHP
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
PHP 8新特性简介
2020/08/18 PHP
Mootools 1.2教程(21)——类(二)
2009/09/15 Javascript
javascript 面向对象,实现namespace,class,继承,重载
2009/10/29 Javascript
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
关于 文本框默认值 的操作js代码
2012/01/12 Javascript
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
javascript列表框操作函数集合汇总
2013/11/28 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
在JavaScript中处理时间之getHours()方法的使用
2015/06/10 Javascript
Javascript编写2048小游戏
2015/07/07 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
对Python协程之异步同步的区别详解
2019/02/19 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
2020/02/18 Python
python进度条显示-tqmd模块的实现示例
2020/08/23 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
WINDOWS域的具体实现方式是什么
2014/02/20 面试题
自我鉴定书范文
2013/10/02 职场文书
孔子观后感
2015/06/08 职场文书
总经理年会致辞
2015/07/29 职场文书
python 字典和列表嵌套用法详解
2021/06/29 Python
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS