写文初衷
- 让其他人少走弯路。
需求:爬取事件的标题、时间和url地址
iframe blocked问题出现
列表页的标题和时间可能是动态加载的,pyspider框架里面显示iframe blocked(加了fetch_type='js'也没用),尝试找一下JSON地址
找JSON地址的步骤:
- 在列表页F12打开开发者工具,选择network里面的XHR,F5刷新发现多出来几个文件
- 每个文件点开看一下,发现最后一个文件是我们需要的,得到地址1:http://www.chinamoney.com.cn/ags/ms/cm-u-notice-issue/bIssuAn
-
往下翻,翻到最后的form data,选择view source,得到地址2:typeCode=null&isNewTab=1&pageNo=1&pageSize=30&sDate=2018-8-6&eDate=2018-8-7&limit=1&timeln=1
JSON地址 = 地址1 + ‘?’ + 地址2(中间加一个‘?’拼接)
JSON页(事件列表页的json)
- title:标题
- publishDateStr:发布时间
-
draftPath:事件URL(有些事件url为空,需要进一步解析json)
进一步分析url为空的事件
回到列表页,随便点击一个列表页JSON页中url为空的事件,通过同样的方法,得到详情页的JSON地址(简称JSON2),在JSON2里面通过同样的方法获得所需要的标题、发布时间和url。(F12,F5,拼接等操作)
JSON2地址:
http://www.chinamoney.com.cn/ags/ms/cm-u-notice-an/viewBondIssu?bondCode=3979882019&channelId=2560%2C2583%2C2563&pageNo=1&pageSize=10&timeln=0
这仅仅是一个事件的json2,想拿到所有的,bondCode=3979882019中的3979882019应该替换成each['bondDfndCd']
需要注意的就是,response.json['records']是一个列表,里面每一条对应每一个事件,通过for我们可以拿到每一个事件的bondCode:代码如下
for each in response.json['records']:
return each['bondDfndCd']
JSON2页面(url为空的事件详情页的json)
获得了url为空的事件的标题名称、事件和url