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. 【Python爬虫】BeautifulSoup网页解析库

    BeautifulSoup 网页解析库 阅读目录 初识Beautiful Soup Beautiful Soup库的4种解析器 Beautiful Soup类的基本元素 基本使用 标签选择器 节点操作 ...

  2. c# string 扩展方法

    场景:只显示一字符串的前50个字符,多余的用“...”省略号替代 如果不用扩展方法当然也可以实现,写一个静态方法,如下: public class StringUtil { /// <summa ...

  3. LeetCode-860. Lemonade Change

    At a lemonade stand, each lemonade costs $5. Customers are standing in a queue to buy from you, and ...

  4. InnoDB体系架构

    MySQL支持插件式存储引擎,常用的存储引擎则是MyISAM和InnoDB,通常在OLTP(Online Transaction Processing 在线事务处理)中,我们选择使用InnoDB,所以 ...

  5. 【C++问题整理】

    一.static   1.作用:    静态变量/函数:在整个文件内可见,不会被其他文件所用:静态变量:会被自动初始化为0: 类中的静态变量:类的成员,类对象公用 类中的静态函数:只能访问静态变量 2 ...

  6. .Net 学习过程

    1.C#面向过程编程. 2.C#面向对象基础. 3.WPF教程. 4.SQL语句. 5.ADO.Net. 6.HTML.JavaScript.Dom. 7.ASP.Net.

  7. 学习Shell(二)变量

    如何给shell脚本传入参数 1.执行“vi test.sh”创建一个新的shell脚本. vi test.sh 2.脚本test.sh的内容如下: #!/bin/sh name=$ echo &qu ...

  8. nginx配置url重写

    url重写是指通过配置conf文件,以让网站的url中达到某种状态时则定向/跳转到某个规则,比如常见的伪静态.301重定向.浏览器定向等 rewrite 语法 在配置文件的server块中写,如: s ...

  9. 流程控制之if...else

    # #如果:男的年龄>49,那么:小哥哥## age_of_boy = 50# if age_of_boy > 49:# print('小哥哥你好')### # 如果:女人的年龄>3 ...

  10. [redis]redis常用

    https://redis.io/topics/quickstart $ redis-cli ping PONG redis-server is the Redis Server itself. re ...