Парсер данных из сайта новостей "gorod48.ru" на lxml

Пробую парсить данные из сайта новостей "gorod48.ru" в формате 'Название новости', 'Ссылка', 'Количество комментариев'. Там где нет комментариев должно проставляться 0, а там где есть, соответственно должно быть их количество. Работаю на lxml. Колличество комментариев не соответсвует новости

import requests
from lxml import html

url = 'https://gorod48.ru/news/date/05.07.2020/'
page = requests.get(url)
tree = html.fromstring(page.text)
for trees in tree:
    name=trees.xpath('.//div[@class="newsFeedList"]//div[@class="item link"]/a/text()')
    link_news = trees.xpath('.//div[@class="newsFeedList"]//div[@class="comment"]/a/@href')
    count_comments = trees.xpath('.//div[@class="newsFeedList"]//div[@class="item"]')

Далее должно быть так:

  • Если к новости есть комментарии:
    то добавить количество комментариев к конкретно этой новости в список
  • Иначе:
    то добавить количество "0" к конкретно этой новости в список

И все данные добавить в CSV

То что выдает программа

то что на сайте


Ответы (1 шт):

Автор решения: М. Абдул
import requests
from lxml import html
url = 'https://gorod48.ru/news/date/05.07.2020/'
page = requests.get(url)
tree = html.fromstring(page.text)
name=tree.xpath('.//div[@class="newsFeedList"]//div[@class="item link"]/a/text()')
link_news =tree.xpath('.//div[@class="newsFeedList"]//div[@class="item link"]/a/@href')
link_comments = tree.xpath('.//div[@class="newsFeedList"]//div[@class="comment"]/a/@href')
count_comments = tree.xpath('.//div[@class="newsFeedList"]//div[@class="comment"]/a/text()')
i, j = 0,0
csv = ""
delim = ";" #Разделитель
while i < len(name):
    print('Название новости:',name[i])
    print('Ссылка:',link_news[i])
    print('Количество комментариев:',end=" ")
    csv += name[i] + delim + link_news[i]+delim
    if link_news[i] in link_comments[j]:
        print(count_comments[j])
        csv += count_comments[j]
        j += 1
    else:
        print(0)
        csv += "0"
    i += 1
    csv += "\n"
    print()
with open("путь/для/сохранения.csv","w") as f:
    f.write(csv)
→ Ссылка