При загрузке HTML-кода веб-сайта я не могу получить текст тега <p>, только сам тег <p>.Как я могу это исправить? - PullRequest
0 голосов
/ 27 декабря 2018

Недавно я экспериментировал с webscraping и использовал модуль python-запросы вместе с BeautifulSoup4.Однако в моем новом проекте я пытаюсь найти текст определенного тега <p>.Вот изображение определенного тега: enter image description here

Сайт, который я пытаюсь очистить, - https://www.adidas.com,, и когда я отправляю запрос GET на сайт и распечатываюиз текста ответа я получаю следующее:

<!DOCTYPE html><html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>YEEZY BOOST 350 V2 | adidas + KANYE WEST</title><script>window.PAGE_NAME = "yeezy-waitingroom";</script><link rel="shortcut icon" href="/wrgen_assets/favicon.ico"><link href="/wrgen_assets/906aa0ca31e9f5626ef5.css" rel="stylesheet"><script>bazadebezolkohpepadr="1471403990"</script><script type="text/javascript" src="https://www.adidas.com/akam/10/57b3d7fe" defer></script></head><body class="custom-c in-line yeezy yeezy-waitingroom"><header id="dw-header"></header><div class="kw in-line"><header class="top"><div class="inner"><figure class="logo"><a href="//www.adidas.com" target="_blank" data-url="home">adidas</a></figure><nav class="menu hidden"><ul class="menu-items"><li class="item men"><a href="#" data-url="men" data-lang="header_men_name"></a></li><li class="item women"><a href="#" data-url="women" data-lang="header_women_name"></a></li><li class="item kids"><a href="#" data-url="kids" data-lang="header_kids_name"></a></li><li class="item release-dates"><a href="#" manual_cm_sp="header-_-waiting room-_-release dates" data-url="release_dates" data-lang="header_release_dates_name"></a></li></ul></nav><aside class="ecom"><ul class="ecom-items"><li class="item my-account"><a href="#" data-url="my_account" alt="My Account"><span class="icon-user"></span></a></li><li class="item cart"><a href="#" data-url="cart" alt="Cart"><span class="icon-bag"></span></a></li></ul></aside></div></header><div id="content"><section class="section order-placed"><div class="inner order-placed"><h3 data-lang="order_placed_header"></h3><p data-lang="order_placed_description"></p><a href="#" class="btn get-updates" data-lang="product_get_updates_btn"></a></div></section><div class="actual-content"><section id="logo" class="section"><div class="inner"><h3 data-lang="waiting_room" data-auto-id="text-title"></h3><div class="status-message"><p class="uppercase" data-message-lang-key="statusMessageKey" data-auto-id="text-status-message"></p></div><p></p><div class="spinner"><div class="sk-fading-circle"><div class="sk-circle1 sk-circle"></div><div class="sk-circle2 sk-circle"></div><div class="sk-circle3 sk-circle"></div><div class="sk-circle4 sk-circle"></div><div class="sk-circle5 sk-circle"></div><div class="sk-circle6 sk-circle"></div><div class="sk-circle7 sk-circle"></div><div class="sk-circle8 sk-circle"></div><div class="sk-circle9 sk-circle"></div><div class="sk-circle10 sk-circle"></div><div class="sk-circle11 sk-circle"></div><div class="sk-circle12 sk-circle"></div></div></div><h1 class="wr11-mobile-name" data-product-info="productName"></h1><p class="wr11-mobile-price" data-product-info="priceFormatted"></p></div></section><section class="available-sizes"><div class="inner"><h1 class="uppercase" data-lang="available_sizes" data-auto-id="text-grid-message"></h1><ul></ul></div></section><section class="gallery-cart-wrapper"><div class="inner"><section id="gallery" class="section"><div class="inner owl-carousel owl-theme"></div></section><div class="wr11-right"><section id="intro" class="section"><div class="inner"><h1 class="name" data-product-info="productName" data-auto-id="text-product-name"></h1><p class="color" data-product-info="color" data-auto-id="text-product-color"></p><p class="price" data-product-info="priceFormatted" data-auto-id="text-product-price"></p><p class="no-discount uppercase" data-lang="product_no_discount" data-auto-id="text-discount"></p><p class="uppercase hidden" data-lang="product_return" data-auto-id="text-product-return"></p></div></section></div><div class="clearfix"></div></div></section></div></div><div class="feedback"><h3 data-lang="your_opinion"></h3><p data-lang="appreciate_your_feedback"></p><p id="qualtrics-feedback-footer"></p></div><footer class="bottom"><div class="inner"><ul class="links"><li class="link"><a href="#" data-url="sitemap" data-lang="footer_sitemap_name"></a></li><li class="link"><a href="#" data-url="cookies" data-lang="footer_cookies_name"></a></li><li class="link"><a href="#" data-url="privacy" data-lang="footer_privacy_name"></a></li><li class="link"><a href="#" data-url="terms" data-lang="footer_terms_name"></a></li><li class="link"><a href="#" data-url="imprint" data-lang="footer_imprint_name"></a></li></ul></div></footer><div id="consent_blackbar"></div></div><footer id="dw-footer"></footer><div id="getUpdatesModal" class="modal"><a href="#" class="close"><img src="/wrgen_assets/3229532920b3cb53141f41240544f78a.png" alt="close"></a><div class="inner"></div></div><script type="text/javascript" src="/wrgen_assets/906aa0ca31e9f5626ef5.js"></script><noscript><img src="https://www.adidas.com/akam/10/pixel_57b3d7fe?a=dD02Y2E4NDU1NmQwODM1MDcxYTk1ZjgwODdmNDYwNTFjZjg2YjViMzhiJmpzPW9mZg==" style="visibility: hidden; position: absolute; left: -999px; top: -999px;" /></noscript></body></html> <p class="uppercase" data-auto-id="text-status-message" data-message-lang-key="statusMessageKey"></p>

Я могу найти рассматриваемый тег в BS4 с помощью tag = soup.find('p', attrs={'class':'uppercase', 'data-message-lang-key':'statusMessageKey'}), но не могу найти содержимое тега.В конце концов, я быстро понял CTRL + F поиска оболочки python, что содержимое тега даже не было напечатано, поэтому мне было трудно найти текст с помощью BS4.

Чтобы получить HTML-код, который я собираю, я использовал:

s = requests.Session()
sitehtml = s.get('https://www.adidas.com/yeezy', headers=headers)
print(sitehtml.text)
soup = BeautifulSoup(sitehtml.text, 'lxml')

Имейте в виду, что в моем коде ранее были определены заголовки для запроса GET.Что еще я могу использовать помимо sitehtml.text для захвата каждой части сайта HTML, включая текст тега <p>?

1 Ответ

0 голосов
/ 27 декабря 2018

Текст, который вы пытаетесь получить, отображается через javascript.И запрос получить HTML, прежде чем любой Javascript сделать изменения.поэтому попробуйте использовать всплеск, селен или любой другой инструмент, чтобы сначала отобразить js, а затем проанализировать ответ.

...