【问题标题】:how to extract data from autocomplete box with selenium python如何使用 selenium python 从自动完成框中提取数据
【发布时间】:2014-09-13 17:20:52
【问题描述】:

我正在尝试从搜索框中提取数据,您可以在 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 代码的行,则该框的代码将显示在文件末尾。但是由于某种原因,我无法使用上面的代码从中提取数据?我必须错过一些东西,因为我尝试了 2 个不同的来源,维基百科页面只是我无法提取这些数据的另一个来源。 这里有什么建议吗?谢谢!

【问题讨论】:

    标签: python selenium xpath web-scraping scrapy


    【解决方案1】:

    不要传递.page_source,在您的情况下它包含一个空的suggestions div,而是获取元素的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
    

    请注意,最好使用 selenium Waits 功能等待元素可访问/可见,请参阅:

    另外,请注意HtmlXPathSelector 已弃用,请改用Selector

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 2019-12-15
      • 2016-09-20
      • 2017-07-30
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      相关资源
      最近更新 更多