2017-10-27 21 views
0

私はHTMLを整理して、自分が持っているすべてのテキストを必要とするようにしようとしています。次のコードでは、最初に定義された関数で上付き文字タグを整理しますが、前者は.get_textを使う前に 'h4'、 'h1'、 'a'、および 'li'タグを使って同じことをしません。beautifulsoup decompose()を使用して不要な複数のタグを取り除く

import requests 
from bs4 import BeautifulSoup 
url = "https://www.biblegateway.com/passage/?search=Luke+14%3A12-14&version=NIV" 
page = requests.get(url) 
soup = BeautifulSoup(page.content, "html.parser") 

def supClean(verseWithSup): 
    for sup in verseWithSup: 
     verseWithSup.sup.decompose() 
    return verseWithSup 

def verseExtract(soup): 
    verseName = soup.find(class_="passage-display-bcv").get_text() 
    verseWithSup = soup.find(class_="passage-text") 
    verseBody = supClean(verseWithSup).get_text() 
    return verseName, verseBody 

verseName, verseBody = (verseExtract(soup)) 

print(verseName) 
print(verseBody) 

私は今、この権利を取得:

をルーク14:12-14New国際訳(NIV)するとイエスはあなたが昼食や夕食を与える場合は、招待していない」、彼の ホストに言いましたお友達、 あなたの兄弟姉妹、あなたの親戚、またはあなたの豊かな隣人。もしあなたが をしたら、彼らはあなたを招待するかもしれないので、あなたは返済されます。しかし、 あなたが宴会をしたとき、貧しい人々、不自由な人、教え方、 ブラインドを招待すれば、あなたは祝福されるでしょう。彼らはあなたを返済することはできませんが、あなた は正義の復活で返済される「クロス 参照:ルーク夜02時13分:21版ルーク14:14:AC 24:15

新国際訳(NIV)聖Bible、New International バージョン®、NIV®著作権©1973、1978、1984、2011 by Biblica、Inc.® 許可を得て使用します。すべての権利は世界中で保護されています

しかし、私はwan'tすべてはこれです:

イエスはあなた、あなたの兄弟や姉妹、あなたが昼食や夕食を与えた場合、 はあなたの友人を招待していない」、彼のホストに言いました親戚、または あなたの豊かな隣人;あなたがそうするなら、彼らはあなたを招待するかもしれないので、あなたは が返済されます。しかし、あなたが宴会をするとき、貧しい人々を招待してください、 、不自由な者、視覚障害者、14人が祝福されます。彼らはあなたを返済することはできません ますが、 正義の復活で返済される「

これは、HTMLがどのように見えるかです:。

<div class="passage-text"> 
<div class="passage-wrap"> 
    <div class="passage-content passage-class-0"> 
    <div class="version-NIV result-text-style-normal text-html "> 
    <h1 class="passage-display"> 
    <span class="passage-display-bcv"> 
     Luke 14:12-14 
    </span> 
    <span class="passage-display-version"> 
     New International Version (NIV) 
    </span> 
    </h1> 
    <p> 
    <span class="text Luke-14-12" id="en-NIV-25566"> 
     Then Jesus said to his host, 
     <span class="woj"> 
     “When you give a luncheon or dinner, do not invite your friends, your brothers or sisters, your relatives, or your rich neighbors; if you do, they may invite you back and so you will be repaid. 
     </span> 
    </span> 
    <span class="text Luke-14-13" id="en-NIV-25567"> 
     <span class="woj"> 
     But when you give a banquet, invite the poor, the crippled, the lame, the blind, 
     <sup class="crossreference" data-cr="#cen-NIV-25567A" data-link='(&lt;a href="#cen-NIV-25567A" title="See cross-reference A"&gt;A&lt;/a&gt;)'> 
     </sup> 
     </span> 
    </span> 
    <span class="text Luke-14-14" id="en-NIV-25568"> 
     <span class="woj"> 
     <sup class="versenum"> 
     14 
     </sup> 
     and you will be blessed. Although they cannot repay you, you will be repaid at the resurrection of the righteous.” 
     <sup class="crossreference" data-cr="#cen-NIV-25568B" data-link='(&lt;a href="#cen-NIV-25568B" title="See cross-reference B"&gt;B&lt;/a&gt;)'> 
     </sup> 
     </span> 
    </span> 
    </p> 
    <div class="crossrefs hidden"> 
    <h4> 
     Cross references: 
    </h4> 
    <ol> 
     <li id="cen-NIV-25567A"> 
     <a href="#en-NIV-25567" title="Go to Luke 14:13"> 
     Luke 14:13 
     </a> 
     : 
     <a class="crossref-link" data-bibleref="Luke 14:21" href="/passage/?search=Luke+14%3A21&amp;version=NIV"> 
     ver 21 
     </a> 
     </li> 
     <li id="cen-NIV-25568B"> 
     <a href="#en-NIV-25568" title="Go to Luke 14:14"> 
     Luke 14:14 
     </a> 
     : 
     <a class="crossref-link" data-bibleref="Acts 24:15" href="/passage/?search=Acts+24%3A15&amp;version=NIV"> 
     Ac 24:15 
     </a> 
     </li> 
    </ol> 
    </div> 
    <!--end of crossrefs--> 
    </div> 
    <div class="publisher-info-bottom with-single"> 
    <strong> 
    <a href="/versions/New-International-Version-NIV-Bible/"> 
     New International Version 
    </a> 
    (NIV) 
    </strong> 
    <p> 
    Holy Bible, New International Version®, NIV® Copyright ©1973, 1978, 1984, 2011 by 
    <a href="http://www.biblica.com/"> 
     Biblica, Inc.® 
    </a> 
    Used by permission. All rights reserved worldwide. 
    </p> 
    </div> 
    </div> 
</div> 
</div> 
+0

あなたは私たちにしたいのですか?クリアしてください –

+0

私はそれをより明確に編集しました。 – antc

答えて

1

はこの打撃を与えます。 12を振り払いたい場合は、詩の1314もお知らせください。

from bs4 import BeautifulSoup 
import requests   

link= "https://www.biblegateway.com/passage/?search=Luke+14%3A12-14&version=NIV" 

soup = BeautifulSoup(requests.get(link).text,"lxml") 
for item in soup.select("[id^='en-NIV-']"): 
    print(item.text.strip()) 

出力:

12 Then Jesus said to his host, “When you give a luncheon or dinner, do not invite your friends, your brothers or sisters, your relatives, or your rich neighbors; if you do, they may invite you back and so you will be repaid. 
13 But when you give a banquet, invite the poor, the crippled, the lame, the blind, 
14 and you will be blessed. Although they cannot repay you, you will be repaid at the resurrection of the righteous.” 

それとも、以下のように試みることができる詩の番号をオフに取り除くために:

import requests 
from lxml.html import fromstring   

link= "https://www.biblegateway.com/passage/?search=Luke+14%3A12-14&version=NIV" 
root = fromstring(requests.get(link).text) 
for item in root.cssselect("[id^='en-NIV-'],.woj"): 
    for data in item:data.drop_tree() 
    print(item.text_content()) 

結果:

Then Jesus said to his host, 
“When you give a luncheon or dinner, do not invite your friends, your brothers or sisters, your relatives, or your rich neighbors; if you do, they may invite you back and so you will be repaid. 
But when you give a banquet, invite the poor, the crippled, the lame, the blind, 
and you will be blessed. Although they cannot repay you, you will be repaid at the resurrection of the righteous.” 
+0

詩を削除すること#は私が必要なものです。また、ビルドされたPython HTMLプロセッサの代わりにlxmlを使用しています。 – antc

+0

'lxml'ライブラリがインストールされている場合、詩番号を削除するための解決策が使われている可能性があります。ありがとう。 – SIM

+0

このBeautifulSoupのドキュメントリンク[リンク](https://www.crummy.com/software/BeautifulSoup/bs4/doc/#css-selectors)には、lxmlのHTMLパーサーが明示されています。Very fast BeautifulSoup(マークアップ、 "lxml ")'。 – SIM

0

上記の答えながら私は最終的に到着しました私はbs4で欲しいことをするためにこのコードで編集しました。

for item in soup.select("sup, div.publisher-info-bottom.with-single"): 
    item.decompose() 

次に、私が望むようにテキストとフォーマットを取得するために、以下を使用しました。

verseBody = soup.select("div.passage-text p") 
formedVerse = "" 
for p in verseBody: 
    formedVerse += p.get_text() + "\n\n" 
関連する問題