如何使用python

时间:2017-01-31 21:47:18

标签: python web count

我正在尝试制作一个程序(用于练习),计算每本圣经书中有多少章节和经文....所以,如果我想知道书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

1 个答案:

答案 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]>&nbsp;', contents))
print(x)