Python爬虫万金油,使用工具goose快速提取网页内容_python goose,面试突击版

250 阅读3分钟

Goose

Goose 是一个文章内容提取器,可以从任意资讯文章类的网页中提取文章主体,并提取标题、标签、摘要、图片、视频等信息,且支持中文网页。它最初是由 Gravity.com 用 Java 编写的。python-goose 是用 Python 重写的版本。

有了这个库,你从网上爬下来的网页可以直接获取正文内容,无需再用 bs4 或正则表达式一个个去处理文本。

项目地址:
(py2)
github.com/grangier/py…
(py3)
github.com/goose3/goos…

安装

网上大多数教程提到的 python-goose 项目目前只支持到 python 2.7。可以通过 pip 安装:

pip install goose-extractor

或者安装官网上的方法从源代码安装:

mkvirtualenv --no-site-packages goose
git clone https://github.com/grangier/python-goose.git
cd python-goose
pip install -r requirements.txt
python setup.py install

我找到一个 python 3 的版本 goose3

pip install goose3

经过我一些简单的测试,未发现两个版本在结果上有太大的差异。

快速上手

这里使用 goose3,而 python-goose 只要把其中的 goose3 改成 goose 即可,接口都是一样的。以一篇文章 如何用Python抓抖音上的小姐姐 为抓取目标来做个演示。

from goose3 import Goose
from goose3.text import StopWordsChinese
# 初始化,设置中文分词
g = Goose({'stopwords_class': StopWordsChinese})
# 文章地址
url = 'https://mp.weixin.qq.com/s/zflbcF5PS06QC5YJXpiviQ'
# 获取文章内容
article = g.extract(url=url)
# 标题
print('标题:', article.title)
# 显示正文
print(article.cleaned_text)

输出:

除了标题 title 和正文 cleaned_text 外,还可以获取一些额外的信息,比如:

  • meta_description:摘要
  • meta_keywords:关键词
  • tags:标签
  • top_image:主要图片
  • infos:包含所有信息的 dict
  • raw_html:原始 HTML 文本

如有有些网站限制了程序抓取,也可以根据需要添加user-agent信息:

g = Goose({'browser_user_agent': 'Version/5.1.2 Safari/534.52.7'})

如果是 goose3,因为使用了 requests 库作为请求模块,因此还可以以相似方式配置headers、proxies 等属性。

在上述示例中使用到的 StopWordsChinese 为中文分词器,可一定程度上提高中文文章的识别准确率,但更耗时。

其他说明

Goose 虽然方便,但并不能保证每个网站都能精确获取,因此适合大规模文章的采集,如热点追踪、舆情分析等。它只能从概率上保证大多数网站可以相对准确地抓取。我经过一些尝试后发现,抓取英文网站优于中文网站,主流网站优于小众网站,文本的提取优于图片的提取。

从项目中的requirements.txt 文件可以看出,goose 中使用到了Pillow、lxml、cssselect、jieba、beautifulsoup、nltk,goose3 还用到了 requests。

如果你是使用基于 python2 的 goose,有可能会遇到编码上的问题(尤其是 windows 上)。

除了 goose 外,还有其他的正文提取库可以尝试,比如python-boilerpipe、python-readability 等。

实例

最后,我们来用 goose3 写小一段代码,自动抓取 爱范儿、雷锋网、DoNews上的新闻文章:

from goose3 import Goose
from goose3.text import StopWordsChinese
from bs4 import BeautifulSoup

g = Goose({'stopwords_class': StopWordsChinese})
urls = [
    'https://www.ifanr.com/',


![img](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/7f424be72c21409ba55d0603ccc2959c~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867131&x-signature=kFczVFwWhZb5q7d5CMSwJV0mxiM%3D)
![img](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/46c53d7c5e05491fa75a6b9454352d43~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867131&x-signature=mg%2BvBTYtTNSXepqco%2BiOZu%2FAvPg%3D)
![img](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/75792b5001d44e3582dbff89f34603f8~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771867131&x-signature=fwjCr50ExS4%2FsgpN9qKZE3XGIjw%3D)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://gitee.com/vip204888)**