2016-03-25 22 views
0

私は完全にWebをスクラップしています。私はこの質問にあるコードスニペットに従おうとしていますWeb Scraper for dynamic forms in python動的Webページのスクラップ時に、pythonがドロップダウンリストから取得した値が機械化されません

私はhttp://www.goodlifefitness.com/fitness-classes/find-a-class/と同様の検索をしています。州、市および階級の名前を入力し、スケジュールを検索します。

しかし、私は州

#!/usr/bin/env python                                         

import re 
import mechanize 
from bs4 import BeautifulSoup 

br = mechanize.Browser() 
br.open('http://www.goodlifefitness.com/fitness-classes/find-a-class/') 

br.select_form('aspnetForm') 
ctl = br.form.find_control('ctl00$Copy$ddlRegion') 

のリストを取得し、ステップ1でこだわっている。しかし、私もドロップダウンリスト

>>> items=ctl.get_items() 
>>> items 
[<Item name='' id=None selected='selected' contents='' value='' label=''>] 

から何かを得ることができない。しかし、私が調べたときと思われます最初のドロップダウンリストに値があることが明らかです

<select name="ctl00$Copy$ddlRegion" id="ctl00_Copy_ddlRegion" title="Select a Province" class="dropdown" onchange="comboBoxSearch_onChange(this);"> 

<option value="">Select a Province</option><option value="Alberta">Alberta</option><option value="British Columbia">British Columbia</option><option value="Manitoba">Manitoba</option><option value="New Brunswick">New Brunswick</option><option value="Newfoundland">Newfoundland</option><option value="Nova Scotia">Nova Scotia</option><option value="Ontario">Ontario</option><option value="Saskatchewan">Saskatchewan</option></select> 

なぜctl.get_items()は何も返されませんでしたか? すべてのポインタが高く評価されます。

答えて

0

Firefoxでソースを表示するとわかるように、探しているアイテムは、サーバーから送信された元のHTMLマークアップにはありません。実際には、ページが読み込まれた後にJavaScriptによって追加されます。 MechanizeはJavaScriptを実行しないため、これらの項目は表示されません。それはHTML内のものだけを見ています。

JavaScriptをこのように完全に使用することは、現代のWeb開発の疫病であり、必要以上に努力しているようなことになります。 (しかし、それはおそらく彼らがそれをする理由です)

とにかく、その情報をページから削り取るには、実際のWebブラウザ(Seleniumなど)に実際にページを読み込む必要があります。

あなたがリンクしている他の質問は、メニューから選択したときにターゲットサイトが実際にHTTP POSTを送信し、まったく新しいHTTPページを受け取るためです。このページはそれをしません。

関連する問題