2016-12-05 4 views
0

申し訳ありませんが、これは愚かな質問です。スクリプトで挿入されたdivのWebスクレイピング

私はBeautifulSoupとurllib2をpythonで使ってURLを見て、特定のクラスのすべてのdivを抽出しようとしています。しかし、chromeの開発ツールで要素を調べるときにdivを見ることはできますが、結果は常に空です。

私はページソースを見ましたが、これらのdivはスクリプトに挿入されていませんでした。だから私の質問はどのようにBeautifulsoupを使用してdiv(クラス名を使用して)を探すことができますか?私は最終的に、それらの部門の下で、輪郭を読んでフォローしたいと思います。

ありがとうございました。

[編集] 私は現在、H & Mのウェブサイトで探しています:http://www.hm.com/sg/products/ladiesと私は「製品リスト項目」クラスを持つすべてのdivを得るために興味を持って

+0

あなたはそれがJavaScriptを使用かどうかを確認するためにこすりしようとするURLを投稿することができます – Wonka

答えて

0

実行するために、セレンを使用してみてくださいJavaScriptの

from selenium import webdriver 

driver = webdriver.Firefox() 
driver.get("http://www.python.org") 
html = driver.page_source 
0

あなたが変更して、URLをすべての情報を取得することができ、チェックこのリンクenter link description here

、このリンクはで見つけることができますchrome dev tools>ネットワーク

0

あなたがその特定のURLから何も得られなかった理由は、あなたが必要とする情報がそこにないからです。

最初に、そのページがブラウザでどのように読み込まれているかを少し説明してください。そのページ(http://www.hm.com/sg/products/ladies)をリクエストすると、リテラルコンテンツは非常に最初の段階で返されますあなたのurllib2リクエスト)、ブラウザはコンテンツの読み込み/解析を開始します。基本的に、ページ全体をレンダリングするために必要なすべての情報をブラウザに表示します(レイアウトを制御するCSS、特定の領域を埋めるためのjavascript /など)、ブラウザはすべての後ろのシーンです。クロムの「要素を調べる」と、ページは既に完全に読み込まれています。必要な情報は元のURLにはないので、代わりにそのURLを参照するURLを見つける必要があります。

シーンの後ろで何が起こるかを知る必要があります。そのページが読み込まれたときにすべてのトラフィックをキャプチャするツールが必要です(fiddlerをお勧めします)。推測によるので

traffic captured by fiddler

あなたが見ることができるように、ブラウザでそのページを開くと、物事の多くは!起こる(そしてそれは全体のページ読み込みプロセスの一部のみです)、あなたがすべき必要のある情報これらの3つの "api.hm.com"リクエストのうちの1つになることが最も重要なのは、JSON形式のJSON形式なので、BeautifulSoupを気にしないかもしれないということです。組み込みのjsonモジュールが機能します。

今、何ですか?これらの要求をシミュレートし、必要なものを得るには、urllib2を使用してください。

P.S. requestsはこの種の仕事に最適なツールです。hereを入手できます。

0

はこの方法を試してください。

from bs4 import BeautifulSoup 
import urllib2 
page = urllib2.urlopen("http://www.hm.com/sg/products/ladies") 

soup = BeautifulSoup(page.read(),'lxml') 

scrapdiv = open('scrapdiv.txt','w') 

product_lists = soup.findAll("div",{"class":"o-product-list"}) 
print product_lists 
for product_list in product_lists: 
    print product_list 
    scrapdiv.write(str(product_list)) 
    scrapdiv.write("\n\n") 
scrapdiv.close() 
関連する問題