php curl抓取网页指定内容(一下基于DOM结构的爬虫框架怎么使用?(上))
优采云 发布时间: 2022-03-30 09:04php curl抓取网页指定内容(一下基于DOM结构的爬虫框架怎么使用?(上))
出品 | CSDN(ID:CSDNnews)
爬虫应用很广泛,比如搜索引擎、采集数据、广告过滤、数据分析等。我们爬几个网站内容还是可以写多个爬虫,但是不可能为需要爬取多个 网站 内容的项目编写多个爬虫。这就是我们需要智能爬虫的时候。
目前智能爬虫分为三种:
1. 基于网页内容的爬虫
当一个网页收录大量需要提取的信息时,我们需要使用基于网页内容的爬虫。爬虫将 HTML 视为文本并使用 NLP 技术对其进行处理。
这种基于网页内容的爬虫虽然可以减少爬虫的数量,但需要人工参与NLP模型的训练。没有AI开发经验或者AI开发经验很少的程序员很难写出这样的爬虫,爬虫的时间都花在了爬取上。很长而且效率很低。
2. 基于DOM结构的爬虫
基于DOM结构的爬虫比较简单,就是将HTML解析成DOM树,然后根据语法结构提取信息。这种方法比以前的方法更有效、更准确。
3. 基于视觉的爬虫
基于视觉的爬虫开发难度也很大。它通过浏览器接口或浏览器内核烧录目标页面,然后根据网页的视觉规律提取网页数据。这种爬虫需要利用神经网络中的CNN卷积神经网络来获取页面特定区域的内容。
最常用的爬虫框架是 Readability 和 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
最后我们安装报纸爬虫框架:
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 我们正在爬取中文网页。报纸会先下载页面,然后使用parse方法解析页面。页面解析后,可以得到作者、标题、发布日期等信息。如果要提取关键词和摘要,可以使用 nlp 方法。
我用多个不同的网站网址测试,发现有些内容的作者和发布日期无法解析,甚至有些内容获取错误,但英文内容的识别率还是很高的。如果想提高中文的识别率,可以更换报纸上使用的分词数据库(报纸目前使用的分词数据库是口吃分词),或者改变使用的内容识别模型。
可读性
可读性是一种爬虫算法。它在 python 中的名称是 readability-lxml。我们也可以通过 pip 命令安装它:
shell
pip install readability-lxml
安装完成后,我们只需要导入可读性,我们看一下例子:
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内容传递给可读性的Document类,然后调用title和summary方法获取title和body。这样我们就得到了标题和正文。
summary 方法中的 html_partial 表示是否过滤掉返回结果中的 html 和 body 标签。可读性返回的正文内容很可能收录页面html元素,这需要我们进行二次过滤或提取。
可读性获取标题的方法很简单,就是直接获取页面title元素中的内容,但是获取文本的方法比较麻烦。它对每个节点进行评分。比如遇到文章元素,会加5分(源码是加5分),因为文章元素可能是正文内容,也可能是正文内容的一部分。
如果遇到 ol 元素,说明可能不是body内容,所以减去3分后,得分最高的元素很可能是body或者body内容。
当然,可读性也有使用正则表达式打分的方法,这种方法的效果和前面的方法差不多。简单来说,可读性原则是基于经验积累的模型集,分数也是基于钦佩性不断优化的结果。所以这个框架的准确率不是很高,但是可以解放一些人。
总结与风险防范
我们讲解了三种常见的智能爬虫,也以代码的形式学习了报刊和可读性的使用和原理。我们可以利用在这个文章中学到的东西来编写自己的爬虫,同时也可以理解爬虫。发展有更好的理解。
爬行动物目前处于合法的灰色地带。如果使用得当,它们将为个人/公司带来巨大的利益。否则会给个人/公司带来法律风险。所以我们在使用爬虫的时候,一定要遵守目标网站robots.txt文件中的规定,同时控制目标网站的爬取速度和频率,防止目标网站 @k17@ > 造成压力,甚至破坏数据信息。
作者简介:朱刚,笔名妙书,CSDN博客专家,.NET高级开发工程师,7年一线开发经验,参与电子政务系统和AI客服系统开发,互联网架构设计招聘网站,目前在职,从事企业级安全监控系统的开发。
【结尾】