GOOSE 现已弃用

经过多年的服务,GOOSE接口和支持它的MySQL数据现已弃用 。 在我们进行替换的同时,我们建议寻找一般查询功能的用户在http://rdf.geneontology.org上使用我们的公共RDF端点。 为了帮助理解图形存储的内容,我们提供了一些示例查询和初始文档 。 
GOOSE仍可供使用,但数据可能已过时。 请使用查询“SELECT max(assocdate)FROM association;” 获取最新的注释日期。 “lite”数据库应该提供更新的结果。

爬虫抓取数据有两个头疼的点,写过爬虫的小伙伴们一定都深有体会:

网站的 防抓取 机制。你要尽可能将自己伪装成“一个人”,骗过对方的服务器反爬验证。

网站的 内容提取 。每个网站都需要你做不同的处理,而且网站一旦改版,你的代码也得跟着更新。

第一点没什么捷径可走,套路见得多了,也就有经验了。关于第二点,今天咱们就来介绍一个小工具,在某些需求场景下,或许可以给你省不少事。

Goose

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

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

项目地址:

(py2) https:// github.com/grangier/pyt hon-goose

(py3) https:// github.com/goose3/goose 3

安装

网上大多数教程提到的 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 = 'http://zhuanlan.zhihu.com/p/46396868'

# 获取文章内容

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 为中文分词器,可一定程度上提高中文文章的识别准确率,但更耗时。

进群:548377875   即可获取数十套PDF以及大量的学习教程!

其他说明

1.

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

2.

从项目中的 requirements.txt 文件可以看出,goose 中使用到了 Pillow、lxml、cssselect、jieba、beautifulsoup、nltk ,goose3 还用到了 requests ,我们之前很多文章和项目中都有所涉及:

这个男人让你的爬虫开发效率提升8倍 【编程课堂】jieba-中文分词利器

3.

如果你是使用基于 python2 的 goose,有可能会遇到 编码 上的问题(尤其是 windows 上)。这方面可以在公众号对话里回复关键词 编码 ,我们有过相关的讲解。

4.

除了 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/',

'https://www.leiphone.com/',

'http://www.donews.com/'

]

url_articles = []

for url in urls:

page = g.extract(url=url)

soup = BeautifulSoup(page.raw_html, 'lxml')

links = soup.find_all('a')

for l in links:

link = l.get('href')

if link and link.startswith('http') and any(c.isdigit() for c in link if c) and link not in url_articles:

url_articles.append(link)

print(link)

for url in url_articles:

try:

article = g.extract(url=url)

content = article.cleaned_text

if len(content) > 200:

title = article.title

print(title)

with open('homework/goose/' + title + '.txt', 'w') as f:

f.write(content)

except:

pass

这段程序所做的事情就是:

抓取网站首页

从页面上提取地址中带有数字的链接(因为文章页基本带数字,这里为了演示简单以此判断)

抓取这些链接,提取正文。如果结果超过 200 个字,就保存成文件

效果:

 
 

在此基础上,你可以继续改进这个程序,让它不停地去寻找新的地址并抓取文章,并对获取到的文章进行词频统计、生成词云等后续操作。类似我们之前的分析案例 数据分析:当赵雷唱民谣时他唱些什么? 。进一步完善,相信你能做出更有意思的项目。

爬虫万金油,一鹅在手,抓遍全球:goose 简介!的更多相关文章

  1. iOS—网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据

    网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...

  2. iOS开发——网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据

    网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...

  3. python爬虫之分析Ajax请求抓取抓取今日头条街拍美图(七)

    python爬虫之分析Ajax请求抓取抓取今日头条街拍美图 一.分析网站 1.进入浏览器,搜索今日头条,在搜索栏搜索街拍,然后选择图集这一栏. 2.按F12打开开发者工具,刷新网页,这时网页回弹到综合 ...

  4. 爬虫学习一系列:urllib2抓取网页内容

    爬虫学习一系列:urllib2抓取网页内容 所谓网页抓取,就是把URL地址中指定的网络资源从网络中读取出来,保存到本地.我们平时在浏览器中通过网址浏览网页,只不过我们看到的是解析过的页面效果,而通过程 ...

  5. 9.scrapy pycharm调试小技巧,请求一次,下次直接调试,不必每次都启动整个爬虫,重新请求一整遍

    pycharm调试技巧:调试时,请求一次,下次直接调试,不必每次都启动整个爬虫,重新请求一整遍 [用法]cmd命令运行:scrapy shell 网址 第一步,cmd进行一次请求: scrapy sh ...

  6. python爬虫构建代理ip池抓取数据库的示例代码

    爬虫的小伙伴,肯定经常遇到ip被封的情况,而现在网络上的代理ip免费的已经很难找了,那么现在就用python的requests库从爬取代理ip,创建一个ip代理池,以备使用. 本代码包括ip的爬取,检 ...

  7. Python 爬虫——抖音App视频抓包

    APP抓包 前面我们了解了一些关于 Python 爬虫的知识,不过都是基于 PC 端浏览器网页中的内容进行爬取.现在手机 App 用的越来越多,而且很多也没有网页端,比如抖音就没有网页版,那么上面的视 ...

  8. scrapy爬虫成长日记之将抓取内容写入mysql数据库

    前面小试了一下scrapy抓取博客园的博客(您可在此查看scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据),但是前面抓取的数据时保存为json格式的文本文件中的.这很显然不满足我 ...

  9. [Python]网络爬虫(一):抓取网页的含义和URL基本构成

    一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个 ...

随机推荐

  1. MySQL之——崩溃-修复损坏的innodb:innodb_force_recovery

    转: https://blog.csdn.net/l1028386804/article/details/77199194 一.问题描述 今天在线运行的一个mysql崩溃了. 查看错误日志,如下: - ...

  2. 香港低价linux虚拟主机,

    https://www.sugarhosts.com/zh-cn/hosting/shared-web-hosting Shared Baby 36 个月 ¥ 26.99 19 99 · / 月 续费 ...

  3. 用PowerDesigner建立概念模型的问题:不能创建相同字段名的关键字段

    依次点击Tools--->Model Options->Model Settings,在Model Settings中有Data Item组框,取消里面的Unique Code,勾选All ...

  4. Lua搜索特殊字符

    local newtext = "." local index1 = string.find(newtext,"%.") 在这里,"."是通 ...

  5. (转)以太坊(Ethereum)创世揭秘 以太坊(Ethereum)创世揭秘

    什么是以太坊(Ethereum) 以太坊(Ethereum)是一个基于区块链技术,允许任何人构建和使用去中心化应用的区块链平台.像比特币一样,以太坊是开源的,并由来自全世界的支持者们共同维护.与比特币 ...

  6. 【Java】-NO.16.EBook.4.Java.1.010-【疯狂Java讲义第3版 李刚】- 异常

    1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.010-[疯狂Java讲义第3版 李刚]- 异常 Style:EBook Series:Java Si ...

  7. [LeetCode] 329. Longest Increasing Path in a Matrix_Hard tag: Dynamic Programming, DFS, Memoization

    Given an integer matrix, find the length of the longest increasing path. From each cell, you can eit ...

  8. android SDK打包app

    SDK  软件开发工具包(Software Development Kit) JDK  开发工具包(Java Developer's Kit) 1.搜索java jdk 进入官网 http://www ...

  9. TextBox显示提示信息

    属性placeholder可以设置TextBox 提示信息如: <asp:TextBox ID ="txt1" runat ="server"  Tool ...

  10. iOS 开发笔记 - 开发中如何实现自动检测更新APP

    1.获取当前项目APP版本号 2.拿到AppStore项目版本号 3.对比版本号,实现更新功能 直接上代码: #import "ViewController.h" //1一定要先配 ...