Парсинг rss ленты с защитой от ботов

Имеется rss лента: "https://tass.ru/rss/v2.xml". Необходимо получить содержимое ленты либо через feedparser, либо через requests. Ни то, ни другое соответственно не работает, т.к сервер имеет механизм защиты от ботов. Прочитать удалось только одним способом, скопировать в headers данные из отладчика в браузере значения cookies и user-agent. Но такой способ не работает на удаленном сервере. Если сделать запрос на удаленном сервере, с headers-ами домашнего пк, то приходит ответ примерно следующего содержимого: "<meta name="robots" content="noindex, noarchive"...". Вопрос в следующем как прочитать эту ленту, не прописывая headers, т.к это не работает на удаленном сервере?


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

Автор решения: Namerek

Надеюсь это Вам поможет

pip install requests-html

from requests_html import HTMLSession

s = HTMLSession()

response = s.get('https://tass.ru/rss/v2.xml')

response.html.render(
    wait=8,
    timeout=10,
    sleep=4
)

with open('item.xml', 'wb') as file:
    file.write(
        response.html.raw_html
    )
<html xmlns="http://www.w3.org/1999/xhtml"><head><style id="xml-viewer-style">/* Copyright 2014 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

div.header {
    border-bottom: 2px solid black;
    padding-bottom: 5px;
    margin: 10px;
}

div.collapsible &gt; div.hidden {
    display:none;
}

.pretty-print {
    margin-top: 1em;
    margin-left: 20px;
    font-family: monospace;
    font-size: 13px;
}

#webkit-xml-viewer-source-xml {
    display: none;
}

.collapsible-content {
    margin-left: 1em;
}
.comment {
    white-space: pre;
}

.button {
    -webkit-user-select: none;
    cursor: pointer;
    display: inline-block;
    margin-left: -10px;
    width: 10px;
    background-repeat: no-repeat;
    background-position: left top;
    vertical-align: bottom;
}

.collapse-button {
    background: url("data:image/svg+xml,&lt;svg xmlns='http://www.w3.org/2000/svg' fill='%23909090' width='10' height='10'&gt;&lt;path d='M0 0 L8 0 L4 7 Z'/&gt;&lt;/svg&gt;");
    height: 10px;
}

.expand-button {
    background: url("data:image/svg+xml,&lt;svg xmlns='http://www.w3.org/2000/svg' fill='%23909090' width='10' height='10'&gt;&lt;path d='M0 0 L0 8 L7 4 Z'/&gt;&lt;/svg&gt;");
    height: 10px;
}
</style></head><body><div id="webkit-xml-viewer-source-xml"><rss xmlns="" xmlns:atom="https://www.w3.org/2005/Atom" version="2.0"><channel><title>ТАСС</title>
<description>ИНФОРМАЦИОННОЕ АГЕНТСТВО РОССИИ ТАСС</description>
<language>ru-ru</language>
<link><![CDATA[https://tass.ru]]></link>
<copyright>ТАСС</copyright>
<image><url><![CDATA[https://tass.ru/i/rss/logo.png]]></url>
<title>ТАСС</title>
<link><![CDATA[https://tass.ru]]></link>
</image>
<atom:link href="https://tass.ru/rss/v2.xml" rel="self" type="application/rss+xml"/>
<item><title>Калягин заявил, что никакие санкции не помешают талантам</title>
<link><![CDATA[https://tass.ru/kultura/14379485]]></link>
<guid><![CDATA[https://tass.ru/kultura/14379485]]></guid>
<pubDate>Thu, 14 Apr 2022 18:28:44 +0300</pubDate>
<description>Народный артист РФ отметил, что "ситуация на Украине - это новая реальность, с которой приходится считаться"</description>
<category>Культура</category>
<category>Военная операция на Украине</category>
</item>
<item><title>Отреставрированное историческое здание Литинститута в Москве примет студентов 1 сентября</title>
<link><![CDATA[https://tass.ru/nedvizhimost/14377917]]></link>
<guid><![CDATA[https://tass.ru/nedvizhimost/14377917]]></guid>
<pubDate>Thu, 14 Apr 2022 18:28:31 +0300</pubDate>
<description>Реконструкция объекта идет с 2016 года</description>
<category>Недвижимость</category>
</item>
<item><title>На подготовку к ЕГЭ в дистанционном формате в КБР направят более 30 млн рублей</title>
<link><![CDATA[https://tass.ru/obschestvo/14381127]]></link>
<guid><![CDATA[https://tass.ru/obschestvo/14381127]]></guid>
<pubDate>Thu, 14 Apr 2022 18:26:52 +0300</pubDate>
<description>К проведению экзаменов привлекут 4,5 тыс. специалистов, они проходят подготовку</description>
<category>Общество</category>
<category>Северный Кавказ</category>
</item>
<item><title>Карпов: Федерации шахмат России не стоит выходить из Европейского шахматного союза</title>
<link><![CDATA[https://tass.ru/sport/14381147]]></link>
<guid><![CDATA[https://tass.ru/sport/14381147]]></guid>
<pubDate>Thu, 14 Apr 2022 18:26:10 +0300</pubDate>
<description>В четверг наблюдательный совет Федерации шахмат России единогласно проголосовал за вхождение в состав участников Азиатской шахматной федерации</description>
<category>Спорт</category>
...

Можно так чтобы получить XML в чистом виде

from requests_html import HTMLSession
from bs4 import BeautifulSoup as Soup

s = HTMLSession()

response = s.get('https://tass.ru/rss/v2.xml')

response.html.render(
    wait=8,
    timeout=10,
    sleep=4
)

soup = Soup(response.html.raw_html, 'html.parser')

with open('item.xml', 'w', encoding='utf-8') as file:
    file.write(
        soup.find(id="webkit-xml-viewer-source-xml").find('rss').prettify()
    )
→ Ссылка