本期,我们用python来实现对某市公交线路站点的爬取,目标网站为:8684.cn,选取南京作为某市,具体网站截图为:
选取南京公交线路中以数字开头的:1~9,具体为:
点进入某个数字,即可查看相关线路图:
具体实现代码为:
import requests,bs4,re,timeheader = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' }#单页爬虫def crawl(url): rr=requests.get(url,headers=header) r_text=bs4.BeautifulSoup(rr.text) ff=r_text.select('div > div.trip') #获取车次前进的方向 total="1."+ff[0].get_text()+':' #print(ff[0].get_text()) fft=r_text.select('div > div.total') #获取每个车次车站数量 f1=fft[0].get_text().split('共')[1].split('站')[0] #获取前进方向的车站数量 station=r_text.select(' div > ol > li > a') #获取全部的站点数量 for kk in station[:int(f1)-2]: total=total+kk.get_text()+'-->' total=total+station[int(f1)-2].get_text() #有些线路只有去无回,采用try来规避。 try: total=total+"2."+ff[1].get_text()+':' for kk in station[int(f1)+1:-1]: total=total+kk.get_text()+'-->' total=total+station[-1].get_text() except: pass return total #主程序init_url='https://nanjing.8684.cn/list'url_list=[]for i in range(1,10): url_list.append(init_url+str(i))for url in url_list: r=requests.get(url,headers=header) response=bs4.BeautifulSoup(r.text) aa=response.select('div > div.list.clearfix > a') #找到a标签 for kk in aa: temp=re.findall(r'href="/(.*?)" title=',str(kk))[0] url_j=f'https://nanjing.8684.cn/{temp}' #搭建新的url网址 title=kk.get_text() #获取线路名称 #写入txt文件中 fn = open('南京公交线路.txt','a+', encoding='utf-8') fn.write(title+":"+crawl(url_j)) fn.write("\n") time.sleep(0.5)
运行效果为:
但,这只是一部分线路图,没有爬取所有的线路,因为多次访问网站,被网站警告了。爬虫虽好,但不要过分啊。