目标地址http://scxk.nmpa.gov.cn:81/xk/

这个网站单击链接时地址不会发生任何变化

如果直接爬取网页会得到类似这样的


原因是所有的页面和详细信息包括主页都是以ajax异步方式获取的

通过抓包工具获得一个post数据包


这个数据包传递一组页面参数后返回一和json字符串,里面有一个ID


详情页面也是异步加载的,通过这个ID传参进去可以获取需要的数据


做测试只爬取了5页信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# -*- encoding: utf-8 -*-
'''
@文件 :spider.py
@Time :2020-12-29 20:56:42
@Author :Karcyril
@Software:Visual Studio Code
'''

import requests
import json

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3775.400 QQBrowser/10.6.4208.400'
}

# 储存id
listId = []
# 详情页json数据
detailList = []

# 获取前5页的ID
for page in range(1, 6):

params = {
'on': ' true',
'page': page,
'pageSize': ' 15',
'productName': '',
'conditionType': ' 1',
'applyname': '',
'applysn': '',
}

postUrl = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList'

respJson = requests.post(url=postUrl, data=params, headers=headers).json()

for item in respJson['list']:
listId.append(item['ID'])

for id in listId:
subPostUrl = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById'
subParam = {
'id': id,
}
detailJson = requests.post(
url=subPostUrl, data=subParam, headers=headers).json()
detailList.append(detailJson)

with open('./test.json', 'w+', encoding='utf-8') as fp:
json.dump(detailList, fp, ensure_ascii=False)


结果如下,没有做任何处理只是简单的储存了一下