Python学习之提取8684公交数据

虽然很简单,不过折腾了这么久终于搞出来了,希望大学指点:

'''此文档用于提取8684公交网站的数据,便于在手机等设备上使用 其实已经有不少相关数据和程序提供免费下载使用了,我只是为了学 习Python编程而写了这么一个小程序,希望对你的学习有用。 你可以自由修改使用此文件 ''' __author__ = "DreamFlyingFish (http://blog.csdn.net/DreamFlyingFish)" __version__ = "1.0.7" __copyright__ = "Copyright (c) 2010-2010 DreamFlyingFish" __license__ = "GNU" import re from urllib.request import urlopen from BeautifulSoup import BeautifulSoup def busline( fileName, cityName, cityurl, id ): '''busline( file, cityurl, id )函数用于读取8684网站某个城市的公交线路列表 fileName 用于存储所提取到的数据的文件名 cityName 当前城市名 cityurl 为8684网站城市分站,如厦门为http://xiamen.8684.cn。注意网址后不能有/ id 提取列表时的限定符html->body->[div id="main"]->[div class='left']->[div class=?] 好像不同城市有所不同,深圳此处为'la',厦门为'laa'.所以使用时请查看一下原网站。AST ''' f = open( fileName, 'a', encoding='utf-8') f.write( '<' + cityName + '>' ) url = cityurl + '/sitemap' fh = urlopen( url ) html = fh.read() soup = BeautifulSoup( html.decode('gbk') ) div_la = soup.findAll( 'div', {'class' : id} ) div_li = div_la[0].findAll('li') for li in div_li: a = li.find('a') print( '正在读取' + a.string + '数据' ) bus( f, cityurl + a['href'] ) f.write( '' ) f.close() return True def bus( f, href ): '''bus( f, href )用于分析8684公交线路页面内容的。如果分析8684某个城市数据,可以调用 busline()函数,busline会自动调用此函数分析页面内容,此函数亦可用于单独线路分析。 f 为一个文件对象,用于写入数据 href 为线路网址 f为一个已经打开的并可写入的文件对象。href为线路网址 ''' regx = re.compile(r'<.*?>') f623 = urlopen( href ) fhtml = f623.read() html = fhtml.decode('gbk') soup = BeautifulSoup( html ) div_show = soup.find( 'div', {'id':'show'} ) lineName = div_show.ul.h2.a.string #站点名 f.write('' + lineName + '') print( '正在写入' + lineName + '的数据' ) a = repr(div_show.li) lineInfo = regx.sub('', a ) #站点相关信息 f.write('' + lineInfo + '') tmp = 1 div_show_span = div_show.findAll('span') for span in div_show_span: span_a = span.findAll('a') if tmp: f.write('<去程>') else: f.write('<回程>') for a in span_a: f.write( '' + a.string + '' ) if tmp: f.write('') tmp = 0 else: f.write('') tmp = 1 div_note = div_show.find( 'li', {'class':'remark'} ) div_note = re.sub( r'

.*?

', '', repr(div_note) ) note = regx.sub( '', div_note ) #提取备注信息 f.write( '' + note + '' ) regx_date = re.compile(r'[0-9]{4}-[0-9]{2}-[0-9]{2}') update = regx_date.search(repr(div_show.script)).group(0) #提取更新日期 f.write( '' + update + '' ) f.write('')

你可能感兴趣的:(Python)