Парсер форума. затык - Python

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Приспичило написать парсер местного форума: Собственно идея такая. Парсер перебирает посты, записывает их в файл, сохраняя id поста и сам текст. Код пока на такой стадии, пробую пока достать конкретный пост например: http://forum.penzainform.ru/viewtopic.php?p=1464 Содержимое поста в миниатюра_1. Далее смотрю исходный код миниатюры_1, миниатюра_2.
Листинг программы
  1. from urllib.request import urlopen # Извлекает url адрес
  2. from urllib.parse import urljoin # Объединяет части url в единое целое
  3. from lxml.html import fromstring
  4. from lxml.etree import XMLSyntaxError
  5. # CONSTANT
  6. URL = 'http://forum.penzainform.ru/viewtopic.php?p=1464' # пока константа, потом будет переменная где меняется значение p=
  7. ITEM_PATH = '.content'
  8.  
  9. def parse_main_forum():
  10. """
  11. Заходит на страницу и достает содержимое и переводит во внутренние данные Python
  12. :return:
  13. """
  14. f = urlopen(URL) # Открываем URL
  15. list_html = f.read().decode('utf-8') # декодируем значение переменной в UTF-8
  16. list_doc = fromstring(list_html) # создаем древо элементов из HTML
  17. for elem in list_doc.cssselect(ITEM_PATH): # Пробегаемся по файлу list_doc и выбираем все блоки с константой
  18. div = elem.cssselect('div')[0] # Разбираем блок div класса .content
  19. post = div.text
  20. print(post)
  21. # var = open('test.txt', 'w')
  22. # var.write(post)
  23.  
  24. def main():
  25. parse_main_forum()
  26.  
  27. if __name__ == '__main__':
  28. main()
Результат видно на миниатюре_3. Скрипт выдернул все сообщения со страницы, из блока div с классом .content за исключением блоков где были цитаты. Данные сообщения помечены как None. Соответственно Миниатюра_4 показывает блоки с цитируемым сообщением. Вопросы: 1) Как сделать так чтобы вместо None был текст сообщения? 2) Как выдернуть id сообщения вместе с текстом?

Решение задачи: «Парсер форума. затык»

textual
Листинг программы
  1. # открываем файл и переделываем его в список из которого достаем предпоследнюю строчку
  2.     fopen = open('log.txt', 'r')
  3.     f_list = list(fopen)
  4.     list_id = f_list[-2:-1]
  5.     # достаем нулевой элемент списка, это будет ссылка и преобразуем ее в обычную строку
  6.     # из которой достаем элемент id номера сообщения и преобразум в целочисленное значение
  7.     link = str(list_id[0])
  8.     number_id = int(link[-8:-1])
  9.     fopen.close()

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут