Имеется код который парсит страницу форума .
Суть: парсит информацию о пользователе, ссылке на его профиль и сообщение которое пользователь оставил, всё это сохраняет в Эксель.
Но проблема вот в чем, список пользователей создает в файле нормальный как и ссылки на их профиль, но само сообщение привязывает только первое со страницы, ну или то
from urllib.request import urlopen
from urllib.parse import urljoin
from bs4 import BeautifulSoup
from time import sleep
from lxml.html import fromstring
from lxml.etree import XMLSyntaxError
import xlsxwriter
URL = 'http://www.banki.ru/forum/?PAGE_NAME=read&FID=51&TID=150146'
ITEM_PATH = '.forum-user-name'
DESCR_PATH = '.forum-post-entry'
def parse_posts():
f = urlopen(URL)
list_html = f.read().decode('cp1251')
list_doc = fromstring(list_html)
posts = []
for elem in list_doc.cssselect(ITEM_PATH):
a = elem.cssselect('a')[0]
href = a.get('href')
url = urljoin(URL, href)
title = a.get('title')
name = a.text_content()
descr = list_doc.cssselect(DESCR_PATH)[0].text_content()
post = {'name': name, 'url': url, 'descr': descr}
posts.append(post)
return posts
def export_excel(filename, posts):
workbook = xlsxwriter.Workbook(filename)
worksheet = workbook.add_worksheet()
bold = workbook.add_format({'bold': True})
field_names = ('Название темы', 'URL', 'ДиФ')
for i, field in enumerate(field_names):
worksheet.write(0, i, field, bold)
fields = ('name', 'url', 'descr')
for row, post in enumerate(posts, start=1):
for col, field in enumerate(fields):
worksheet.write(row, col, post[field])
workbook.close()
def main():
posts = parse_posts()
export_excel('posts1.xlsx', posts)
if __name__ == '__main__':
main()
Суть: парсит информацию о пользователе, ссылке на его профиль и сообщение которое пользователь оставил, всё это сохраняет в Эксель.
Но проблема вот в чем, список пользователей создает в файле нормальный как и ссылки на их профиль, но само сообщение привязывает только первое со страницы, ну или то сообщение по счету которое изменишь в этом отрезке кода. Убрав [0] вообще выдает ошибку
descr = list_doc.cssselect(DESCR_PATH)[0].text_content()
Нужно чтобы соответственно было, пользователь ссылка и его сообщение.
Помогите пожалуйста, уже двое суток сижу туплю...