这是我写的一个爬去全国高校坐标信息的一个代码,是自己第一个爬虫代码
1、收集全国高校名称数据:
http://www.sohu.com/a/233187646_507611
进入网址,复制粘贴所有的高校名单数据,建立 TXT 文件
2、 python 代码实现:
在地图中
我们发现有几个注意的地方:
(1):输入北京大学的输入框,也就是 input , input1
(2):百度一下 的点击框,submit , submit
(3):坐标A, submit1 , subnit3
(4):点击更换城市之后的输入框, input2
(5):input2 之后,点击确定的 submit2
# 引入库
from selenium import webdriver
from pyquery import PyQuery as pq
import pymongo
from config import *
import time
import csv
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from multiprocessing import Pool
# 打开浏览器和百度地图网址
browser = webdriver.Chrome()
url = ('http://api.map.baidu.com/lbsapi/getpoint/index.html?qq-pf-to=pcqq.c2c')
wait = WebDriverWait(browser, 0.2)
# 定义获取坐标函数
def get_coordinate():
n = 0
# 打开制作好的 txt 文件
controlFile = open("/home/yiyang/PycharmProj"
+"ects/Coordinate/universtylist.txt", "r")
# 遍历 txt 文件中的元素并附值
lstcon = controlFile.readlines()
for point in lstcon:
n = n+1
try:
Isvalue = point.split(",")
ID = str(Isvalue[0])
number = str(Isvalue[1])
office = str(Isvalue[2])
city = str(Isvalue[3])
level = str(Isvalue[4])
# 打开浏览器
browser.get(url)
# 定位网址中的输入框
input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#localvalue')))
# 定位点击搜索框
submit = wait.until(EC.presence_of_element_locate((By.CSS_SELECTOR, '#localsearch')))
# 清空输入框中的变量
input.clear()
# 传入高校名称变量
input.send_keys(ID)
# 点击搜索
submit.click()
time.sleep(1)
# 获取坐标信息
submit1 = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#no_0 > a')))
submit1.click()
# 解析网页
html = browser.page_source
doc = pq(html)
# 将获取的信息建立字典
product = {
'name': ID,
'number': number,
'office': office,
'city': city,
'level': level,
'coordinate': doc('#pointInput').attr('data-clipboard-text')
}
except EnvironmentError:
# 出错原因是百度地图不能自动切换学校所在地
# 所以我们要人为的切换
# 定位学校地址输入城市框
input1 = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#localvalue')))
input1.clear()
input1.send_keys(ID)
# 点击更换城市的 submit1
submit1 = wait.until(EC.presence_of_element_locate((By.CSS_SELECTOR, '#curCityText')))
submit1.click()
input2 = wait.until(EC.presence_of_elem的ent_locate((By.CSS_SELECTOR, '#selCityInput')))
submit2 = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#selCityButton')))
input2.clear()
input2.send_keys(city)
submit2.click()
# 点击搜索
time.sleep(2)
submit = wait.until(EC.presence_of_element_locate((By.CSS_SELECTOR, '#localsearch')))
submit.click()
time.sleep(3)
# 点击第一个选择目标
submit3 = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#no_0 > a')))
submit3.click()
# 解析网页
html = browser.page_source
doc = pq(html)
product = {
'name': ID,
'number': number,
'office': office,
'city': city,
'level': level,
'coordinate': doc('#pointInput').attr('data-clipboard-text')
}
print(n, product)
controlFile.close()
# 将建立的 product 字典存入 CSV 文件
with open('/home/yiyang/PycharmProjects/'+
'Coordinate/universtylist.csv', 'a',encoding = 'GBK') as csvfile:
fieldnames = ['name', 'number', 'office', 'city', 'level', 'coordinate']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writerow(product)
csvfile.close()
if __name__ == "__main__":
get_coordinate()
3、思维导图