У меня проблема с кодом очистки веб-страниц PythonPython

Программы на Python
Anonymous
У меня проблема с кодом очистки веб-страниц Python

Сообщение Anonymous »

Я пишу код, который может еженедельно держать меня в курсе новостей конкретной страницы магазина эпических игр, но на данный момент я застрял в части сайта, посвященной очистке html-данных.
Я написал следующий код:

Код: Выделить всё

import requests
from bs4 import BeautifulSoup

url = 'https://store.epicgames.com/it/free-games'

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"}

page = requests.get(url, headers=headers)

soup = BeautifulSoup(page.content, "html.parser")

print(soup.prettify())
вот результат:

Код: Выделить всё




@media screen and (max-width:374px){h1{font-size:18px}.cf_challenge_container{margin:25px;padding:25px}.cf_challenge_text{font-size:16px}}@media screen and (min-width:375px) and (max-width:1279px){h1{font-size:30px}.cf_challenge_container{margin:25px;padding:60px}.cf_challenge_text{font-size:16px}}@media screen and (min-width:1280px){h1{font-size:40px}.cf_challenge_container{margin:25px;padding:60px}.cf_challenge_text{font-size:18px}}@media screen and (min-width:1920px){h1{font-size:50px}}.cf_challenge_text_small{font-size:11px}*,:after :before{-webkit-font-smoothing:antialiased;-webkit-touch-callout:none;-moz-osx-font-smoothing:grayscale;box-sizing:border-box;text-size-adjust:100%}body{height:100vh;width:100vw;overflow-x:hidden;font-family:sans-serif;font-weight:400;font-size:14px;line-height:20px;letter-spacing:.2px;color:hsla(0,0%,100%,.5);margin:0;background:#121212;display:flex;flex-direction:column;justify-content:center;align-items:center}.logo{padding-bottom:25px}.logo,section{display:flex;align-items:center;flex-direction:column;text-align:center}h1,p{font-family:Brutal,sans-serif;font-weight:400;padding:0;margin:0}h1{line-height:34px;text-align:center;letter-spacing:-.5px;color:#fff;margin:0 0 20px}p{font-size:14px;line-height:20px;letter-spacing:.2px;color:hsla(0,0%,100%,.5)}strong{font-weight:400;color:#fff}.cf_challenge_container{max-width:430px;min-width:200px;background-color:#202020;font-family:sans-serif;line-height:normal;overflow:auto}.cf_challenge,.cf_challenge_container{display:flex;justify-content:center;flex-direction:column}.cf_challenge{text-align:center;margin:25px 0}.cf_challenge_container hr{border-bottom:0;max-width:500px;opacity:.25}.cf_close_button{background:transparent;border-radius:4px;color:#fff;cursor:pointer;padding:5px;position:absolute;right:15px;top:10px;transition:.1s}.cf_close_button:hover{background:#3b3b3b}.cf_error_container button{background:transparent;border:1px solid #000;border-radius:4px;color:#000;cursor:pointer;font-family:sans-serif;font-weight:700;margin:5px;padding:14px 22px}.cf_error_container p{color:#000;font-family:sans-serif;font-size:14px;margin:20px}.cf_error_container{align-items:flex-start;background:#ffa640;border-radius:4px;display:none;justify-content:space-between;margin:auto auto 8px;text-align:left;width:500px}.cf_logo{margin:0 auto;width:41px}


const localeStrings = {
ar: {
challengeTitle: 'خطوة واحدة إضافية',
challengeSubtitle: 'يُرجى إكمال فحص الأمان للمتابعة',
sessionId: 'مُعرّف الجلسة',
ipAddress: 'عنوان IP',
},
de: {
challengeTitle: 'Ein letzter Schritt',
challengeSubtitle: 'Bitte führe eine Sicherheitskontrolle aus, um fortzufahren.',
sessionId: 'Sitzungs-ID',
ipAddress: 'IP-Adresse',
},
en: {
challengeTitle: 'One More Step',
challengeSubtitle: 'Please complete a security check to continue',
sessionId: 'Session ID',
ipAddress: 'IP Address',
},
'es-ES': {
challengeTitle: 'Un paso más',
challengeSubtitle: 'Completa el control de seguridad para continuar',
sessionId: 'ID de sesión',
ipAddress: 'Dirección IP',
},
'es-MX': {
challengeTitle: 'Un paso más',
challengeSubtitle: 'Completa el control de seguridad para continuar',
sessionId: 'ID de sesión',
ipAddress: 'Dirección IP',
},
fr: {
challengeTitle: 'Encore une étape',
challengeSubtitle: "Remplissez l'enquête de sécurité pour continuer",
sessionId: 'ID de session',
ipAddress: 'Adresse IP',
},
it: {
challengeTitle: 'Ancora un passo da compiere',
challengeSubtitle: 'Completa un controllo di sicurezza per continuare',
sessionId: 'ID della sessione',
ipAddress: 'Indirizzo IP',
},
ja: {
challengeTitle: 'あともう1ステップ',
challengeSubtitle: '継続するにはセキュリティチェックを完了してください',
sessionId: 'セッションID',
ipAddress: 'IPアドレス',
},
ko: {
challengeTitle: '한 단계가 더 남았습니다',
challengeSubtitle: '계속하려면 보안 검사를 완료해주세요',
sessionId:  '세션 ID',
ipAddress: 'IP 주소',
},
pl: {
challengeTitle: 'Jeszcze jeden krok',
challengeSubtitle: 'Przeprowadź kontrolę bezpieczeństwa, by kontynuować',
sessionId: 'Identyfikator sesji',
ipAddress: 'Adres IP',
},
'pt-BR': {
challengeTitle: 'Mais uma etapa',
challengeSubtitle: 'Complete uma verificação de segurança para continuar',
sessionId: 'ID da sessão',
ipAddress: 'Endereço IP',
},
ru: {
challengeTitle: 'Ещё один шаг',
challengeSubtitle: 'Перед тем как продолжить, завершите проверку безопасности',
sessionId: 'Идентификатор сеанса',
ipAddress: 'IP-адрес',
},
th: {
challengeTitle: 'อีกขั้นตอนเดียวเท่านั้น',
challengeSubtitle: 'โปรดทำการตรวจสอบความปลอดภัยให้เสร็จเพื่อดำเนินการต่อ',
sessionId: 'ID เซสชัน',
ipAddress: 'ที่อยู่ IP',
},
tr: {
challengeTitle: 'Son Bir Adım Daha',
challengeSubtitle: 'Devam etmek için lütfen bir güvenlik kontrolünü tamamla',
sessionId: 'Oturum NO',
ipAddress: 'IP Adresi',
},
'zh-CN': {
challengeTitle: '再进行一步操作',
challengeSubtitle: '请完成安全检查以继续',
sessionId: '会话 ID',
ipAddress: 'IP 地址',
},
'zh-TW': {
challengeTitle: '再一個步驟',
challengeSubtitle: '請完成安全性確認以繼續',
sessionId: '階段 ID',
ipAddress: 'IP 位址',
}
}

const getLocaleStrings = (locale = 'en') => {
switch (locale.toLowerCase()) {
case 'ar':
return localeStrings.ar;
case 'de-de':
case 'de':
return localeStrings.de;
case 'en-us':
case 'en':
return localeStrings.en;
case 'es-es':
return localeStrings["es-ES"];
case 'es-mx':
return localeStrings["es-MX"];
case 'fr':
case 'fr-fr':
return localeStrings.fr;
case 'it':
case 'it-it':
return localeStrings.it;
case 'ja':
case 'ja-jp':
return localeStrings.ja;
case 'ko':
case 'ko-kr':
return localeStrings.ko;
case 'pl':
return localeStrings.pl;
case 'pt':
case 'pt-br':
return localeStrings["pt-BR"];
case 'ru':
case 'ru-ru':
return localeStrings.ru;
case 'th':
return localeStrings.th;
case 'tr':
return localeStrings.tr;
case 'zh':
case 'zh-cn':
return localeStrings["zh-CN"];
case 'zh-tw':
return localeStrings["zh-TW"]
default: {
const hyphIndex = locale.indexOf('-');
const localeSub = locale.substring(0, hyphIndex);
if (hyphIndex > -1) {
return getLocaleStrings(localeSub);
} else {
return localeStrings.en;
}
}
}
}

document.addEventListener("DOMContentLoaded", function () {
const els = document.querySelectorAll('[data-t]');
els.forEach((el) =>  {
const tKey = el.getAttribute('data-t');
const locale = window.navigator.language;
const loc = getLocaleStrings(locale);
el.innerText = loc[tKey];
})
});








Подробнее здесь: [url]https://stackoverflow.com/questions/76930650/i-have-a-problem-with-python-web-scraping-code[/url]

Вернуться в «Python»