@Yalg

Как спарсить текст(новеллы с сайтов) в тхт?

К примеру есть gravitytales.com/novel/the-lords-empire/tle-chapter-1
И я хочу скачать все главы пачками по 100шт в тхтшник чтобы потом конвертировать в фб2 и читать на смартфоне.

Наверняка я даже не тысячный с подобной задачей и есть готовые простые решения.
  • Вопрос задан
  • 167 просмотров
Решения вопроса 1
@SunUp
Я не волшебник, я ещё только учусь
Простых готовых решений для парсинга нет, есть только библиотеки для различных ЯП. Поэтому ответ на вопрос "Как спарсить текст?" звучит так: написать парсер для этого сайта, например такой, как написал вчера я на Python, или найти того кто напишет.
from bs4 import BeautifulSoup
import requests
import time


base_url = 'http://gravitytales.com/novel/the-lords-empire/tle-chapter-'
last_chapter = 500

def get_html(url):
  html = requests.get(url)
  if html.status_code == 200:
    html.encoding = 'utf-8'
    return html.text
  else:
    print('Status code {0}'.format(html.status_code))
    return ''

def parse(html):
  text = ''
  soup = BeautifulSoup(html, 'lxml')
  title_tag = soup.find('title').get_text()
  title = title_tag.split('-')[1].strip()
  title = title + '\n\n'
  paragraphs = soup.find('div', class_='innerContent').find_all('p')[3:]
  for paragraph in paragraphs:
    text += paragraph.get_text() + '\n'
  return [title, text]

def write(title, text):
  with open('novel.txt', 'a') as file:
    file.write(title)
    file.write(text)
  print(title[:-2] + ' was downloaded successfully!')

def main():
  with open('novel.txt', 'w') as file:
    file.write('')
  for index in range(0, last_chapter+1):
    html = get_html(base_url + str(index))
    if html != '':
      title, chapter = parse(html)
      write(title, chapter)
    time.sleep(1)


if __name__ == '__main__':
  main()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
dimonchik2013
@dimonchik2013
non progredi est regredi
0xcffaedfe
@0xcffaedfe
Developer & Reverser
Там есть API, есть готовые решения google\github в помощь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы