2017-01-31 4 views
1

Ich versuche, ein Programm (für die Praxis) zu machen, die zählen, wie viele Kapitel und Verse in jedem Buch der Bibel .... Also sagen wir mal wenn ich es wissen will Gesamt Kapitel oder Verse in Buch 1, dann wird es mir die Gesamtzahl geben. Wenn ich nur die Anzahl der Vers in Kapitel 4 in Buch 2 wissen möchte, dann gibt es mir nur die Anzahl der Verse in diesem bestimmten Kapitel. Gleiches gilt für die Kapitel.Wie man zählt, wie viele Seiten auf einer Webseite mit Python

So, das war meine Logik sucht nach font class: tk4l (der einzigartige Schriftgröße für den Körper des Kontextes ist) von dieser Website:

http://www.holybible.or.kr/B_NIV/cgi/bibleftxt.php?VR=NIV&VL=1&CN=1&CV=99

und wenn es die Schriftklasse findet dann 1 in der meine Anzahl der Kapitel und wenn nicht die Schriftklasse Bewegung auf das nächste Buch (book += 1) und das gleiche tun finden ..

ich verwenden würde:

import requests 
from bs4 import BeautifulSoup 
import operator 



def read_chapters(max_books, max_chapters): 
    book=1 
    chapter=1 
    while chapter <= max_chapters: 
     url = 'http://www.holybible.or.kr/B_NIV/cgi/bibleftxt.php?VR=NIV&VL={}&CN={}&CV=99'.format(book, chapter) 
     source_code = requests.get(url).text 
     soup = BeautifulSoup(source_code, "html.parser") 
     for bible_text in soup.findAll('font', {'class': 'tk4l'}): 

und so weiter ...

Meine Frage ist ...

1) Wie kann ich das Kapitel Zählung drucken ?? 2) Ich habe keine Ahnung, wie ich die Anzahl der Strophen zählen sollte.

Ich habe gerade angefangen, Python zu studieren. Bitte helfen Sie mir dabei. T.T

Antwort

2

Zuerst müssen Sie den HTML-Inhalt dieser Seite erhalten. Ich empfehle das Paket requests zu verwenden.

verses = str(page.content).count("font class=tk4l") 
print(verses) 

Um die Anzahl der Kapitel, die Sie könnte:

import requests 
page = requests.get("http://www.holybible.or.kr/B_NIV/cgi/bibleftxt.php?VR=NIV&VL=1&CN=1&CV=99") 

auf Ihrer Idee des Zählens die Schrift Nutzung von tk4l zu erweitern, dies durch die Suche nach dieser Unter Zeichenfolge im webpagem Inhalt getan werden könnte, Gehen Sie in ähnlicher Weise mit String-Operationen vor, wenn Sie ein eindeutiges Attribut für die Art ihrer Auflistung identifizieren.

EDIT: Um die Anzahl der Kapitel zu erweitern. Dies ist ein wenig schwierig, da das einzige Attribut, das ich sofort bemerke, ist, dass die Kapitel in der Paginierung sind. Ohne weitere Pakete zu verwenden, können Sie einige Zeichenfolgenoperationen verwenden, um die Seitennummerierung zu durchlaufen und das Maximum zu finden. Ich fürchte, der Ansatz ist ein bisschen schwierig, aber es sollte funktionieren, um die maximale Anzahl von Kapiteln auf der von Ihnen erwähnten Seite zu identifizieren.

import requests 
page = requests.get("http://www.holybible.or.kr/B_NIV/cgi/bibleftxt.php?VR=NIV&VL=1&CN=1&CV=99") 
verses = str(page.content).split("http://www.holybible.or.kr/images/l_arrow.gif")[1].split("http://www.holybible.or.kr/images/arrow.gif")[0] 
currmax = 0 
for i in range(len(verses)): 
    if verses[i] == ">": 
     if verses[i+2:i+7] == "</a>&": 
      if currmax < int(verses[i+1]): 
       currmax = int(verses[i+1]) 
     if verses[i+3:i+8] == "</a>&": 
      if currmax < int(verses[i+1:i+3]): 
       currmax = int(verses[i+1:i+3]) 
print(currmax) 

EDIT 2: Mit regulären Ausdrücken kann die gleiche Aufgabe in einer kompakteren Weise erreicht werden:

import requests 
import re 
page = requests.get("http://www.holybible.or.kr/B_NIV/cgi/bibleftxt.php?VR=NIV&VL=1&CN=1&CV=99") 
contents = str(page.content) 
x = max(int(i) for i in re.findall(r'>(\d+)</[ab]>&nbsp;', contents)) 
print(x) 
+0

können Sie mir bitte über die Seite Variable erklären? wie du teilst und was es bedeutet [0] ad [1] –

+0

@YunTaeHwang Die Seitennummerierung auf der Webseite wird von zwei Pfeilen auf dieser Seite umschlossen. Wenn page.content als String verwendet wird, haben wir den gesamten Inhalt der Webseite als eine riesige Zeichenfolge. Da die Paginierungselemente alle durch & nbsp enden, können wir einfach über die ganze Zeichenfolge iterieren, in der Tat wird das Entfernen von allem, was mit .split beginnt, das gleiche Ergebnis ergeben. Aber manchmal möchten Sie vielleicht die Daten reduzieren, die Sie analysieren. Durch Aufspalten der Paginierungs-Gifs erhalten wir eine Liste. Mit der Indexierung habe ich genau den Teil der Seitenkette extrahiert, der die Kapitelnummern enthält. – Tristan

+0

Es tut mir so leid, aber kannst du bitte etwas über die for-Schleife erklären, die du geschrieben hast .. wie Verse [i] == "> '?? hmmmmm wenn du nichts dagegen hast ... bitte –

Verwandte Themen