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