Как правильно разобрать XML URL с запросами в Python? - PullRequest
0 голосов
/ 17 апреля 2020

Я хотел бы проанализировать файл XML из URL.

Делая следующее:

req = requests.get('https://www.forbes.com/news_sitemap.xml')

Вместо получения правильного файла XML, я получаю:

<!doctype html>
<html lang="en">
        <head>
                <meta http-equiv="Content-Language" content="en_US">

                <script type="text/javascript">
                        (function () {
                                function isValidUrl(toURL) {
                                        // Regex taken from welcome ad.
                                        return (toURL || '').match(/^(?:https?:?\/\/)?(?:[^.(){}\\\/]*)?\.?forbes\.com(?:\/|\?|$)/i);
                                }

                                function getUrlParameter(name) {
                                        name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
                                        var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
                                        var results = regex.exec(location.search);
                                        return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
                                };

                                function consentIsSet(message) {
                                        console.log(message);
                                        var result = JSON.parse(message.data);
                                        if(result.message == "submit_preferences"){
                                                var toURL = getUrlParameter("toURL");
                                                if(!isValidUrl(toURL)){
                                                        toURL = "https://www.forbes.com/";
                                                }
                                                location.href=toURL;
                                        }
                                }

                                var apiObject = {
                                        PrivacyManagerAPI:
                                        {
                                                action: "getConsent",
                                                timestamp: new Date().getTime(),
                                                self: "forbes.com"
                                        }
                                };
                                var json = JSON.stringify(apiObject);
                                window.top.postMessage(json,"*");
                                window.addEventListener("message", consentIsSet, false);
                        })();
                </script>
        </head>
        <div id='teconsent'>
                <script async="async" type="text/javascript" crossorigin src='//consent.truste.com/notice?domain=forbes.com&c=teconsent'></script>
        </div>
        <body>
        </body>
</html>

Есть ли лучший способ обработки файл XML (например, если он сжат или рекурсивно анализирует его, если файл слишком большой ...)? Спасибо!

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Этот сайт проверяет повара ie на ВВП, если вы даете этому повару ie на запрос, вы можете получить файл XML. Попробуйте этот код, у меня отлично работает.

import requests
url = "https://www.forbes.com/news_sitemap.xml"
news_sitemap = requests.get(url, headers={"Cookie": "notice_gdpr_prefs=0,1,2:1a8b5228dd7ff0717196863a5d28ce6c"})

print(news_sitemap.text)
0 голосов
/ 17 апреля 2020

Используя модуль запросов, я получаю файл xml. Затем вы можете использовать библиотеку синтаксического анализатора xml, чтобы делать то, что вы хотите.

import requests
url = "https://www.forbes.com/news_sitemap.xml"
x = requests.get(url)
print(x.text)
...