Парсер форума. затык - Python
Формулировка задачи:
Доброго времени суток.
Приспичило написать парсер местного форума:
Собственно идея такая. Парсер перебирает посты, записывает их в файл, сохраняя id поста и сам текст.
Код пока на такой стадии, пробую пока достать конкретный пост например:
http://forum.penzainform.ru/viewtopic.php?p=1464
Содержимое поста в миниатюра_1.
Далее смотрю исходный код миниатюры_1, миниатюра_2.
Результат видно на миниатюре_3.
Скрипт выдернул все сообщения со страницы, из блока div с классом .content за исключением блоков где были цитаты. Данные сообщения помечены как None.
Соответственно Миниатюра_4 показывает блоки с цитируемым сообщением.
Вопросы:
1) Как сделать так чтобы вместо None был текст сообщения?
2) Как выдернуть id сообщения вместе с текстом?
Листинг программы
- from urllib.request import urlopen # Извлекает url адрес
- from urllib.parse import urljoin # Объединяет части url в единое целое
- from lxml.html import fromstring
- from lxml.etree import XMLSyntaxError
- # CONSTANT
- URL = 'http://forum.penzainform.ru/viewtopic.php?p=1464' # пока константа, потом будет переменная где меняется значение p=
- ITEM_PATH = '.content'
- def parse_main_forum():
- """
- Заходит на страницу и достает содержимое и переводит во внутренние данные Python
- :return:
- """
- f = urlopen(URL) # Открываем URL
- list_html = f.read().decode('utf-8') # декодируем значение переменной в UTF-8
- list_doc = fromstring(list_html) # создаем древо элементов из HTML
- for elem in list_doc.cssselect(ITEM_PATH): # Пробегаемся по файлу list_doc и выбираем все блоки с константой
- div = elem.cssselect('div')[0] # Разбираем блок div класса .content
- post = div.text
- print(post)
- # var = open('test.txt', 'w')
- # var.write(post)
- def main():
- parse_main_forum()
- if __name__ == '__main__':
- main()
Решение задачи: «Парсер форума. затык»
textual
Листинг программы
- # открываем файл и переделываем его в список из которого достаем предпоследнюю строчку
- fopen = open('log.txt', 'r')
- f_list = list(fopen)
- list_id = f_list[-2:-1]
- # достаем нулевой элемент списка, это будет ссылка и преобразуем ее в обычную строку
- # из которой достаем элемент id номера сообщения и преобразум в целочисленное значение
- link = str(list_id[0])
- number_id = int(link[-8:-1])
- fopen.close()
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д