智能爬虫框架
爬虫应用的广泛,例如搜索引擎、采集数据、广告过滤、数据分析等。当我们对少数网站内容进行爬取时写多个爬虫还是有可能的,但是对于需要爬取多个网站内容的项目来说是不可能编写多个爬虫的,这个时候我们就需要智能爬虫。 智能爬虫目前有三种:
- 基于网页内容的爬虫 当网页含有大量需要提取的信息时,我们就需要用到基于网页内容的爬虫。该爬虫会将 HTML 视为文本并利用 NLP 技术进行处理。虽然说这种基于网页内容的爬虫可以减少爬虫的数量,但是需要人工参与进行训练 NLP 模型,没有 AI 开发经验或 AI 开发经验很少的程序员很难写出这类爬虫,并且爬虫爬取时间很长效率还很低。
- 基于DOM结构的爬虫 基于DOM结构的爬虫相对来说比较简单,就是将 HTML 解析为 DOM 树,然后根据语法结构进行提取信息,这种方法效率和准确性都比前一种方法高。
- 基于视觉的爬虫 基于视觉的爬虫的开发难度同样很高,它是通过浏览器接口或者浏览器内核对目标页面进行袁燃,然后基于网页的视觉规律提取网页数据。这种爬虫需要利用神经网络中的 CNN 卷积神经网络获取页面特定区域的内容。
目前比较常用的只能爬虫框架是 Readability 和 Newspaper 。下面我们就来看一下这两个框架的讲解。
一、Newspaper
Newspaper 是一个利用 NLP 的智能爬虫框架,可以从页面中提取出很多内容。安装这个爬虫框架需要首先安装依赖:
sudo apt-get install libxml2-dev libxslt-dev
sudo apt-get install libjpeg-dev zlib1g-dev libpng12-dev
在上述安装中如果出现 libpng12-dev 出现错误,就需要安装 libpng-dev 。 接下来就需要安装 NLP 语料库
curl https://raw.githubusercontent.com/codelucas/newspaper/master/download_corpora.py | python3
最后我们安装 Newspaper 爬虫框架:
pip install newspaper3k
下面我们就通过一个例子来看一下 newspaper 框架怎么使用:
from newspaper import Article
url = 'https://www.ithome.com/0/445/071.htm'
article = Article(url, language='zh')
article.download()
article.parse()
print('作者', article.authors)
print('标题', article.title)
print('发布日期', article.publish_date)
print('正文', article.text)
article.nlp()
print('关键词', article.keywords)
print('摘要', article.summary)
上述代码中 language=‘zh’ 告诉 newspaper 我们抓取的是中文网页。 newspaper 会首先下载页面,然后利用 parse 方法解析页面。页面解析后就可以获取到作者、标题、发布日期等内容,如果要提取关键字和摘要,就可以使用 nlp 方法。 我利用多个不同网站的 URL 进行测试发现,部分内容的作者和发布日期会解析不出来,有些内容甚至获取的不正确,但是对于英文内容还是识别率很高的。如果要提高对中文的识别率,可以更换 newspaper 中的使用的分词库(目前 newspaper 使用的分词库是结巴分词),或者改变所使用的内容识别模型。
二、Readability
Readability 是一个爬虫算法,它在 python 中的名称叫 readability-lxml 同样我们也可以通过 pip 命令来安装:
pip install readability-lxml
安装完之后我们只需导入 readability 即可,我们来看一下例子:
import requests
from readability import Document
url = "https://www.ithome.com/0/444/503.htm"
html = requests.get(url).content
doc = Document(html)
print("title:", doc.title())
print("content:", doc.summary(html_partial=True))
这里我们使用 requests 库请求页面,然后将获取到的 html 内容传递给 readability 中的 Document 类,接着我们调用了 title 和 summary 方法来获取标题和正文。这样我们就获取到了标题和正文。 summary 方法中的 html_partial 意思是石否过滤掉返回结果中的 html 和 body 标签。 readability 所返回的正文内容会有很大的可能包含页面 html 元素,这就需要我们进行二次过滤或提取。 readability 获取 title 的方法很简单,就是直接获取页面 title 元素中的内容,但是获取正文的方法就麻烦了,它是给每个节点打分,比如遇到 article 元素就会加上 5 分(源码中就是加上 5 分),因为 article 元素有可能是正文内容或正文内容的一部分。如果遇到 ol 元素就意味着它有可能不是正文内容,因此减掉3分,最后得分最高的那个元素就很有可能是正文或者正文内容。当然 readability 还存在利用正则表达式来进行打分的方式,这种方式的效果和上一种方式的效果几乎一样。简单点说 readability 的原理就是根据经验积累设置出的模型,分数也是根据敬仰不断优化得到的结果,因此这个框架的准确的不是很高,但是可以解放一些人手。
三、总结
我们讲解了常见的三种智能爬虫类型,还通过代码的形式学习了 newspaper 和 readability 的使用方法和原理,我们可以利用这篇文章学到的内容来编写自己的爬虫,同时对爬虫的开发有了更进一步的了解。 爬虫目前处于法律的灰色地带,用好了会给个人/公司带来很大的收益,反之会给个人/公司带来法律风险。因此我们在使用爬虫的时候必须要遵循目标网站 robots.txt 文件中的规定,同时也要控制爬虫对目标网站的爬取速度和频率,防止对目标网站造成压力,甚至破坏数据信息。
- API网关Ocelot 使用Polly 处理部分失败问题
- 使用GoogleAPI加载各种js框架
- Docker容器学习梳理--日常操作总结
- 马化腾:通向互联网未来的七个路标
- jQuery扩展以及gzip压缩测试
- python2.6升级到3.3.0 的操作记录
- 由javascript中"匿名函数调用写法"引出的一些东东
- javascript中定义私有方法(private method)
- python升级后带来的几个小问题
- 分布式监控系统Zabbix-3.0.3-完整安装记录(1)
- centos6.8下安装部署LNMP-(nginx1.8.0+php5.6.10+mysql5.6.12)
- IE7下当position:fixed遇到text-align:center
- 数组-在Shell脚本中的基本使用介绍
- .Net Core下通过Proxy 模式 使用 WCF
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Oracle 数据库利用sql语句判断某个表是否是临时表实例演示,达梦数据库查询出所有临时表
- JavaScript 技术篇-一段js代码展示可以随鼠标移动变换样式的卡通人物,动态女生眼睛跟着鼠转动
- PyQt5 图形界面-用Qt Designer来设计UI界面,并转化为python代码运行
- Python 技术篇-python生成html源码功能实现演示,html代码自动生成技巧。列表生成式的灵活应用。
- Python 技术篇-pyHook键盘鼠标监听事件,监测鼠标键盘按键。超简单,几行代码搞定。
- Python 技术篇-用mutagen库提取MP3歌曲图片
- Python 典藏篇-Microsoft Visual C++ 14.0 is required,官方vc++运行库工具一键式解决!
- Python 技术篇-邮件写入html代码,邮件发送表格,邮件发送超链接,邮件发送网络图片
- 面经手册 · 第11篇《StringBuilder 比 String 快?空嘴白牙的,证据呢!》
- domReady的理解
- Map集合排序
- Chrome 技术篇-一台电脑设置多个独立chrome方法。chrome独立多开技术。
- 023.Ubuntu常见个性化配置
- 快速学习-ElasticJob的FAQ
- 设计模式~状态模式