如何用Selenium Python提取自动完成功能的数据
我正在尝试从一个搜索框中提取数据,你可以在维基百科上看到一个很好的例子。
这是我的代码:
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 个回答
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
另外,建议使用 selenium 的 Waits
功能,来等待元素变得可访问或可见,具体可以参考:
同时要注意,HtmlXPathSelector
已经不再推荐使用,建议改用 Selector
。