以下图是咱们要爬取的数据python
找到每一个更多,而后点开。web
# 点击更多,将未显示的地址暴露出来 more_click = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'fn-more'))) for a in more_click: a.click()
当全部的更多都被点开后,光标已经挪动到了最底层的位置,这时须要咱们将光标再返回到顶部。
点击返回顶部的按钮。ide
#点击回到顶部,从头开始爬取数据 to_top = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'toTop'))) to_top.click()
而后再开始一级一级的爬取数据。性能
完整版代码ui
考虑到性能,因此是使用了协程gevent模块。spa
1 from selenium import webdriver 2 from selenium.webdriver.common.by import By 3 from selenium.webdriver.support.ui import WebDriverWait 4 from selenium.webdriver.support import expected_conditions as EC 5 import gevent 6 7 8 browser = webdriver.Ie('E:\python_server\IEDriverServer') 9 wait = WebDriverWait(browser, 10) 10 11 browser.get("https://www.dianping.com/citylist/citylist?citypage=1") 12 13 def main(): 14 15 # 点击更多,将未显示的地址暴露出来 16 more_click = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'fn-more'))) 17 for a in more_click: 18 a.click() 19 20 #点击回到顶部,从头开始爬取数据 21 to_top = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'toTop'))) 22 to_top.click() 23 24 #地区 25 adress = browser.find_elements_by_class_name('vocabulary') 26 for i in adress: 27 print(i.text) 28 29 #直辖市,港澳台 30 adress_city_name_1 = browser.find_elements_by_class_name('terms') 31 for i in adress_city_name_1: 32 print(i.text) 33 34 #地级市,县级市 35 adress_city_name_2 = browser.find_elements_by_class_name('terms-open') 36 for i in adress_city_name_2: 37 print(i.text) 38 39 browser.close() 40 41 if __name__ == '__main__': 42 gevent.joinall([ 43 gevent.spawn(main), 44 ])
结果部分截图code