爬取大众点评地址数据

 如下图是我们要爬取的数据

 

 因为要爬取所有的地址数据,所以我们要将 更多 点开。这就涉及js操作,需要使用selenium模块。
 

找到每个更多,然后点开。

# 点击更多,将未显示的地址暴露出来
    more_click = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'fn-more')))
    for  a in more_click:
        a.click()

当所有的更多都被点开后,光标已经挪动到了最底层的位置,这时需要我们将光标再返回到顶部。
点击返回顶部的按钮。

#点击回到顶部,从头开始爬取数据
    to_top = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'toTop')))
    to_top.click()

然后再开始一级一级的爬取数据。

 

完整版代码

考虑到性能,所以是使用了协程gevent模块。

 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         ])
View Code

 

结果部分截图

 

posted @ 2017-08-09 13:43  李小六儿  阅读(650)  评论(0编辑  收藏  举报