Python 爬虫“学前班”!学会免踩坑!

2019 年 9 月 16 日 CSDN
作者 | 喵叔
责编 | 胡巍巍
出品 | CSDN(ID:CSDNnews)

爬虫应用的广泛,例如搜索引擎、采集数据、广告过滤、数据分析等。当我们对少数网站内容进行爬取时写多个爬虫还是有可能的,但是对于需要爬取多个网站内容的项目来说是不可能编写多个爬虫的,这个时候我们就需要智能爬虫。

智能爬虫目前有三种:

1. 基于网页内容的爬虫

当网页含有大量需要提取的信息时,我们就需要用到基于网页内容的爬虫。该爬虫会将 HTML 视为文本并利用 NLP 技术进行处理。

虽然说这种基于网页内容的爬虫可以减少爬虫的数量,但是需要人工参与进行训练 NLP 模型,没有 AI 开发经验或 AI 开发经验很少的程序员很难写出这类爬虫,并且爬虫爬取时间很长效率还很低。

2. 基于DOM结构的爬虫

基于DOM结构的爬虫相对来说比较简单,就是将 HTML 解析为 DOM 树,然后根据语法结构进行提取信息,这种方法效率和准确性都比前一种方法高。

3. 基于视觉的爬虫

基于视觉的爬虫的开发难度同样很高,它是通过浏览器接口或者浏览器内核对目标页面进行袁燃,然后基于网页的视觉规律提取网页数据。这种爬虫需要利用神经网络中的 CNN 卷积神经网络获取页面特定区域的内容。

目前比较常用的只能爬虫框架是 Readability 和 Newspaper 。下面我们就来看一下这两个框架的讲解。


Newspaper


Newspaper 是一个利用 NLP 的智能爬虫框架,可以从页面中提取出很多内容。安装这个爬虫框架需要首先安装依赖:

shell

sudo apt-get install libxml2-dev libxslt-dev

sudo apt-get install libjpeg-dev zlib1g-dev libpng12-dev

在上述安装中如果出现 libpng12-dev 出现错误,就需要安装 libpng-dev 。

接下来就需要安装 NLP 语料库:

shell

curl https://raw.githubusercontent.com/codelucas/newspaper/master/download_corpora.py | python3

最后我们安装 Newspaper 爬虫框架:

shell

pip install newspaper3k

下面我们就通过一个例子来看一下 newspaper 框架怎么使用:

python

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 命令来安装:

shell

pip install readability-lxml

安装完之后我们只需导入 readability 即可,我们来看一下例子:

python

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 文件中的规定,同时也要控制爬虫对目标网站的爬取速度和频率,防止对目标网站造成压力,甚至破坏数据信息。

作者简介:朱钢,笔名喵叔,CSDN博客专家,.NET高级开发工程师,7年一线开发经验,参与过电子政务系统和AI客服系统的开发,以及互联网招聘网站的架构设计,目前就职于北京恒创融慧科技发展有限公司,从事企业级安全监控系统的开发。

【END】

 热 文 推 荐 

☞拍照比剪刀手泄露指纹信息;国内绿 iPhone11 抢断货;PostgreSQL 12 Beta 4 发布 | 极客头条

☞公开课|百度天工物联网基础平台的微服务容器化落地实践

☞惊呆!这辆悍马自己在跑跑跑跑跑跑跑!

☞互联网大佬为什么爱唱歌

☞我们到底该如何看待6G?

☞大数据工程师手册:全面系统的掌握必备知识与工具

☞实操 | 从0到1教你用Python来爬取整站天气网

☞dfuse、慢雾科技、MYKEY共同出席,与你探讨区块链数据架构和项目上链那些事!

☞痛!首批共享单车死于2019

点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

你点的每个“在看”,我都认真当成了喜欢

登录查看更多
0

相关内容

一个旨在提升互联网阅读体验的工具。 readability.com/
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
194+阅读 · 2020年6月29日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
225+阅读 · 2020年3月22日
算法与数据结构Python,369页pdf
专知会员服务
162+阅读 · 2020年3月4日
《动手学深度学习》(Dive into Deep Learning)PyTorch实现
专知会员服务
119+阅读 · 2019年12月31日
Keras作者François Chollet推荐的开源图像搜索引擎项目Sis
专知会员服务
29+阅读 · 2019年10月17日
机器学习入门的经验与建议
专知会员服务
92+阅读 · 2019年10月10日
一文看懂怎么用 Python 做数据分析
大数据技术
24+阅读 · 2019年5月5日
Python NLP入门教程
七月在线实验室
7+阅读 · 2018年6月5日
我是一个爬虫
码农翻身
12+阅读 · 2018年6月4日
刚开始学编程?这几款小工具能让你事半功倍
干货 | Python 爬虫的工具列表大全
机器学习算法与Python学习
10+阅读 · 2018年4月13日
Python 爬虫实践:《战狼2》豆瓣影评分析
数据库开发
5+阅读 · 2018年3月19日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
Python NLP 入门教程
大数据技术
19+阅读 · 2017年10月24日
Python3爬虫之入门和正则表达式
全球人工智能
7+阅读 · 2017年10月9日
TResNet: High Performance GPU-Dedicated Architecture
Arxiv
8+阅读 · 2020年3月30日
Arxiv
35+阅读 · 2019年11月7日
Arxiv
3+阅读 · 2019年10月31日
Meta-Learning to Cluster
Arxiv
17+阅读 · 2019年10月30日
Arxiv
136+阅读 · 2018年10月8日
A Survey on Deep Transfer Learning
Arxiv
11+阅读 · 2018年8月6日
Arxiv
8+阅读 · 2018年4月8日
Arxiv
6+阅读 · 2018年1月14日
VIP会员
相关VIP内容
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
194+阅读 · 2020年6月29日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
225+阅读 · 2020年3月22日
算法与数据结构Python,369页pdf
专知会员服务
162+阅读 · 2020年3月4日
《动手学深度学习》(Dive into Deep Learning)PyTorch实现
专知会员服务
119+阅读 · 2019年12月31日
Keras作者François Chollet推荐的开源图像搜索引擎项目Sis
专知会员服务
29+阅读 · 2019年10月17日
机器学习入门的经验与建议
专知会员服务
92+阅读 · 2019年10月10日
相关资讯
一文看懂怎么用 Python 做数据分析
大数据技术
24+阅读 · 2019年5月5日
Python NLP入门教程
七月在线实验室
7+阅读 · 2018年6月5日
我是一个爬虫
码农翻身
12+阅读 · 2018年6月4日
刚开始学编程?这几款小工具能让你事半功倍
干货 | Python 爬虫的工具列表大全
机器学习算法与Python学习
10+阅读 · 2018年4月13日
Python 爬虫实践:《战狼2》豆瓣影评分析
数据库开发
5+阅读 · 2018年3月19日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
Python NLP 入门教程
大数据技术
19+阅读 · 2017年10月24日
Python3爬虫之入门和正则表达式
全球人工智能
7+阅读 · 2017年10月9日
相关论文
TResNet: High Performance GPU-Dedicated Architecture
Arxiv
8+阅读 · 2020年3月30日
Arxiv
35+阅读 · 2019年11月7日
Arxiv
3+阅读 · 2019年10月31日
Meta-Learning to Cluster
Arxiv
17+阅读 · 2019年10月30日
Arxiv
136+阅读 · 2018年10月8日
A Survey on Deep Transfer Learning
Arxiv
11+阅读 · 2018年8月6日
Arxiv
8+阅读 · 2018年4月8日
Arxiv
6+阅读 · 2018年1月14日
Top
微信扫码咨询专知VIP会员