- 爬动态网站有很多种方法,但是最简单的方法是分析网站的源码获取api
There should be one-- and preferably only one --obvious way to do it.
第一步导入基本库
#导入requests module
import requests
#导入random module
import random
#导入json module
import json
第二步,用Chrome打开网站 http://www.neeq.com.cn/disclosure/supervise.html
第三步,按下 f12 (华为电脑是fn+f12),打开分析页面,
第三步,按下 f5 更新 ,点击network,和对应的url ,headers ,cookies ,把这些数据拷贝到代码中
#设置cookie
Cookie ="AlteonP=AUXKJYGSf3tA27gX0qEGbg$$; Hm_lvt_b58fe8237d8d72ce286e1dbd2fc8308c=1620815395,1620907479,1620907587,1620960621; Hm_lpvt_b58fe8237d8d72ce286e1dbd2fc8308c=1620960621"
#设置动态js的url
url = 'http://www.neeq.com.cn/AnnouncementController/infoResult.do?callback=jQuery331_1620960637102'
#设置requests请求的 headers
headers = {
'User-agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36", #设置get请求的User-Agent,用于伪装浏览器UA
'Cookie': Cookie,
'Connection': 'keep-alive',
'Accept': 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Host': 'www.neeq.com.cn',
'Referer': 'http://www.neeq.com.cn/disclosure/supervise.html',
'content-type': 'charset=utf8'
}
因为这个api 是post 的方法,你可以把整个post结构传入请求
data={'page': 0,
'startTime': '2020-05-14',
'endTime': '2021-05-14',
'announcementYn': 1,
'keyword': '',
'sortfield': 'xxssdq',
'sorttype': 'asc'
}
#requests post请求
req=requests.post(url,data=data,headers=headers)
#print(req.content) #通过打印req.content,我们可以知道post请求返回的是json数据,而且该数据是一个字符串类型的
#获取包含json数据的字符串
str_data=req.content
my_string=str_data.decode('utf8')
c=my_string.split('([')
cc1=c[1][:-2]
##获取json字符串数据
#str_json=str_data[8:-2]
#print(str_json)
##把json数据转成dict类型
json_Info=json.loads(cc1)
print(json_Info)
实际上你也可以只传入一个参数
data={'page': 0,
}
全部代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri May 14 10:48:30 2021
@author: ledi
"""
# -*- coding: utf-8 -*-
"""
Created on Tue May 01 18:52:49 2018
@author: gmn
"""
#导入requests module
import requests
#导入random module
import random
#导入json module
import json
#设置cookie
Cookie ="AlteonP=AUXKJYGSf3tA27gX0qEGbg$$; Hm_lvt_b58fe8237d8d72ce286e1dbd2fc8308c=1620815395,1620907479,1620907587,1620960621; Hm_lpvt_b58fe8237d8d72ce286e1dbd2fc8308c=1620960621"
#设置动态js的url
url = 'http://www.neeq.com.cn/AnnouncementController/infoResult.do?callback=jQuery331_1620960637102'
#设置requests请求的 headers
headers = {
'User-agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36", #设置get请求的User-Agent,用于伪装浏览器UA
'Cookie': Cookie,
'Connection': 'keep-alive',
'Accept': 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Host': 'www.neeq.com.cn',
'Referer': 'http://www.neeq.com.cn/disclosure/supervise.html',
'content-type': 'charset=utf8'
}
data={'page': 0,
'startTime': '2020-05-14',
'endTime': '2021-05-14',
'announcementYn': 1,
'keyword': '',
'sortfield': 'xxssdq',
'sorttype': 'asc'
}
# data={'page': 2,
# }
#requests post请求
req=requests.post(url,data=data,headers=headers)
#print(req.content) #通过打印req.content,我们可以知道post请求返回的是json数据,而且该数据是一个字符串类型的
#获取包含json数据的字符串
str_data=req.content
my_string=str_data.decode('utf8')
c=my_string.split('([')
cc1=c[1][:-2]
##获取json字符串数据
#str_json=str_data[8:-2]
#print(str_json)
##把json数据转成dict类型
json_Info=json.loads(cc1)
print(json_Info)