2017-01-31 2 views
1

Я пытаюсь сделать программу (для практики), в которой подсчитывается количество глав и стихов в каждой книге Библии ... Итак, скажите, хочу ли я знать полных глав или стихов в книге 1, тогда это даст мне общее число. Если я хочу узнать только число стихов в главе 4 книги 2, то это дает мне только количество стихов в этой главе. Также, для глав.Как подсчитать, сколько страниц на веб-странице с помощью python

Итак, моя логика была подыскивает 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

ответ

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, это может быть сделано путем поиска этого подвида строки в содержании webpagem:

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

Чтобы получить количество разделов, которые вы могли бы действуйте аналогичным образом со строковыми операциями, если вы идентифицируете уникальный атрибут о том, как они перечислены.

EDIT: Расширить количество разделов. Это немного сложно, так как единственный атрибут, который я сразу заметил, состоит в том, что главы находятся в разбивке на страницы. Без использования каких-либо дополнительных пакетов вы можете использовать некоторые строковые операции для итерации через разбиение на страницы и нахождения максимального значения. Я боюсь, что этот подход немного сложный, но он должен работать для определения максимального количества глав на упомянутой вами странице.

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: С регулярными выражениями, та же задача может быть выполнена в более компактной форме:

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

Пожалуйста, вы можете объяснить мне о переменных страницах? как вы раскалываете и что это значит [0] ad [1] –

+0

@YunTaeHwang На странице разбиты две стрелки на этой странице. Взятие page.content как строки означает, что мы имеем весь контент веб-страницы как одну гигантскую строку. Поскольку элементы разбиения на страницы заканчиваются на, мы могли бы просто перебирать всю строку, фактически удаление всего, начиная с .split, даст тот же результат. Но иногда вы можете уменьшить данные, которые вы анализируете. Разбираясь на gifs с разбивкой на страницы, мы получаем список. С индексированием я извлек именно ту часть строки страницы, которая содержит номера глав. – Tristan

+0

Прошу прощения, но не могли бы вы немного объяснить о цикле for, который вы написали тоже. Например, стихи [i] == "> '?? hmmmmm, если вы не возражаете..пожалуйста, –

Смежные вопросы