网站地址:https://srm.dongfang.com/bid_detail.screen

东方电气采购的页面看似很友好,实际上并不好爬取

在观察网页的审查元素之后发现,1处的网页响应只是单纯的一些js代码,并没有我们想要的数据信息,因此很明显该网页是经过js修饰的

另外再翻页时,发现该网页的url始终不变,所以这是一个以post方式提交的页面。

果断转向2出的url,点开之后可以看到,

此处有一新的url,并且请求方式的确四post方式,因此不能直接用网站地址获取我们所需的数据。

查看新的url的响应发现,得到的是一串非常长的字典,而经过观察发现,我们所需要的时间,标题,二级页面的参数等内容均在字典中

因此,采取的方式的为

通过新的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']

这里说明一下,响应的数据的格式

响应的数据是个字典嵌套了字典,大字典的第一个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获取内容了,谁知道它连二级页面都是个这样的形式,可给我无语了......

最新文章

  1. 广义表 Head Tail
  2. input按钮事件的一个隐藏bug,分享出来
  3. erlang远程加载模块须知
  4. 【Servlet】—在servlet中常混的请求路径
  5. Access denied for user: 'root@localhost' (Using password: YES)
  6. leetcode 37. Sudoku Solver 36. Valid Sudoku 数独问题
  7. Dynamics CRM OData 查询超过50条记录的数据(Retrieving More than 50 records using OData)
  8. Node.js学习(第一章:Node.js安装和模块化理解)
  9. 算法(第四版)C# 习题题解——2.4
  10. 四、HTTP控制器
  11. 动态追加js
  12. firefox镜像 和geckodriver驱动大全
  13. 4.5《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)—第四章小结
  14. python-GIL
  15. Java面试问题总结
  16. [Ubuntu] arp-scan - 扫描网络设备
  17. zoj Calculate the Function
  18. 【Ansible】Playbook实例
  19. ElasticSearch 从2.2升级到6.2.4所碰到的问题汇总
  20. HDU 5649.DZY Loves Sorting-线段树+二分-当前第k个位置的数

热门文章

  1. ST表 || RMQ问题 || BZOJ 1699: [Usaco2007 Jan]Balanced Lineup排队 || Luogu P2880 [USACO07JAN]平衡的阵容Balanced Lineup
  2. es7 async/await使用
  3. Codeforces 785D - Anton and School - 2 - [范德蒙德恒等式][快速幂+逆元]
  4. mysql ON DUPLICATE KEY UPDATE 与 REPLACE INTO 的区别
  5. 对不可描述的软件安装sfbo插件
  6. div盒子水平居垂直中的几种方法
  7. git 远程
  8. PL_SQL学习
  9. Python3学习之路~8.5 SocketServer实现多并发
  10. PHP生成当前月份包括最近12个月内的月份