午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    python實現(xiàn)的一個火車票轉(zhuǎn)讓信息采集器
    來源:易賢網(wǎng) 閱讀:1201 次 日期:2014-07-11 19:14:10
    溫馨提示:易賢網(wǎng)小編為您整理了“python實現(xiàn)的一個火車票轉(zhuǎn)讓信息采集器”,方便廣大網(wǎng)友查閱!

    這篇文章主要介紹了python實現(xiàn)的一個火車票轉(zhuǎn)讓信息采集器,采集信息來源是58同程或者趕集網(wǎng),需要的朋友可以參考下。

    #coding: utf-8

    '''

    春運(yùn)查詢火車票轉(zhuǎn)讓信息

    Author: piglei2007@gmail.com

    Date: 2011.01.25

    '''

    import re

    import os

    import time

    import urlparse

    import datetime

    import traceback

    import urllib2

    import socket

    socket.setdefaulttimeout(20)

    BLANK_RE = re.compile(r"\s+")

    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())

    opener.addheaders = [

      ("User-agent", "Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.9.1) Gecko/20090704 Firefox/3.5"),

      ("Accept", "*/*"),

    ]

    urllib2.install_opener(opener)

    from BeautifulSoup import BeautifulSoup

    SOURCE = {

      "58": "http://bj.58.com/huochepiao/?Num=%(train)s&StartTime=%(date)s00",

      "ganji": "http://bj.ganji.com/piao/cc_%(train)s/%(date)s/",

    }

    RECORD_FILE = "/tmp/ticket_records.txt"

    def parse_record():

      try:

        return set([x.strip() for x in open(RECORD_FILE, "r").readlines()])

      except IOError:

        open(RECORD_FILE, "w")

        return set()

    def flush_record(records):

      open(RECORD_FILE, "w").write("\n".join(records))

    def main(config):

      """

      開始抓取

      """

      existed = parse_record()

      to_email = []

      for train in config["trains"]:

        for date in config["dates"]:

          for type, _url in SOURCE.items():

            url = _url % dict(train=train, date=date)

            content = urllib2.urlopen(url).read()

            soup = BeautifulSoup(content)

            result = parse_content(type, soup, train)

            for url, text in result:

              url = urlparse.urljoin(_url, url)

              # 只要臥鋪!

              if url not in existed and u"臥" in text:

                to_email.append([text, url])

              existed.add(url)

      if to_email:

        content = "".join(

          [x for x in [" | ".join(y) for y in to_email]]

        ).encode("utf-8")

        simple_mail(config["people"], content)

      flush_record(existed)

    def parse_content(type, soup, train):

      """

      獲得車次信息

      """

      result = []

      if type == "58":

        info_table = soup.find("table", id="infolist")

        if info_table:

          for x in info_table.findAll("tr", text=re.compile(ur"%s(?!時刻表)" % train, re.I)):

            a = x.parent

            _text = BLANK_RE.sub("", a.text)

            result.append([a["href"], _text])

      if type == "ganji":

        for x in soup.findAll("dl", {"class": "list_piao"}):

          a = x.dt.a

          result.append([a["href"], a.text])

      return result

    EMAIL_HOST = 'smtp.sohu.com'

    EMAIL_HOST_USER = 'yourname@sohu.com'

    EMAIL_HOST_PASSWORD = 'yourpassword'

    EMAIL_PORT = 25

    def simple_mail(to, content):

      """

      發(fā)送郵件

      """

      import smtplib

      from email.mime.text import MIMEText

      msgRoot = MIMEText(content, 'html', 'UTF-8')

      msgRoot['Subject'] = "[%s]有票來啦!?。?!" % datetime.datetime.today().isoformat(" ")

      msgRoot['From'] = EMAIL_HOST_USER

      msgRoot['To'] = ", ".join(to)

      s = smtplib.SMTP(EMAIL_HOST, EMAIL_PORT)

      s.login(EMAIL_HOST_USER, EMAIL_HOST_PASSWORD)

      s.sendmail(EMAIL_HOST_USER, to, msgRoot.as_string())

      s.close()

    def switch_time_zone():

      """

      切換時區(qū)

      """

      os.environ["TZ"] = "Asia/Shanghai"

      time.tzset()

    switch_time_zone()

    if __name__ == '__main__':

      config = {

        "trains": ("k471",),

        "dates": ("20110129",),

        "people": (

          "youremail@sohu.com",

        )

      }

      try:

        main(config)

        print "%s: ok" % datetime.datetime.today()

      except Exception, e:

        print traceback.format_exc()然后放入cron,你懂的。

    更多信息請查看IT技術(shù)專欄

    更多信息請查看腳本欄目
    易賢網(wǎng)手機(jī)網(wǎng)站地址:python實現(xiàn)的一個火車票轉(zhuǎn)讓信息采集器
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2025國考·省考課程試聽報名

    • 報班類型
    • 姓名
    • 手機(jī)號
    • 驗證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報警專用圖標(biāo)