2014-07-22 172 views
1

我試圖從一個搜索框,提取數據提取自動完成框的數據,你可以看到wikipedia如何與硒蟒蛇

一個很好的例子,這是我的代碼:

driver = webdriver.Firefox() 
    driver.get(response.url)     
    city = driver.find_element_by_id('searchInput') 
    city.click() 
    city.clear() 
    city.send_keys('a') 
    time.sleep(1.5) #waiting for ajax to load    
    selen_html = driver.page_source 
    #print selen_html.encode('utf-8') 
    hxs = HtmlXPathSelector(text=selen_html) 
    ajaxWikiList = hxs.select('//div[@class="suggestions"]') 
    items=[] 
    for city in ajaxWikiList: 
     item=TestItem() 
     item['ajax'] = city.select('/div[@class="suggestions-results"]/a/@title').extract() 
     items.append(item) 
    print items  

XPath表達式是好的,我檢查了一個靜態頁面。如果我取消註釋打印廢棄html代碼的行,則代碼框會顯示在文件的末尾。但出於某種原因,我無法從上面的代碼中提取數據?由於我嘗試了兩種不同的資源,所以我必須錯過一些東西,維基百科頁面只是另一個來源,我無法獲取這些數據。 此處有任何建議嗎?謝謝!

回答

1

不是傳遞而你的情況包含一個空suggestions div的,.page_source的,獲得元素的innerHTML並把它傳遞給Selector

selen_html = driver.find_element_by_class_name('suggestions').get_attribute('innerHTML') 

hxs = HtmlXPathSelector(text=selen_html) 
suggestions = hxs.select('//div[@class="suggestions-results"]/a/@title').extract() 
for suggestion in suggestions: 
    print suggestion 

輸出:

Animal 
Association football 
Arthropod 
Australia 
AllMusic 
African American (U.S. Census) 
Album 
Angiosperms 
Actor 
American football 

注意最好使用硒Waits功能來等待元素可訪問/可見,請參閱:

另外,請注意HtmlXPathSelector已被棄用,使用Selector代替。