2016-03-25 6 views
0

Ich bin völlig neu im Web Scraping. Ich versuche, das Code-Snippet in dieser Frage Web Scraper for dynamic forms in pythonKein Wert aus der Dropdown-Liste mit Python Mechanize beim Scrappen einer dynamischen Webseite abgerufen

zu folgen Ich mache eine ähnliche Suche mit . Geben Sie den Namen der Provinz, der Stadt und der Klasse ein und suchen Sie nach dem Zeitplan.

Aber ich bin mit dem ersten Schritt stecken, eine Liste der Provinzen Abrufen

#!/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') 

Aber es scheint, dass ich nicht einmal etwas aus der Dropdown-Liste

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

bekommen Aber wenn ich das prüfen Element auf der Webseite, eindeutig gibt es Werte in der ersten Dropdown-Liste

<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> 

Warum ctl.get_items() hat nichts zurückgegeben? Alle Hinweise werden sehr geschätzt.

Antwort

0

Wie Sie sehen können, wenn Sie Quelle in Firefox anzeigen, sind die Elemente, die Sie suchen, nicht in der ursprünglichen HTML-Markup vom Server gesendet. Tatsächlich werden sie nach dem Laden der Seite durch ein JavaScript hinzugefügt. Mechanize führt kein JavaScript aus, daher kann es diese Elemente nicht sehen; Es sieht nur, was im HTML ist.

Abgesehen davon ist diese völlig unnötige Verwendung von JavaScript eine Plage für moderne Web-Entwicklung und macht Dinge wie Sie versuchen, viel härter zu tun, als sie sein sollten. (Aber dann, vielleicht deshalb tun sie es.)

Wie auch immer, um diese Informationen von der Seite zu kratzen, müssen Sie etwas verwenden, das tatsächlich die Seite in einem echten Webbrowser wie Selen lädt. Die andere von Ihnen verknüpfte SO-Frage unterscheidet sich, da die Zielwebsite bei der Auswahl aus den Menüs tatsächlich einen HTTP-POST sendet und eine ganz neue HTTP-Seite zurück empfängt. Diese Seite macht das nicht.

Verwandte Themen