2016-01-21 46 views
1

我们有时差,将采取输入,例如BOT:是否有从不提供API的网站抓取文本的替代方法?

bible John 3:17 (ESV)

这将变成一个电话

https://www.biblegateway.com/passage/?search=John+3:17&version=ESV

所以,我们已经完蛋了,现在是我们会得到:

curl 'https://www.biblegateway.com/passage/?search=John+3:17&version=ESV' | grep "og:description" | sed 's/.*content="//' | sed 's/".*//' 

For God did not send his Son into the world to condemn the world, but in order that the world might be saved through him. 

这适用于小请求,例如bible John 3:1-4 - 但是,如果我们请求较大的部分,说明字段会在某个点被截断。因此,如果我们要做bible John 3,它只会返回约翰1的前5个左右的经文。

除了上面的卷曲之外,还有更好的方法可以去解决吗?在包含全文响应的唯一其他地方是原始的HTML,e.g,:

<h1 class="passage-display"> <span class="passage-display-bcv">John 3</span><span class="passage-display-version">English Standard Version (ESV)</span></h1> [ ... etc. etc. ... ] 

我们是否应该寻找的不仅仅是HTTP这个请求其他的东西吗?

+1

网站与任何你喜欢的语言,也许Java和JSoup或Python的东西... – Marged

回答

1

如果你想坚持使用oneliner,但是对于你所搜索的内容更精确,你可以试试Mojolicious Perl项目。 Here's an example语法:

perl -Mojo -E 'say g("mojolicious.org")->dom->at("title")->text' 

这将解析出标签中的文本。对于一行太复杂的任务,请参阅Mojo web scraping example

安装Mojolicious很简单:

curl -L https://cpanmin.us | perl - -M https://cpan.metacpan.org -n Mojolicious 

即使你不知道的Perl,你可能可以拼凑您需要为您的工作刮,作为DOM遍历语法可能如果您使用过jQuery,则很熟悉。

+0

所以我感到困惑与刮特定的标记,是这个网站似乎在它有点复杂刮的标签封装 - 所以我不知道如何抓住我想要的标签(或者我猜,*所有*我想要的标签):http://i.imgur.com/nNLJY​​Sr.png – MrDuk

0

scripture_lookup的CLI非常快速且易于使用。

提供商提供了一个干净的界面,可以提供常见的圣经供应商,如Crossways ESV和Bible Gateway。

当前(默认)提供者是BibleGatewayScraper,它从Bible Gateway撤回圣经。

https://github.com/wrightling/scripture_lookup

相关问题