现在需要高中的地址。高中是用Excel表格存着的,名字统一在第一列,可以有多个表格。
利用高德地图自动查询并存储
当时学了一些selenium的使用和对Excel的操作 然后写了一下:
合理使用,当时可能 搜索的过于频繁,网页会出验证,然后只能就会退出重进重新访问。
from selenium import webdriver
from selenium.webdriver import ActionChains
import xlrd
import xlwt
from selenium.webdriver.common.keys import Keys
import time
import random
addr=input('输入表格的路径:')
browser=webdriver.Chrome()
browser.get('https://www.amap.com')
# 进入高德地图
xx=browser.find_element_by_id('searchipt')
# 创建一个新的表格
print('准备创建一个新Excel表')
new_wbook=xlwt.Workbook(encoding='utf-8')
workbook=xlrd.open_workbook(addr)
print('已经打开输入的Excel表')
sheets=workbook.sheet_names()
print('获取道Excel表的所有表格名字')
# 上面获取到所有表格
for i in sheets:
s1=workbook.sheet_by_name(i)
print('此时打开表格的名字是:'+i)
# 遍历每个表格
new_wsheet=new_wbook.add_sheet(i)
print('创建新Excel表中添加了'+i+'表格')
# 创建新的表格
row=s1.nrows
col=s1.nrows
print('获得了表格的行数和列数')
# 表格的行和列
for j in range(0,row):
try:
ls=s1.row_values(j)
print('获取第'+str(j)+'行的信息')
# 遍历每行的信息
k=ls[0]
ActionChains(browser).move_to_element(xx).perform()
print('将光标移至搜索框处')
xx.clear()
print('已清空地图搜索框')
# 清空输入框
xx.click()
print('点击搜索框')
# 点击
xx.send_keys(k)
xx.send_keys(Keys.ENTER)
print('将学校名字输入并搜索')
# 输入学校名字并且回车
time.sleep(3)
ss=browser.find_element_by_class_name('poibox.poibox-normal.amap-marker')
ActionChains(browser).move_to_element(ss).perform()
ss.click()
#
print('已点进详细页')
time.sleep(random.uniform(2,2.5))
temp=browser.find_element_by_class_name('feedaddr').text#学校的地址信息
print('获取到学校的地址信息')
new_wsheet.write(j,0,label=k)#学校名字
print('将学校的名字插入到表格中')
new_wsheet.write(j,1,label=temp)
print('将学校的地址插入到表格中')
time.sleep(random.uniform(1.1,1.2))
browser.execute_script('window.scrollBy(0,-100)')
time.sleep(random.uniform(0.9,1.0))
browser.execute_script('window.scrollBy(0,100)')
except:
time.sleep(random.uniform(2,3))
browser.quit()
browser=webdriver.Chrome()
browser.get('https://www.amap.com')
xx=browser.find_element_by_id('searchipt')
time.sleep(random.uniform(2.2,6.6))
new_wbook.save('1.xls')
selenium和 requests爬虫
前几天还用requests爬虫练习,忽然碰到一个问题:F12显示的代码和Ctrl+U显示的代码(我们在程序中得到的)不一样?这就导致了无法继续用requests继续爬虫。
后来查了查可能是网页一些 东西需要动态加载,就是我们到那个位置它才开始 加载,而 requests是针对一次 加载完成。所以就要用selenium 解决了。selenium主要用于一些 动态加载网页的爬虫,当然也可以静态;requests主要是针对静态网页的 爬取。
webdriver是浏览器驱动:
----刚开始用的时候遇到了 一些问题:打不开 浏览器----》没有驱动,这得下载相应浏览器版本的驱动http://npm.taobao.org/mirrors/chromedriver/放进python的目录下;而且还要注意配置path环境变量,将浏览器的目录添加进去。
ActionChains主要用于模拟一些行为,比如移动 光标至指定位置,点击,输入,清空……的等,相关使用可以搜一下。
xlrd是用于读取 Excel表格的库
xwt是用于写Excel表格的库