python搜索汽車票

一恨溜、背景

利用Requests模塊獲取頁面髓霞,BeautifulSoup來獲取需要的內(nèi)容矢劲,處理并返回結(jié)果见坑。

二、代碼

git源碼地址

getinfo.py代碼如下:

#!/bin/env python
# -*- coding:utf-8 -*-
# _author:kaliarch
import re
import requests
from bs4 import BeautifulSoup

class Getinformation:
    def __init__(self):
        """init url"""
        self.init_url = 'http://www.xaglkp.com/ClassSearch/IndexPost'

    def getsoup(self):
        """:return soup"""
        response = requests.post(self.init_url)
        soup = BeautifulSoup(response.text, 'html.parser')
        return soup

    def getStartAddress(self,soup):
        """get start address dict"""
        staraddress = soup.find_all('option', text=re.compile("\w+客運站"))
        num_list = [1000]
        add_list = ["全部"]
        for num in staraddress:
            num_list.append(num['value'])
            add_list.append(num.text)
        startaddrdict = dict(zip(add_list, num_list))
        return startaddrdict

    def getStartDate(self,soup):
        """get time"""
        date = soup.find_all('option', text=re.compile("2018.*?"))
        date_list = []
        for num in date:
            date_list.append(num.text)
        return date_list

    def getStartTime(self,soup):
        """
        get start time
        :return start time list
        """
        times = soup.find_all('option', text=re.compile("\w.*?后"))
        time_list = ['05:00后']
        for num in times:
            time_list.append(num.text)
        return time_list

if __name__ == '__main__':
    test = Getinformation()
    soup = test.getsoup()
    add = test.getStartAddress(soup)
    print(add)

main.py代碼如下

#!/bin/env python
# -*- coding:utf-8 -*-
# _author:kaliarch

import getinfo
import requests
from bs4 import BeautifulSoup

oper = getinfo.Getinformation()
soup = oper.getsoup()

startdic = oper.getStartAddress(soup)
startdate = oper.getStartDate(soup)
starttime = oper.getStartTime(soup)
init_url = 'http://www.xaglkp.com/ClassSearch/IndexPost'

def getSadd():
    """get input start address"""
    print("起始站如下:")
    print("*" * 20)
    for v in startdic.keys():
        print(v)
    print("*" * 20)
    trynum = 0
    start = str(input("請輸入出發(fā)地點:"))
    while trynum < 5:
        for v in startdic.keys():
            if start == v:
                return startdic[start]
        else:
            print("輸入錯誤佑钾,還有%d次重試機會" % (5-trynum))
            start = str(input("請從新輸入出發(fā)地點:"))
        trynum += 1

def getDes():
    """get input destination address"""
    try:
        destadd = str(input("請輸入目的地:"))
        result = 1
    except Exception as e:
        print("輸入錯誤:",e)
    if result:
        return destadd

def getDate():
    """get input start date"""
    print("出發(fā)日期如下:")
    print("*" * 20)
    for date in startdate:
        print(date)
    print("*" * 20)
    trynum = 0
    date1 = str(input("請輸入出發(fā)時間:"))
    while trynum < 5:
        for i in startdate:
            if date1 == i:
                return date1
        else:
            print("輸入錯誤,還有%d次重試機會" % (5-trynum))
            date1 = str(input("請從新輸入出發(fā)時間:"))
        trynum += 1

def getTime():
    """get input start time"""
    print("出車時間如下**(05:00表示所有)**:")
    print("*" * 20)
    for time in starttime:
        print(time)
    print("*"*20)
    trynum = 0
    time1 = str(input("請輸入發(fā)車時間(05:00表示所有):"))
    while trynum < 5:
        for i in starttime:
            if time1 == i:
                return time1.split('后')[0]
        else:
            print("輸入錯誤,還有%d次重試機會" % (5-trynum))
            time1 = str(input("請從新輸入發(fā)車時間(05:00表示所有):"))
        trynum += 1

def getPayData():
    """get requests paydata"""
    sadd = getSadd()
    desadd = getDes()
    sdate = getDate()
    stime = getTime()
    paydata = {
        'selected':sadd,
        'Arrive':desadd,
        'selected1':sdate,
        'selected2':stime,
        'page':'',
        'ArriveHidden':sadd,
    }
    return paydata

def getHeader():
    """get request headers"""
    header = {
        'Content-Type':'application/x-www-form-urlencoded',
        'Host':'www.xaglkp.com',
        'Referer':'http://www.xaglkp.com/ClassSearch/IndexPost',
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
    }
    return header

def get_request():
    """requests"""
    header = getHeader()
    paydata = getPayData()
    select_result = requests.post(init_url,headers=header,data=paydata)
    result_soup = BeautifulSoup(select_result.text, 'html.parser')
    result = result_soup.find_all('table')
    return result

def format_list():
    result_L = get_request()
    L1 = []
    for context in result_L:
        L1.append(context.text)
    tmp = '\n'.join(L1)
    str = tmp.replace("\n"," ")
    L2 = []
    for i2 in str.split():
        L2.append(i2)
    return L2

def title_context():
    """get title list,get context list"""
    result_L = format_list()
    print("共搜索出%d趟車!詳細信息如下:" % int(len(result_L) / 9))

    title_L = []
    title = 0
    for i in result_L[title:title + 9]:
        title_L.append(i)
    print(title_L)

    totle_L = []
    num = 9
    for i in range(0, len(result_L) // 9):

        context_L = []
        for n in result_L[num:num + 8]:
            context_L.append(n)
        print(context_L)

        totle_L.append(context_L)
        num += 8
        if i > int(len(result_L) / 9):
            exit()

if __name__ == '__main__':
    title_context()

三吨岭、效果展示

運行代碼,填寫需要信息峦树,最終返回搜索結(jié)果辣辫,后期可將其保存至excel


image

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旦事,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子急灭,更是在濱河造成了極大的恐慌姐浮,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件化戳,死亡現(xiàn)場離奇詭異单料,居然都是意外死亡,警方通過查閱死者的電腦和手機点楼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門扫尖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掠廓,你說我怎么就攤上這事换怖。” “怎么了蟀瞧?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵沉颂,是天一觀的道長。 經(jīng)常有香客問我悦污,道長铸屉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任切端,我火速辦了婚禮彻坛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘踏枣。我一直安慰自己昌屉,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布茵瀑。 她就那樣靜靜地躺著间驮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪马昨。 梳的紋絲不亂的頭發(fā)上竞帽,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機與錄音鸿捧,去河邊找鬼抢呆。 笑死,一個胖子當(dāng)著我的面吹牛笛谦,可吹牛的內(nèi)容都是我干的抱虐。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼饥脑,長吁一口氣:“原來是場噩夢啊……” “哼恳邀!你這毒婦竟也來了懦冰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤谣沸,失蹤者是張志新(化名)和其女友劉穎刷钢,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乳附,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡内地,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了赋除。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阱缓。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖举农,靈堂內(nèi)的尸體忽然破棺而出荆针,到底是詐尸還是另有隱情,我是刑警寧澤颁糟,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布航背,位于F島的核電站,受9級特大地震影響棱貌,放射性物質(zhì)發(fā)生泄漏玖媚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一婚脱、第九天 我趴在偏房一處隱蔽的房頂上張望今魔。 院中可真熱鬧,春花似錦起惕、人聲如沸涡贱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至督函,卻和暖如春嘀粱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辰狡。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工锋叨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宛篇。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓娃磺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親叫倍。 傳聞我的和親對象是個殘疾皇子偷卧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350

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