1. ホーム
  2. python-3.x

[解決済み] Python 3 の requests.get でデータを取得する前にページがロードされるのを待つ

2022-02-15 08:39:32

質問

BS4で使用するためにソースを取得する必要があるページがあるのですが、ページの真ん中がコンテンツをロードするのに1秒(多分それ以下)かかり、セクションがロードされる前に request.get はページのソースを捕捉します。

r = requests.get(URL + self.search, headers=USER_AGENT, timeout=5 )
    soup = BeautifulSoup(r.content, 'html.parser')
    a = soup.find_all('section', 'wrapper')

ページ

<section class="wrapper" id="resultado_busca">

解決方法は?

待ち時間の問題ではなく、JavaScriptで要素が作成されているようです。 requests は、JavaScriptで動的に生成された要素を扱うことができません。提案としては selenium とともに PhantomJS を使ってページソースを取得すると BeautifulSoup をパースに使用する場合、以下のようなコードで正確に行うことができます。

from bs4 import BeautifulSoup
from selenium import webdriver

url = "http://legendas.tv/busca/walking%20dead%20s03e02"
browser = webdriver.PhantomJS()
browser.get(url)
html = browser.page_source
soup = BeautifulSoup(html, 'lxml')
a = soup.find('section', 'wrapper')

また .findAll もし、1つの要素だけを探しているのであれば。