python爬虫——代码练习郑州公交线路的爬取

导入请求
从lxml导入etree


#列表用户保存所有的线路信息
items = []


头= {
'用户代理':'Mozilla / 5.0(Windows NT 6.1; Win64; x64)AppleWebKit / 537.36(KHTML,像Gecko) Chrome / 66.0.3359.181 Safari / 537.36',
}


def parse_navigation():
url =' http://zhengzhou.8684.cn/'r
= requests.get(url,headers = headers)
#解析内容,获取所有的导航链接
树= etree.HTML(r.text)
#查找以数字开头的所有链接
number_href_list = tree.xpath('// div [@ class =“bus_kt_r1”] / a / @ href')
#查找以字母开头的所有链接
char_href_list = tree.xpath('// div [@ class =“bus_kt_r2”] / a / @ href')
#将需要爬取的所有链接返回
返回number_href_list + char_href_list


def parse_erji_route(content):
tree = etree.HTML(content)
#写xpath,获取每一个线路
route_list = tree.xpath('// div [@ id =“con_site_1”] / a / @ href')
route_name = tree.xpath('// div [@ id =“con_site_1”] / a / text()')
i = 0
#遍历上面这个列表
在route_list中的路由:
print('开始爬取%s线路'%route_name [i])
route ='http ://zhengzhou.8684.cn'+ route
r = requests.get(url = route,headers = headers)
#解析内容,获取每一路公交的详细信息
parse_sanji_route(r.text)
print('结束爬取%s线路'%route_name [i])
i + = 1


def parse_sanji_route(content):
tree = etree.HTML(content)
#获取公交线路信息
bus_number = tree.xpath('// div [@ class =“bus_i_t1”] / h1 / text()')[0]
#获取运行时间
run_time = tree。的xpath( '// P [@类= “bus_i_t4”] [1] /文本()')[0]
#获取票价信息
ticket_info = tree.xpath('// p [@ class =“bus_i_t4”] [2] / text()')[0]
#获取更新时间
gxsj = tree.xpath('// p [ @ class =“bus_i_t4”] [4] / text()')[0]
#获取上行总站数
total_list = tree.xpath('// span [@ class =“bus_line_no”] / text()')
up_total = total_list [0]
#将里面的空格给
去掉up_total = up_total.replace('\ xa0','')
#获取上行所有站名
up_site_list = tree.xpath('// div [@ class =“bus_line_site”] [ 1] / div / div / a / text()')
#print(up_site_list)#exit
()
try:
#获取下行总站数
down_total = total_list [1] .replace('\ xa0','')
#获取下行所有站名
down_site_list = tree.xpath('// div [@ class =“bus_line_site”] [2] / div / div / a / text()'),
除了Exception:e:
down_total =''
down_site_list = [] #将每条公交的线路信息存放到字典中item = { '线路名':bus_number,'运行时间':run_time,'票价信息':ticket_info,'更新时间':gxsj,'上行站数':up_total,'上行站点':up_site_list,'下行站数':down_total,'下行站点':down_site_list,} items.append(item)def parse_erji(navi_list):#遍历上面的列表,依次发送请求,解析内容,获取每一个页面所有的公交路线url #print(navi_list)for first_url in navi_list:first_url =' http: //zhengzhou.8684.cn'+ first_url print('开始爬取%s所有的公交路线'%first_url)r = requests.get(url = first_url,headers = headers)#解析内容,获取每一路公交的详细url parse_erji_route(r.text)print('结束爬取%s所有的公交信息'%first_url) def main():
































#取取第一页所有导航链接
navi_list = parse_navigation()
#爬取二级页面,需要找到以1开头的所有公交路线
parse_erji(navi_list)
#爬取完毕
fp = open('郑州公交.txt', '(w),encoding ='utf8')
用于项目中的项目:
fp.write(str(item)+'\ n')
fp.close()


if __name__ =='__main__':
main()

你可能感兴趣的:(ppython)