python爬蟲 12306獲取列車座位資訊

2021-09-27 03:57:23 字數 4489 閱讀 2469

主要核心**:

get_citycode.py

import requests

def get_city():

target = ""

req = requests.get(url=target)

station_names = req.text

station_names_new = station_names.replace("var station_names ='", "").split("@")

del station_names_new[0]

station_names_new[-1] = station_names_new[-1].replace("';", "")

number = len(station_names_new)

for i in range(0, number, 1):

station_names_new[i] = station_names_new[i].split("|")

station = {}

for j in range(0, number, 1):

station[station_names_new[j][1]] = station_names_new[j][2]

return station

if __name__ == "__main__":

print(get_city()['鄭州'])

get_ticketinfo.py

import requests

import get_url

import re

import get_citycode

from prettytable import prettytable

def city_code_name():

"""字典鍵值互換

前提:鍵值唯一

返回互換後的字典

"""city_code = get_citycode.get_city().copy()

code_name = dict(zip(city_code.values(), city_code.keys()))

return code_name

def get_ticket_info():

"""re.sub(pattern, replace, string, count=0, flags=0)

pattern : 正則中的模式字串。replace : 替換的字串,也可為乙個函式。

string : 要被查詢替換的原始字串。

count : 模式匹配後替換的最大次數,預設 0 表示替換所有的匹配。

flags : 標誌位,用於控制正規表示式的匹配方式,如:是否區分大小寫,多行匹配等等。

"""data = requests.get(url=get_url.geturl())

data1 = re.findall("\[.*\]", data.text)

'''data1是乙個列表,格式為['["1","2","3"]']'''

data2 = data1[0]

"""data2是個字串,暈死!!!"""

data3 = data2.replace("[", "").replace("]", "").split(",")

"""split 返回乙個元組"""

number = len(data3)

# 車次數量

"""format:

*|預訂|*|車次|*|*|起始站|終點站|出發時間|到達時間|歷時|*|*|*|*|*|*|*|*|*||高階軟臥||軟臥一等臥|||無座||

0| |2| |4,5 | |11-19| 20| 22 24 25 27

硬臥二等座|硬座|二等座|一等座|商務座特等座|動臥|*|*|*|*|*

|34 35 36 37 38

"""del_list = [0, 2, 4, 5, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 25, 27, 34, 35, 36, 37, 38]

del_number = len(del_list)

c = 0

for x in range(del_number):

del_list[x] = del_list[x] - c

c = c + 1

for i in range(number):

data3[i] = data3[i].split("|")

for j in range(del_number):

del data3[i][del_list[j]]

# 在迭代的過程中每刪除乙個元素,接下來將要刪除的元素下標要減一,注意!

"""format:

|預訂|車次|起始站|終點站|出發時間|到達時間|歷時|高階軟臥|軟臥一等臥|無座|硬臥二等座|硬座|二等座|一等座|商務座特等座|動臥|

senior soft sleeper|soft sleeper first bedroom|no seat|hard sleeper second seat|hard seat|second class seat|

first class seat|business seat special seat|moving bedroom|

"""finally_data = data3

train_numbers = len(finally_data)

start_station_key = # 起始站

to_station_key = # 終點站

start_time = # 出發時間

to_time = # 到達時間

cost_time = # 歷時

train_code = # 車次

senior_soft = # 高階軟臥

soft_first = # 軟臥一等臥

no_seat = # 無座

hard_second = # 硬臥二等座

hard_seat = # 硬座

second_seat = # 二等座

first_seat = # 一等座

business_seat = # 商務座

moving_sleep = # 動臥

tips = # 提示資訊

for i in range(train_numbers):

"""輸出格式:

車次 出發站 到達站 出發時間 到達時間 歷時 商務座 一等座 二等座 高階軟臥 軟臥 動臥 硬臥 硬座 無座 備註

"""table = prettytable()

"""prettytable庫:

快捷建立**並列印輸出;

安裝:pip install prettytable

匯入:from prettytable import prettytable

建立:x = prettytable()

"""table.add_column("車次", train_code)

table.add_column("出發站", start_station_key)

table.add_column("到達站", to_station_key)

table.add_column("出發時間", start_time)

table.add_column("到達時間", to_time)

table.add_column("歷時", cost_time)

table.add_column("商務座", business_seat)

table.add_column("一等座", first_seat)

table.add_column("二等座", second_seat)

table.add_column("高階軟臥", senior_soft)

table.add_column("軟臥", soft_first)

table.add_column("動臥", moving_sleep)

table.add_column("硬臥", hard_second)

table.add_column("硬座", hard_seat)

table.add_column("無座", no_seat)

table.add_column("備註", tips)

print(table)

寫到這裡吧,gui部分就不上傳了。

Python爬蟲學習 一 12306餘票資訊爬取

1.12306有反爬取機制,餘票資訊是在網頁就緒以後非同步載入出來的,首先我們可以開啟谷歌瀏覽器找到,找到中間請求的url,例如餘票檢索按鈕單擊的時候 由上圖可知,餘票資訊是放在result裡面的 2.取得這些資料 req urllib.request.request html req.add he...

python 爬蟲(7) 驗證碼登陸 12306

登陸乙個介面需要使用者名稱 密碼 還有驗證碼。驗證碼的辨識,一般都是第三方,且需要付費的。比如雲打碼,打碼兔,超級鷹。12306用的是超級鷹。得到驗證碼 1.訪問網頁 3.儲存到本地 4.識別驗證碼 得到字串或者數字 from lxml import etree import requests he...

Python 爬蟲(獲取小說)

以 筆趣閣 為例 需求 python3版本以上 安裝方法如下 先安裝python3 pip,然後檢查下版本,如果版本可以公升級,就 upgrade pip 一下,然後再安裝beautifulsoup4 sudo apt get install python3 pip pip3 version pip...