【python爬蟲(chóng)demo存檔】爬取全國(guó)省份編碼和DataV.GeoAtlas抽取全國(guó)GeoJSON數(shù)據(jù)

需求

開(kāi)始是需要把省份的名稱(chēng)浆洗,省份編碼經(jīng)緯度導(dǎo)入數(shù)據(jù)庫(kù)消约,為后面接口提供數(shù)據(jù)逢勾。
需要爬取的經(jīng)緯度地址:(因?yàn)殚_(kāi)始就找到這個(gè))

思路

先通過(guò)WebDriver把頁(yè)面爬取下來(lái)邑跪,然后觀察結(jié)構(gòu)解析需要的表格部分高职,最后把爬取下來(lái)的數(shù)據(jù)用excel保存再導(dǎo)入數(shù)據(jù)庫(kù)

前期準(zhǔn)備:

  1. 安裝Selenium WebDriver
    pip install selenium
    Selenium WebDriver提供了各種語(yǔ)言的編程接口钩乍,來(lái)進(jìn)行Web自動(dòng)化開(kāi)發(fā)。
    安裝完成后怔锌,運(yùn)行python解釋器寥粹,執(zhí)行命令import selenium变过,如果沒(méi)有異常,則表示安裝成功了排作,如下所示
    image.png
  2. 下載瀏覽器的驅(qū)動(dòng)
    chrom瀏覽器的web driverchromedriver.exe)牵啦,可以在下面網(wǎng)址訪問(wèn):
    http://npm.taobao.org/mirrors/chromedriver/

firefox(火狐瀏覽器)的web driver (geckodriver.exe)在這里訪問(wèn):
https://github.com/mozilla/geckodriver/releases

其他瀏覽器驅(qū)動(dòng)可以見(jiàn)下面列表:

Edge:https://developer.microsoft.com/en-us/micrsosft-edage/tools/webdriver

Safari:https://webkit.org/blog/6900/webdriver-support-in-safari-10/

下載對(duì)應(yīng)版本:


image.png
  1. 下載BeautifulSoup
    BeautifulSoup4是一個(gè)HTML/XML的解析器,主要的功能是解析和提取HTML/XML的數(shù)據(jù)妄痪。和lxml庫(kù)一樣哈雏。
    BeautifulSoup4用來(lái)解析HTML比較簡(jiǎn)單,API使用非常人性化衫生,支持CSS選擇器裳瘪,是Python標(biāo)準(zhǔn)庫(kù)中的HTML解析器,也支持lxml解析器罪针。
    pip install beautifulsoup4

  2. 下載openpyxl
    OpenPyXl是一個(gè)Python的模塊 可以用來(lái)處理excle表格
    安裝:
    直接 pip install openpyxl就可以

實(shí)現(xiàn)步驟

  1. 先引入需要模塊
from selenium import webdriver
from bs4 import BeautifulSoup
from openpyxl.workbook import Workbook
from openpyxl.writer.excel import ExcelWriter
  1. 指定chrom驅(qū)動(dòng)頁(yè)面最大化
driver = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe") # 這是我的驅(qū)動(dòng)地址自己改改
driver.maximize_window()
  1. get 方法 打開(kāi)指定網(wǎng)址
driver.get(
    "https://blog.csdn.net/abcmaopao/article/details/79554904")
html = driver.execute_script("return document.documentElement.outerHTML")
  1. 通過(guò)beautifulSoup解析
    使用BeautifulSoup類(lèi)解析這段代碼彭羹,獲取一個(gè)BeautifulSoup的對(duì)象,然后按照標(biāo)準(zhǔn)格式輸出泪酱。
soup = BeautifulSoup(html, 'lxml')
  1. 獲取市級(jí)的excel表格
if(soup):
    # 創(chuàng)建工作簿獲取當(dāng)前工作表sheet然后取個(gè)名字
    wb = Workbook()
    ws = wb.active
    ws.title = u'省份經(jīng)緯度'
  # list用來(lái)保存數(shù)據(jù)
    list=[]
  # 遍歷表的的每一行派殷,然后把每一行的每一列變成一個(gè)數(shù)組
  # 再把這個(gè)數(shù)組壓入list中
    for tr in soup.find_all('tr'):
        col = []
        for td in tr.find_all('td'):
            col.append(td.get_text())
            # ws.cell(row=i, column=j).value = td.get_text()
        list.append(col)
    print(list)
# 輸出看看然后導(dǎo)入excel表格
    i = 0
    for r in list:
        if(i==0):
            j = 0
            for c in r:
                ws.cell(row=i+1, column=j+1).value = c
                print(i,j,c)
                j += 1
            i += 1
        elif(i>0 and int(r[1])%10000!=0):
            j = 0
            for c in r:
                ws.cell(row=i+1, column=j+1).value = c
                print(i,j,c)
                j += 1
            i += 1
# 保存
    wb.save('市級(jí).xlsx')
    print("保存成功!")
    driver.quit()
image.png

保存出來(lái)的表結(jié)構(gòu)

完整代碼

from selenium import webdriver
import time
from bs4 import BeautifulSoup
from openpyxl.workbook import Workbook
from openpyxl.writer.excel import ExcelWriter


driver = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
driver.maximize_window()

driver.get(
    "https://blog.csdn.net/abcmaopao/article/details/79554904")
html = driver.execute_script("return document.documentElement.outerHTML")

soup = BeautifulSoup(html, 'lxml')
if(soup):
    wb = Workbook()
    ws = wb.active
    ws.title = u'省份經(jīng)緯度'
    list=[]
    for tr in soup.find_all('tr'):
        col = []
        for td in tr.find_all('td'):
            col.append(td.get_text())
            # ws.cell(row=i, column=j).value = td.get_text()
        list.append(col)
    print(list)
    i = 0
    for r in list:
        if(i==0):
            j = 0
            for c in r:
                ws.cell(row=i+1, column=j+1).value = c
                print(i,j,c)
                j += 1
            i += 1
        elif(i>0 and int(r[1])%10000!=0):
            j = 0
            for c in r:
                ws.cell(row=i+1, column=j+1).value = c
                print(i,j,c)
                j += 1
            i += 1

        # j += 1
        # i+=1

    wb.save('市級(jí).xlsx')
    print("保存成功墓阀!")
    driver.quit()

抽取全國(guó)各省市的DataV.GeoAtlas json地圖數(shù)據(jù)

然后現(xiàn)在需要把[全國(guó)地圖json api] (http://datav.aliyun.com/tools/atlas/#&lat=30.316551722910077&lng=104.20306438764393&zoom=3.5) 下載到本地毡惜,但這次要省級(jí)的
一樣的思路把省級(jí)的行政編碼爬取下來(lái)

image.png

也就是把elif(i>0 and int(r[1])%10000!=0):改成elif(i>0 and int(r[1])%10000==0):

然后這次變成讀取每一個(gè)省份的編碼,動(dòng)態(tài)爬取json保存

完整代碼

from openpyxl.workbook import Workbook
from openpyxl  import load_workbook

def getJson(code):
    path = "https://geo.datav.aliyun.com/areas/bound/geojson?code="
    driver.get(path + code+'_full')
    html = driver.execute_script("return document.documentElement.outerHTML")
    soup = BeautifulSoup(html, 'lxml')
    print(soup.get_text())
    if (soup.get_text()):
        f = open(code + '_full.json', 'w',encoding='utf-8')
        f.write(soup.get_text())
        f.close()
        print("保存成功" + code)

driver = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
driver.maximize_window()
code = "100000"
getJson(code)
wb = load_workbook('test1.xlsx')["省份經(jīng)緯度"]
print(wb.rows)
list=[]
i = 0
for row in wb.rows:
    if(i>0):
        chil = []
        print(row[1].value)
        code = row[1].value
        getJson(code)
    i += 1

driver.quit()

參考

openpyxl 使用
Selenium WebDriver
beautifulSoup
阿里地圖api

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末斯撮,一起剝皮案震驚了整個(gè)濱河市经伙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌勿锅,老刑警劉巖帕膜,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異溢十,居然都是意外死亡垮刹,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)张弛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)危纫,“玉大人,你說(shuō)我怎么就攤上這事乌庶≈值” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵瞒大,是天一觀的道長(zhǎng)螃征。 經(jīng)常有香客問(wèn)我,道長(zhǎng)透敌,這世上最難降的妖魔是什么盯滚? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任踢械,我火速辦了婚禮,結(jié)果婚禮上魄藕,老公的妹妹穿的比我還像新娘内列。我一直安慰自己,他們只是感情好背率,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布话瞧。 她就那樣靜靜地躺著,像睡著了一般寝姿。 火紅的嫁衣襯著肌膚如雪交排。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,598評(píng)論 1 305
  • 那天饵筑,我揣著相機(jī)與錄音埃篓,去河邊找鬼。 笑死根资,一個(gè)胖子當(dāng)著我的面吹牛架专,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播玄帕,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼部脚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了桨仿?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤案狠,失蹤者是張志新(化名)和其女友劉穎服傍,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體骂铁,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吹零,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拉庵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灿椅。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖钞支,靈堂內(nèi)的尸體忽然破棺而出茫蛹,到底是詐尸還是另有隱情,我是刑警寧澤烁挟,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布婴洼,位于F島的核電站,受9級(jí)特大地震影響撼嗓,放射性物質(zhì)發(fā)生泄漏柬采。R本人自食惡果不足惜欢唾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望粉捻。 院中可真熱鬧礁遣,春花似錦、人聲如沸肩刃。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)树酪。三九已至浅碾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間续语,已是汗流浹背垂谢。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疮茄,地道東北人滥朱。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像力试,于是被迫代替她去往敵國(guó)和親徙邻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容