php curl抓取网页指定内容(一下基于DOM结构的爬虫框架怎么使用?(上))

优采云 发布时间: 2022-03-30 09:04

  php 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客服系统开发,互联网架构设计招聘网站,目前在职,从事企业级安全监控系统的开发。

  【结尾】

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线