我正在尝试制作一个程序(用于练习),计算每本圣经书中有多少章节和经文....所以,如果我想知道书1中的章节或经文,那么它会给我总数。如果我只想知道第2章第4章中的经文数,那么它只给出了该章中经文的数量。同样,章节也一样。
所以,我的逻辑是从这个网站寻找font class: tk4l
(这是上下文主体的唯一字体大小):
http://www.holybible.or.kr/B_NIV/cgi/bibleftxt.php?VR=NIV&VL=1&CN=1&CV=99
如果它找到了字体类,那么在我的章节数中加1,如果找不到字体类,则转到下一本书(book += 1
)并做同样的事情。
我打算用:
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'}):
依旧......
我的问题是......
1)如何打印章节数? 2)我不知道如何计算经文的数量。
我刚开始学习Python。请帮帮我.. T.T
答案 0 :(得分:2)
首先,您需要获取该页面的HTML内容。我建议使用包requests
。
import requests
page = requests.get("http://www.holybible.or.kr/B_NIV/cgi/bibleftxt.php?VR=NIV&VL=1&CN=1&CV=99")
要扩展计算tk4l字体用法的想法,可以通过在网页内容中搜索此子字符串来完成:
verses = str(page.content).count("font class=tk4l")
print(verses)
如果您确定了有关列出方式的唯一属性,那么为了获得章节数,您可以使用字符串操作以类似的方式继续。
编辑:扩大章节数量。这有点棘手,因为我立即注意到的唯一属性是章节在分页中。在不使用任何其他包的情况下,您可以使用一些字符串操作来遍历分页并找到最大值。我担心这种方法有点棘手,但它应该可以识别您提到的页面上的最大章节数。
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)
编辑2: 使用正则表达式,可以以更紧凑的方式完成相同的任务:
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]> ', contents))
print(x)