網站地址:https://srm.dongfang.com/bid_detail.screenpython
東方電氣採購的頁面看似很友好,實際上並很差爬取json
在觀察網頁的審查元素以後發現,1處的網頁響應只是單純的一些js代碼,並無咱們想要的數據信息,所以很明顯該網頁是通過js修飾的框架
另外再翻頁時,發現該網頁的url始終不變,因此這是一個以post方式提交的頁面。post
果斷轉向2出的url,點開以後能夠看到,fetch
此處有一新的url,而且請求方式的確四post方式,所以不能直接用網站地址獲取咱們所需的數據。網站
查看新的url的響應發現,獲得的是一串很是長的字典,而通過觀察發現,咱們所須要的時間,標題,二級頁面的參數等內容均在字典中url
所以,採起的方式的爲code
經過新的url獲取網頁響應的內容—>經過解析json數據,獲取Python可讀的數據—>從獲得的字典中獲取所求的數據
代碼以下:對象
from urllib.request import urlopen url = "https://srm.dongfang.com/autocrud/blt.BLT1030.bid_tplt_bulletin_home_list/query?pagesize=10&pagenum=2&_fetchall=true&_autocount=true" urlObj = urlopen(url) # 服務端返回的頁面信息, 此處爲字符串類型 pageContent = urlObj.read().decode('utf-8') # print(pageContent) # print(type(pageContent)) # 2. 處理Json數據 import json # 解碼: 將json數據格式解碼爲python能夠識別的對象; dict_data = json.loads(pageContent) # print(type(dict_data)) # print(data['release_date'],data['bid_project_name'],data['tplt_blt_id']) k = 0#查看信息條數 for i in dict_data['result']['record']: print(i['creation_date'],i['bid_project_name'],i['tplt_blt_id']) k = k+1 print(k)
這裏得到了發佈時間['creation_date'],招標項目名['bid_project_name'],二級頁面參數['tplt_blt_id']blog
這裏說明一下,響應的數據的格式
響應的數據是個字典嵌套了字典,大字典的第一個key值是"result",它的value值是一個小字典, 該小字典的key值是"record",而小字典的value值是一個列表,列表中保存了咱們須要的信息, 而列表元素一樣是個字典的形式,每一個字典對應着一個招標信息的具體信息 所以採用for循環,將小字典中的值依次取出來 {"result":{"record":[{"created_by":1329210,...},{...},...],"totalCount":5265},"success":true}
輸出:
2019-04-08 17:34:08 2019年年度防堵取樣裝置框架合同 72084 2019-04-09 09:17:15 【電機事業部】2D-HD199001-1~2-12東豐中衆泰德110MW發電機配套勵磁系統採購 72110 2019-04-04 09:42:03 ZB(ZK)2019069-文昌項目儀表閥(項目) 71870 2019-04-08 08:48:51 物資保障部國電九江改造凹凸法蘭毛坯採購 71990 2019-04-09 08:35:02 進口銑刀及銑刀片採購(住友) 72092 2019-04-09 08:48:49 中廣核河南永城項目自動潤滑系統 72098 ...
本覺得獲取到這兒就能夠直接拼接二級頁面的url獲取內容了,誰知道它連二級頁面都是個這樣的形式,可給我無語了......