1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Python selenium爬虫抓取船舶网站数据(动态页面)

Python selenium爬虫抓取船舶网站数据(动态页面)

时间:2018-10-26 22:17:29

相关推荐

Python selenium爬虫抓取船舶网站数据(动态页面)

很早之前就开始学习爬虫了,一直想学习爬取动态页面,正巧工作中需要用到一个船舶信息的网站,每次都是手动查询太麻烦了,昨天下午研究了一下午,总算搞透彻了,基本步骤如下:

1、启动浏览器

2、打开网页

3、模拟输入,模拟点击

4、稍等一会(很重要)

5、获取网页数据

6、清洗数据

代码分两部分,一部分保存为函数(Chrome_shipxy.py),另一部分作为程序调用函数,这样方便扩展多进程使用。

from mon.keys import Keysfrom selenium import webdriverimport timedef func01(html): #拆分字符串line='';html2=[];bj=0;for j in range(0,len(html)):if bj==0 and html[j:j+1]=='<':line=line+html[j:j+1];bj=1;continueif html[j:j+1]!='<':line=line+html[j:j+1];continueif bj==1 and html[j:j+1]=='<':html2.append(line);line='';line=line+html[j:j+1];bj=1;html2.append(line);line='';return html2def func02(html2): #筛选需要信息sxzd=['si_mmsiFlag','si_shipType','si_shipStatus','si_length','si_beam','si_lat','si_lng','si_lastTime']; #国籍,类型,状态,船长,船宽,纬度,经度,最后时间wb1=[];wb2=[];for i in sxzd:bj=0;for j in html2:if i in j:wb1.append(j);bj=1;if bj==0:wb1.append('>无信息');for j in wb1:for i in range(0,len(j)):if j[i:i+1]=='>':wb2.append(j[i+1:len(j)])return wb2def func03(ship_name,wait_time): #主函数obj = webdriver.Chrome()obj.set_page_load_timeout(10)try:obj.get('/')obj.set_page_load_timeout(20)obj.find_element_by_id('txtKey').clear() #用于清除输入框的内容,相当于clear()obj.find_element_by_id('txtKey').send_keys(ship_name) #在输入框内输入Helloobj.find_element_by_id('butnQuery').send_keys(Keys.ENTER) #通过定位按钮,通过enter(回车)代替clicktime.sleep(wait_time) #让子弹飞一会儿(很重要)html = obj.page_sourcetime.sleep(2)html2=func01(html)html3=func02(html2)html3.insert(0,ship_name)except Exception as e:html3=['未获取到信息','无信息'];#print(e);finally:obj.close()obj.quit()return html3

import Chrome_shipxyif __name__=='__main__':ship_name=['SHINANO MARU','SEROJA LIMA','宝鑫通','桂翔1','嘉远3','建功308','顺恩','西马11','鑫源盛','兴达888','兴宁20','豫信货12262','忠泰'];for j in ship_name:html3=Chrome_shipxy.func03(j,5)if '无信息' in html3[1]:for i in range(6,31,2):html3=Chrome_shipxy.func03(j,i)if '无信息' not in html3[1]:breakprint(html3)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。