欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Python如何爬取地鐵線路圖

這篇文章將為大家詳細講解有關Python如何爬取地鐵線路圖,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)公司是專業(yè)的果洛州網(wǎng)站建設公司,果洛州接單;提供成都網(wǎng)站設計、做網(wǎng)站,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行果洛州網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

BeautifulSoup(bs4)庫介紹

BeautifulSoup:“美味的湯,綠色的濃湯”,是一個可以從HTML或XML文件中提取數(shù)據(jù)的Python庫。BeautifulSoup提供一些簡單的、python式的函數(shù)用來處理導航、搜索、修改分析樹等功能。它是一個工具箱,通過解析文檔為用戶提供需要抓取的數(shù)據(jù),因為簡單,所以不需要多少代碼就可以寫出一個完整的應用程序。

BeautifulSoup自動將輸入文檔轉換為Unicode編碼,輸出文檔轉換為utf-8編碼。你不需要考慮編碼方式,除非文檔沒有指定一個編碼方式,這時,BeautifulSoup就不能自動識別編碼方式了。然后,你僅僅需要說明一下原始編碼方式就可以了。

可以直接使用pip安裝:

pip install BeautifulSoup

BeautifulSoup支持Python標準庫中的HTML解析器,還支持一些第三方的解析器,如,lxml,XML,html5lib等,但是需要安裝相應的庫:

pip install lxml

如果我們不安裝它,則Python會使用Python默認的解析器,lxml解析器更加強大,速度更快,推薦安裝。

接下來我們以爬取8684網(wǎng)站上的深圳地鐵線路數(shù)據(jù)為例來進行爬蟲實戰(zhàn)。

Python如何爬取地鐵線路圖

地鐵線路網(wǎng)址的獲取

首先導入庫bs4、lxml、requests:

import requests
import json
from bs4 import BeautifulSoup
import lxml.html

獲取地鐵線路網(wǎng)址

etree = lxml.html.etree
def get_urls():
    url = 'https://dt.8684.cn/so.php?k=pp&dtcity=sz&q=wedwed'
    response = requests.get(url=url)
    soup = BeautifulSoup(response.content, 'lxml').find(attrs={'class': 'fs-fdLink'})
    routes = soup.find('tr').find('td').findAll('a')# 查找所有有關的節(jié)點
    route_list = []
    for i in routes:
        per = {}
        per['key'] = i.string
        per['value'] = 'https://dt.8684.cn' + i.get('href')
        route_list.append(per)
    return route_list

其中,

soup = BeautifulSoup(response.content, 'lxml')

為創(chuàng)建BeautifulSoup對象,其意義是將發(fā)送網(wǎng)絡請求返回的響應數(shù)據(jù)創(chuàng)建為soup對象,數(shù)據(jù)格式為lxml。

具體線路下線路數(shù)據(jù)的獲取

def get_schedule(url):
    response = requests.get(url['value'])
    soup = BeautifulSoup(response.content, 'lxml').find(attrs={'class': 'ib-mn'})
    table_head = soup.find(attrs={'class': 'pi-table tl-table'})
    per_info = table_head.findAll('tr')
    route_list = []
    if (url['key'].find('內(nèi)圈') == -1 and url['key'].find('外圈') == -1):#地鐵線路名稱既無內(nèi)環(huán)也無外環(huán)
        route_info = {} #定義地鐵內(nèi)環(huán)字典
        route_info_wai = {}#定義地鐵外環(huán)字典
        stations_nei = [] #定義地鐵內(nèi)環(huán)站臺列表
        route_info['name'] = url['key'] + '內(nèi)環(huán)'#定義內(nèi)環(huán)線路字典name鍵的值
        route_info_wai['name'] = url['key'] + '外環(huán)'# 定義外環(huán)線路字典name鍵的值
        time_nei_1 = []#定義地鐵內(nèi)環(huán)發(fā)車時間列表
        time_nei_2 = []#定義地鐵內(nèi)環(huán)收班時間列表
        time_wai_1 = [] #定義地鐵外環(huán)發(fā)車時間列表
        time_wai_2 = []# 定義地鐵外環(huán)收班時間列表
        for i in per_info:
            if (i != []):
                j = i.findAll('td')
                if (j != []):
                    for k in j[0]:
                        stations_nei.append(k.text)#內(nèi)外環(huán)站點名
                    for k in j[3]:
                        time_nei_2.append(k)#內(nèi)環(huán)收車時間
                    for k in j[1]:
                        time_nei_1.append(k)#內(nèi)環(huán)發(fā)車時間
                    for k in j[4]:
                        time_wai_2.append(k) #外環(huán)收車時間
                    for k in j[2]:
                        time_wai_1.append(k)#外環(huán)發(fā)車時間
        try:
            if (time_nei_1[0] != '--' and time_nei_1[0] != '—'):
                route_info['startTime'] = startTime = time_nei_1[0]#篩除地鐵內(nèi)環(huán)線路發(fā)車時間為空的數(shù)值
            else:
                route_info['startTime'] = time_nei_1[1]#定義地鐵內(nèi)環(huán)線路發(fā)車時間
            if (time_nei_2[len(time_nei_2) - 1] != '--' and time_nei_2[len(time_nei_2) - 1] != '—'):
                route_info['endTime'] = time_nei_2[len(time_nei_2) - 1]#篩除地鐵內(nèi)環(huán)線路收車時間為空的數(shù)值
            else:
                route_info['endTime'] = time_nei_2[len(time_nei_2) - 2]# 定義地鐵內(nèi)環(huán)線路收車時間
            if (time_wai_1[len(time_wai_1) - 1] != '--' and time_wai_1[len(time_wai_1) - 1] != '—'):
                route_info_wai['startTime'] = time_wai_1[len(time_wai_1) - 1]# 篩除地鐵外環(huán)線路發(fā)車時間為空的數(shù)值
            else:
                route_info_wai['startTime'] = time_wai_1[len(time_wai_1) - 2]# 定義地鐵外環(huán)線路發(fā)車時間
            if (time_wai_2[0] != '--' and time_wai_2[0] != '—'):
                route_info_wai['endTime'] = startTime = time_wai_2[0]# 篩除地鐵外環(huán)線路收車時間為空的數(shù)值
            else:
                route_info_wai['endTime'] = time_wai_2[1]# 定義地鐵外環(huán)線路收車時間
        except IndexError as e:
            route_info_wai['startTime'] = '06:00'
            route_info_wai['endTime'] = '23:00'
            route_info['startTime'] = '06:00'
            route_info['endTime'] = '23:00'#若無法找到數(shù)據(jù),則捕捉索引異常錯誤,并對運行時間賦默認值

        route_info['stations'] = stations_nei #內(nèi)環(huán)線路字典stations值賦為內(nèi)環(huán)站點名
        route_info_wai['stations'] = list(reversed(stations_nei))#反轉列表值并強制轉換數(shù)據(jù)類型為列表,作為外環(huán)站點名
        route_list.append(route_info)
        route_list.append(route_info_wai)#將內(nèi)外環(huán)線路字典插入列表
    else:
    #地鐵線路名稱包含“內(nèi)環(huán)”或“外環(huán)”
        route_info = {}
        stations = []
        route_info['name'] = url['key']# 定義線路字典name鍵的值
        time_1 = [] # 定義地鐵發(fā)車時間列表
        time_2 = []#定義地鐵收車時間列表
        for i in per_info:
            if (i != []):
                j = i.findAll('td')
                if (j != []):# 篩除表頭相關空數(shù)據(jù)
                    for k in j[0]:
                        stations.append(k.text)#地鐵線路站點名
                    for k in j[1]:
                        time_1.append(k)#地鐵線路發(fā)車時間
                    for k in j[2]:
                        time_2.append(k)#地鐵線路收車時間
        if (time_1[0] != '--' and time_1[0] != '—'):
            route_info['startTime'] = startTime = time_1[0]# 篩除地鐵線路發(fā)車時間為空的數(shù)值
        else:
            route_info['startTime'] = time_1[1]#定義地鐵線路發(fā)車時間
        if (time_2[len(time_2) - 1] != '--' and time_2[len(time_2) - 1] != '—'):
            route_info['endTime'] = time_2[len(time_2) - 1]#篩除地鐵線路收車時間為空的數(shù)值
        else:
            route_info['endTime'] = time_2[len(time_2) - 2]#定義地鐵線路收車時間
        route_info['stations'] = stations# 線路字典stations值賦為站點名
        route_list.append(route_info)#將線路字典插入列表
    return route_list

其中,if語句(Part2的大部分代碼)都是用于對非常規(guī)線路數(shù)據(jù)進行特殊處理,這也印證了“80%的代碼處理20%的情況”,常規(guī)線路數(shù)據(jù)只需前六行代碼即可爬取,最終返回線路列表rout_list。

整合數(shù)據(jù)

for i in get_urls():#遍歷城市地鐵線路網(wǎng)址
    for j in get_schedule(i):
        json_str = json.dumps(j, ensure_ascii=False)
#轉換數(shù)據(jù)格式為json格式,忽略格式轉換錯誤進行強制轉換
        print(json_str)

關于“Python如何爬取地鐵線路圖”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

本文標題:Python如何爬取地鐵線路圖
鏈接分享:http://aaarwkj.com/article8/gjjcop.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設營銷型網(wǎng)站建設、網(wǎng)頁設計公司電子商務、面包屑導航、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設網(wǎng)站維護公司
日本一区二区在线高清| 国产日韩欧美亚洲中文国| 国产精品国产三级国产专播精品 | 国产精品一区二区三区播放| 麻豆人妻一区二区三区| 国产三级传媒在线观看| 欧美性生活真实的视频| 在线观看免费国产b片| 国产精品人妻在线av| 黄片在线免费观看欧美中文| 精品三级黄色国产片| 国自产偷精品不卡在线观看| 欧美日韩精品成人大片| 久久人妻精品一区二区三区| 国产欧美日韩在线高清| 俄罗斯少妇毛茸茸的高潮| 久久精品有码视频免费观看| 日韩有码大片最新自拍| 自由成熟性生活免费视频| 亚洲午夜福利理论片在线| 午夜免费福利视频一区| 亚洲不卡一区二区在线| 国产成人精品久久久亚洲| 精品国产一区二区三区性色av| 日本少妇入口一区二区| 精品免费av在线播放| 日本在线观看高清区一区二| 国产成人原创免费观看| 亚洲丰满老熟女激情av| 色欧美一区二区三区在线| 欧美一区二区国产日韩在线| 日韩精品在线免费观看了| 亚洲午夜av久久乱码| 少妇性生活视频免费观看| 蜜臀av午夜福利在线观看| 久久精品亚洲毛片美女极品| 草逼免费在线观看视频| 日本在线不卡二区三区| 最新欧美精品一区二区| 香蕉伊蕉伊中文在线视频| 国产真实内射在线观看|