注:このブログは、爬虫類の教育ではありません主に技術的なポイントは、カーディング
- データ・インタフェースを探して
- 現在のページがクロール直接、唯一の現在のページフレームが見出されたので、データは、透過型のAJAXによって満たされるべきです
-
それは見つけるために、現在のURLのAjaxのインターフェイスアドレス、ID変数であります
-
データ要求を送信し、データディクショナリが返され、
インポート要求 IF __name__ == ' __main__ ' : #の企業IDへのアクセス URL = ' http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList ' ヘッダ = { ' User--エージェント':" Mozillaの/5.0(Windows NTの10.0; Win64のx64-)のAppleWebKit / 537.36(KHTML、ヤモリ等)クローム/ 76.0.3809.132サファリ/ 537.36 ' } #のパラメータは、パッケージ データ= { ' ON ':' trueにします' 'ページ':' 1 ' ' のpageSize ':' 15 ' ' 商品名':'' 、 ' ConditionTypeを':' 1 ' ' applyname ':'' 、 ' applysn ':'' 、 } json_ids = requests.post (URL = URL、ヘッダー=ヘッダ、データ=データ).json()
-
文字列データのJSONをパース
ID_LIST = [] json_ids = requests.post(URL = URL、ヘッダー=ヘッダ、データ= データ).json() のために DIC に json_ids [ ' リスト' ]: id_list.append(DIC [ ' ID ' ])
検証データは、それは我々が上記設定のpageSizeに沿って、辞書15の長さを与えるために、(LEN(ID_LIST))印刷印刷、得られたデータは正確です。
-
会社のID番号を取得し、次の処理アヤックス
#企业详细数据 POST_URL = ' http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById ' のための ID でID_LIST: データ = { ' ID ' :ID } detail_json = requests.post(URL = POST_URL、ヘッダー=ヘッダ、データ= データ).json() all_data_list.append(detail_json)
取得、確認、次のステップストレージ運用に関する情報を印刷して、それが行われています
-
単純な永続的なデータストレージ
#all_data_list永続ストレージ (FP =オープン' ./medData.json '、' W ' =エンコード、' UTF-を。8 ' ) json.dumpは(all_data_list、FP = FP、ensure_ascii = False)が 印刷(" 完成クロール!")
保存が完了したことを示すために、新たなJSON形式のファイルがある文書を参照してください。
成功をクロール、データの整合性をチェックしてください!
-
ページのクロール最適化情報
# 参数封装 data={ 'on': 'true', 'page': '1', 'pageSize': '15', 'productName':'', 'conditionType': '1', 'applyname':'', 'applysn':'', }
由于从主页复制过来的信息代码进行过分页处理,所以我们要爬取更多数据时要对其进行修改,
for page in range(1,6): page=str(page) # 参数封装 data={ 'on': 'true', 'page': page, 'pageSize': '15', 'productName':'', 'conditionType': '1', 'applyname':'', 'applysn':'', } json_ids = requests.post(url=url,headers=headers,data=data).json() for dic in json_ids['list']: id_list.append(dic['ID'])
其中的range内部表示页码,根据不同需求进行更改,不同之处仅在数据数量。
以下全部源码展示
# coding:utf-8
# author:Joseph
import requests
import json
if __name__=='__main__':
# 获取企业id
url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
id_list = [] # 存储企业的id
all_data_list = [] # 存储所有的企业详情数据
for page in range(1,6):
page=str(page)
# 参数封装
data={
'on': 'true',
'page': page,
'pageSize': '15',
'productName':'',
'conditionType': '1',
'applyname':'',
'applysn':'',
}
json_ids = requests.post(url=url,headers=headers,data=data).json()
for dic in json_ids['list']:
id_list.append(dic['ID'])
# print(id_list)
# 企业详细数据
post_url='http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
for id in id_list:
data={
'id':id
}
detail_json = requests.post(url=post_url, headers=headers, data=data).json()
all_data_list.append(detail_json)
#持久化存储all_data_list
fp = open('./medData.json','w',encoding='utf-8')
json.dump(all_data_list,fp=fp,ensure_ascii=False)
print('爬取完成!')