とJSに反応私はクラスでアンカーリンクをこすりしたい=「_ 1UoZlX」この特定のページからの検索結果から - 私は私が検索することを実現したページからスープを作成したときhttps://www.flipkart.com/search?as=on&as-pos=1_1_ic_sam&as-show=on&otracker=start&page=6&q=samsung+mobiles&sid=tyy%2F4ioスクレーピング要素はBeautifulSoup
結果はReact JSを使用してレンダリングされているため、ページソース(またはスープ)でそれらを見つけることができません。ここで
は私のコードは、これは私が得ているエラーです
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
listUrls = ['https://www.flipkart.com/search?as=on&as-pos=1_1_ic_sam&as-show=on&otracker=start&page=6&q=samsung+mobiles&sid=tyy%2F4iof']
PHANTOMJS_PATH = './phantomjs'
browser = webdriver.PhantomJS(PHANTOMJS_PATH)
urls=[]
for url in listUrls:
browser.get(url)
wait = WebDriverWait(browser, 20)
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "_1UoZlX")))
soup = BeautifulSoup(browser.page_source,"html.parser")
results = soup.findAll('a',{'class':"_1UoZlX"})
for result in results:
link = result["href"]
print link
urls.append(link)
print urls
です。
Traceback (most recent call last):
File "fetch_urls.py", line 19, in <module>
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "_1UoZlX")))
File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/support/wait.py", line 80, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
Screenshot: available via screen
ページではJavaScriptを処理するために、セレンを使用する方法があることをthis answerで述べた誰か。誰かがそれについて詳しく説明できますか?私はいくつかのグーグルを行ったが、この特定の場合に有効なアプローチを見つけることができませんでした。
私はヘッドレスブラウザを使用しています。それが理由かもしれません。通常のブラウザで試してみます。 – dontpanic
ヘッドレスブラウザが正常に動作するはずです。通常のブラウザでは出力が見やすくなります。問題が解決したら、通常のブラウザに切り替えることができます。 Flipkartはほとんどの場合エラーページを開いています。スクリプトが発生するたびに[再試行]ボタンをクリックするようにしてください。 – Sriraman