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

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

#coding: utf-8

'''

春運查詢火車票轉(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,你懂的。

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

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

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