2016-09-14 9 views
-3

私はcnetページからユーザーレビューを掻き集めようとしています。ユーザの賛否両論が情報をレビューする。 (http://www.cnet.com/products/samsung-galaxy-s7/user-reviews/inspect要素に表示されていてもコンテンツをスクラップできません

私はセレンを使ってページを動的に読み込みましたが、htmlソースとinspect要素のソースは異なります。私はソースコードを入手するためのリクエストも使用しています。私は両者の違いについてはわかりません。

私に回避策を教えてもらえますか?

セレンのために使用されるコード:

driver.get("http://www.cnet.com/products/samsung-galaxy-s7/user-reviews/") 
driver.wait = WebDriverWait(driver, 2) 
soup= BeautifulSoup(driver.page_source,"html.parser") 

リクエストコード:

try: 
    r = requests.get("http://www.cnet.com/products/samsung-galaxy-s7/user-reviews/", timeout = 10) 
except Exception,e: 
    print("borken") 
data = r.text 
soup = BeautifulSoup(data) 

PS:私は、スタックオーバーフローとGoogleで検索を行いましたが、私は働いて答えを見つけることができませんでした。誰かが私にリンクを与えることができるなら、それはまた役に立つでしょう。

+0

あなたはこれまでのコードを表示できますか? – alecxe

答えて

0

このページにはかなりのJavaScriptが含まれているため、すべてのコンテンツを読み込むためにセレンを使用するのが最善の方法でしょう。あなたの現在のコードでは、時間が足りないかもしれない2秒しか待ちません。コメントセクションの要素が完全に読み込まれたときに返される明示的な待機を使用することをお勧めします。

ここで良い説明と例があります:http://selenium-python.readthedocs.io/waits.html

それは、コメントブロックの各フォーム

<article class= "fyre-comment-article fyre-comment-source-0"..../> 

を持っているようなので、あなたがこのような上記のリンクから例を修正することにより開始することができます見えます:私は現在のマシンでこのコードを実際に実行する能力がありませんので、リンクからコードを変更する方法の例として使用してください。http://selenium-python.readthedocs.io/locating-elements.html

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 

driver = <yourdriver> 
driver.get("http://www.cnet.com/products/samsung-galaxy-s7/user-reviews/") 
try: 
    element = WebDriverWait(driver, 10).until(
     EC.presence_of_all_elements_located((By.XPATH, 
     '//article[class="fyre-comment-article fyre-comment-source-0"]')) 
    ) 
finally: 
    driver.quit() 
関連する問題