Почему Python не сохраняет в excel так как надо?

Имеется код который парсит страницу форума .
Суть: парсит информацию о пользователе, ссылке на его профиль и сообщение которое пользователь оставил, всё это сохраняет в Эксель.
Но проблема вот в чем, список пользователей создает в файле нормальный как и ссылки на их профиль, но само сообщение привязывает только первое со страницы, ну или то
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()

Нужно чтобы соответственно было, пользователь ссылка и его сообщение.
Помогите пожалуйста, уже двое суток сижу туплю...
  • Вопрос задан
  • 499 просмотров
Решения вопроса 1
@nirvimel
for post in list_doc.cssselect('.forum-post-table'):
    user = post.cssselect('.forum-user-name a')[0]
    name = user.text_content()
    url = urljoin(URL, user.get('href'))
    # title = user_name.get('title')
    descr = post.cssselect('.forum-post-text')[0].text_content()

Набросал на коленке. В бою не проверял. Если даже остались какие-то ошибки, то, надеюсь, суть я передал.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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