日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python爬虫抓取动态数据

發(fā)布時間:2023/12/31 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python爬虫抓取动态数据 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一個月前實習(xí)導(dǎo)師布置任務(wù)說通過網(wǎng)絡(luò)爬蟲獲取深圳市氣象局發(fā)布的降雨數(shù)據(jù),網(wǎng)頁如下:


心想,爬蟲不太難的,當年跟zjb爬煎蛋網(wǎng)無(mei)聊(zi)圖的時候,多么清高。由于接受任務(wù)后的一個月考試加作業(yè)一大堆,導(dǎo)師也不催,自己也不急。

但是,導(dǎo)師等我一個月都得讓我來寫意味著這東西得有多難吧。。。今天打開一看的確是這樣。網(wǎng)站是基于Ajax寫的,數(shù)據(jù)動態(tài)獲取,所以無法通過下載源代碼然后解析獲得。

從某不良少年寫的抓取淘寶mm的例子中收到啟發(fā),對于這樣的情況,一般可以同構(gòu)自己搭建瀏覽器實現(xiàn)。phantomJs,CasperJS都是不錯的選擇。

導(dǎo)師的要求是獲取過去一年內(nèi)深圳每個區(qū)每個站點每小時的降雨量,執(zhí)行該操作需要通過如上圖中的歷史查詢實現(xiàn),即通過一個時間來查詢,而這個時間存放在一個hidden類型的input標簽里,當然可以通過js語句將其改為text類型,然后執(zhí)行send_keys之類的操作。然而,我失敗了。時間可以修改設(shè)置,可是結(jié)果如下圖。

為此,僅抓取實時數(shù)據(jù)。選取python的selenium,模擬搭建瀏覽器,模擬人為的點擊等操作實現(xiàn)數(shù)據(jù)生成和獲取。selenium的一大優(yōu)點就是能獲取網(wǎng)頁渲染后的源代碼,即執(zhí)行操作后的源代碼。普通的通過 url解析網(wǎng)頁的方式只能獲取給定的數(shù)據(jù),不能實現(xiàn)與用戶之間的交互。selenium通過獲取渲染后的網(wǎng)頁源碼,并通過豐富的查找工具,個人認為最好用的就是find_element_by_xpath("xxx"),通過該方式查找到元素后可執(zhí)行點擊、輸入等事件,進而向服務(wù)器發(fā)出請求,獲取所需的數(shù)據(jù)。

# coding=utf-8 from testString import * from selenium import webdriver import string import os from selenium.webdriver.common.keys import Keys import time import sys default_encoding = 'utf-8' if sys.getdefaultencoding() != default_encoding:reload(sys)sys.setdefaultencoding(default_encoding)district_navs = ['nav2','nav1','nav3','nav4','nav5','nav6','nav7','nav8','nav9','nav10'] district_names = ['福田區(qū)','羅湖區(qū)','南山區(qū)','鹽田區(qū)','寶安區(qū)','龍崗區(qū)','光明新區(qū)','坪山新區(qū)','龍華新區(qū)','大鵬新區(qū)']flag = 1 while (flag > 0):driver = webdriver.Chrome()driver.get("http://www.szmb.gov.cn/article/QiXiangJianCe/")# 選擇降雨量driver.find_element_by_xpath("//span[@id='fenqu_H24R']").click()filename = time.strftime("%Y%m%d%H%M", time.localtime(time.time())) + '.txt'#創(chuàng)建文件output_file = open(filename, 'w')# 選擇行政區(qū)for i in range(len(district_navs)):driver.find_element_by_xpath("//div[@id='" + district_navs[i] + "']").click()# print driver.page_sourcetimeElem = driver.find_element_by_id("time_shikuang")#輸出時間和站點名output_file.write(timeElem.text + ',')output_file.write(district_names[i] + ',')elems = driver.find_elements_by_xpath("//span[@οnmοuseοver='javscript:changeTextOver(this)']")#輸出每個站點的數(shù)據(jù),格式為:站點名,一小時降雨量,當日累積降雨量for elem in elems:output_file.write(AMonitorRecord(elem.get_attribute("title")) + ',')output_file.write('\n')output_file.close()driver.close()time.sleep(3600) 文件中引用的文件testString只是修改輸出格式,提取有效數(shù)據(jù)。

#Encoding=utf-8 def OnlyCharNum(s, oth=''):s2 = s.lower()fomart = 'abcdefghijklmnopqrstuvwxyz0123456789,.'for c in s2:if not c in fomart:s = s.replace(c, '')return sdef AMonitorRecord(str):str = str.split(":")return str[0] + "," + OnlyCharNum(str[1])
一小時抓取一次數(shù)據(jù),結(jié)果如下:


參考網(wǎng)站:http://cuiqingcai.com/2599.html

總結(jié)

以上是生活随笔為你收集整理的Python爬虫抓取动态数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。