2014-07-22 174 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代替。