Python爬蟲與一汽項目【二】爬取中國東方電氣集中採購平臺

網站地址: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獲取內容了,誰知道它連二級頁面都是個這樣的形式,可給我無語了......

相關文章
相關標籤/搜索