lxst
@lxst
Студент программист

Python парсинг, скрипт перестал вытягивать информацию, как исправить?

В общем есть у меня скрипт, который по запросу ссылки на сервис с фото, достает это фото и кладет в папку со скриптом
https://scrolller.com/i-was-told-to-post-this-here..., для начала скрипт ищет тег img, достает src и т.д
Проблема: с недавнего времени, судя по всему сайт обновился, скрипт перестал работать
async def download_image(self, url, logo=True):
        ssl_context = ssl.create_default_context()
        ssl_context.check_hostname = False
        ssl_context.verify_mode = ssl.CERT_NONE
        async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=ssl_context)) as session:    
            async with session.get(url, headers=config.headers, cookies=config.cookies) as response:
                if response.status == 200:
                    html_text = await response.text()
                    soup = BeautifulSoup(html_text, 'html.parser')
                    img_tag = soup.find("meta", property="og:image")['content']
                    async with session.get(img_tag) as response:
                        if response.status == 200:
                            image_data = await response.read()
                            rand_filename = f'{generate_random_name()}'
                            with open(f'images/{rand_filename}', 'wb') as file:
                                file.write(image_data)
                            
                            self.upscale_image(f"images/{rand_filename}", f"images/{rand_filename}")
                        else:
                            print(f"[ERROR] Не удалось загрузить изображение:\n{url}")


Теперь он вытягивает вот такую html заглушку
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<script src="/popunderjs/combined.js"></script>

<script>
      (function (w, d, s, l, i) {
        w[l] = w[l] || [];
        w[l].push({ "gtm.start": new Date().getTime(), event: "gtm.js" });
        var f = d.getElementsByTagName(s)[0],
          j = d.createElement(s),
          dl = l != "dataLayer" ? "&l=" + l : "";
        j.async = true;
        j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
        f.parentNode.insertBefore(j, f);
      })(window, document, "script", "dataLayer", "GTM-NPV69RC");
    </script>

<meta name="referrer" content="no-referrer" />
<meta name="theme-color" content="#1b252f" />
<meta name="trafficjunky-site-verification" content="wyy5spyy8" />
<meta name="exoclick-site-verification" content="aabc240ac7cdc9eae864d4761cca6570" />
<meta name="clickaine-site-verification" content="d27efeb8000f0d7746f25025962f00ac7fd8fe4521ecb81500c27f4c22350b5ba11927d0d5a74d62567c40cd1b2492fd53da8c4530689c9bbb6c3395cf1c49e5" />
<meta name="clckd" content="8747910dec50cf355eeec85e4f86e974" />
<meta name="juicyads-site-verification" content="9b7fde218decb7d1f5370ed74be67187" />
<meta name="eroads_" content="f38a18c69fb95b8c60b0fefaf4b80329" />
<link rel="manifest" href="/manifest.json" />
<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png" />

<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="apple-touch-icon" sizes="120x120" href="/assets/apple-touch-icon-120x120.png" />
<link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon-180x180.png" />
<link rel="preconnect" href="https://yocto.scrolller.com" />
<link rel="preconnect" href="https://zepto.scrolller.com" />
<link rel="preconnect" href="https://atto.scrolller.com" />
<link rel="preconnect" href="https://femto.scrolller.com" />
<style>
      body {
        background-color: #1b252f;
      }
    </style>
<script type="module" crossorigin src="/assets/index-QigAz9tq.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index--Sk43b09.css">
</head>
<body>
<script async type="application/javascript" src="https://a.a3ion.com/ad-provider.js"></script>

<noscript>
      <iframe
        src="https://www.googletagmanager.com/ns.html?id=GTM-NPV69RC"
        height="0"
        width="0"
        style="display: none; visibility: hidden"
      >
      </iframe>
    </noscript>

<div id="root"></div>
<noscript> I need JavaScript to work! </noscript>
<script>
      /*
              Refresh service worker cache.

              It's important that this logic is not in the main application because the service worker
              can sometimes end up with an inconsistent cache with old files that no longer exist.
              When that happens the application won't load and it won't ever refresh.

              Wait for load to complete to avoid competeting with other more critical resources.
          */

      if (navigator.serviceWorker !== undefined) {
        window.addEventListener("load", () => {
          navigator.serviceWorker.ready.then((registration) => {
            registration.active.postMessage("refresh-cache");
          });
        });
      }
    </script>
<div id="old-browser-info" style="display: none">
<div style="color: white; text-align: center; line-height: 2">
This site needs a newer browser. <br/>
Try the old version at
<a style="color: white; text-decoration: underline" href="https://old.scrolller.com">
old.scrolller.com
</a>
</div>
</div>
<script>
      if (window.IntersectionObserver === undefined) {
        document.getElementById("old-browser-info").style.display = "block";
      }
    </script>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v84a3a4012de94ce1a686ba8c167c359c1696973893317" integrity="sha512-euoFGowhlaLqXsPWQ48qSkBSCFs3DPRyiwVu3FjR96cMPx+Fr+gpWRhIafcHwqwCqWS42RZhIudOvEI+Ckf6MA==" data-cf-beacon='{"rayId":"84e9236ffed782d3","version":"2024.1.0","token":"04ace5fab2ae4c4391477219c6054fa2"}' crossorigin="anonymous"></script>
</body>
</html>

Как это исправить? С чем связано? Подскажите, буду благодарен за наставление!
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 1
@dim5x
ЗИ, ИБ.
Такой вариант не подойдёт? Рендерится через Chromium.

from requests_html import HTMLSession

def download(url):
    session = HTMLSession()
    resp = session.get(url)
    resp.html.render()

    if resp.status_code == 200:
        list_of_img = resp.html.find('img')
        d = list_of_img[0].attrs
        image_url = d['srcset'].split(',')[-1].split(' ')[0]
        image_name = image_url.split('/')[-1]
        image = session.get(image_url).content
        with open(image_name, 'wb') as file:
            file.write(image)
    else:
        print(f"[ERROR] Не удалось загрузить изображение:\n{url}")

    session.close()

download('https://scrolller.com/i-dragged-my-brother-out-at-1am-to-see-the-aogsmn8ihx')
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
30 апр. 2024, в 15:11
500 руб./в час
30 апр. 2024, в 15:11
5000 руб./за проект
30 апр. 2024, в 15:05
5000 руб./за проект