google网页有一个上传文件的按钮怎么用python里面用click不能实现_我是怎样用Excel爬创业板反馈意见和招股书的(附小工具)...

点击上方蓝色字关注我们!

之前写过两篇科创板反馈意见爬虫的文章,没有用到代码,适合小白。第一篇是如何用八爪鱼设置爬取下载地址:10分钟教你爬取科创板反馈意见

如果还是不会设置,就看第二篇,我把设置好的配置文件上传了,直接在八爪鱼导入配置文件就能爬了:科创板爬虫,这次不用自己设置了

爬取下载地址后,用迅雷或者我传的下载器都能下载。

目前这两篇文章仍然有效,需要科创板反馈意见的朋友可以去看看。

创业板实行注册制后,反馈意见公开了,截止到9月18号也有200多条公司的记录了,我本想按之前科创板的方式做一个八爪鱼的配置文件上传,这样就没有什么学习成本了,而且也不用担心之后网站的变动,但是初步尝试一下不行.. 深交所不像上交所,在问询意见的界面不能直接下载↓

地址:http://listing.szse.cn/projectdynamic/ipo/index.html

fd10c10d86bd4d654f086c1c9f372e1d.png

上交所可以直接在这个界面爬到下载地址,所以八爪鱼的效率也不算低,10多分钟就能把所有的地址爬完。

2cc0ab36b3c06674792d9ee1bd0da63e.png

深交所没有在这个界面放出地址,必须点进公司名,在详情里面找到反馈的文件↓

ad15df7b1595988809c9b3a21791abea.png

用八爪鱼的话一个一个页面去打开,效率太低了,所以这次只能靠代码了。

在工具的选择上,如果用python的话写出代码也没法直接给大家伙用,所以这次还是考虑用Excel的VBA来实现,写出来的.xlsm文件也会上传到网盘,可以直接下载使用,在公众号后台回复[爬虫工具]下载使用

50e098d4027b24737b4a3f4af03236c8.png

首先确定思路:

①打开深交所IPO板块获取网页源码,解析出所有公司详情页的链接→②打开所有公司详情页的链接解析出下载地址链接→③将下载地址与公司名整理好并赋值到单元格中

01

①打开深交所IPO板块获取网页源码,解析出所有公司详情页的链接:

这一步获取网页源码的目的是得到详情页的链接,因此先随便点开一个详情页,观察一下链接的规律↓

215257a244492af1689b7b8d343275fe.png

先打开这个链接,看看网址是什么↓

b9002916c8ea2e6ef2331ae2041c0bde.png

看到这个链接的形式,首先就猜到所有的详情页链接格式会不会是固定的前缀+id=XX? 于是打开第二个公司的详情页↓

6126f2627e25ad411fe7ffe041b8b0a0.png

果然只有后面的id数字变化了,所以第一步的目的就很明确了,那就是在IPO板块的页面取到所有公司对应的id。

用chrome浏览器右键查看网页源码↓

456a5e50e0c174771a40bb52dbcbdd6c.png

然后直接搜索id,找到对应的标签↓

a6dc7dc5fbcb63aa8e7ff0b021053b55.png

竟然没有搜索到.. 心里一凉,这个网页不简单..

再试着点了一下后面的翻页按钮,网页的链接并没有变化,那应该是使用了Ajax+异步渲染的模式。

F12开启监听,点一下翻页看看返回的是什么东西↓

7a7475919196e25c635147d67d71a15f.png

点击这个↓

046f0fb58e3825c9383c598f93440980.png

emmm,东西都整整齐齐地在这个里面了,很好,所以我们第一步的发送请求的网址不再是深交所IPO板块的网址了,而是这个网址↓

b8021d36db987250896e426767ee7bc8.png

这里有2个参数:

pageIndex=1&pageSize=10

直觉告诉我,它的意思是:页码为1,一页显示10条信息。

注意,我这里实际已经翻到了第二页,所以真正的第一页pageIndex=0

于是我把参数改为pageIndex=0&pageSize=9999

这样就不用翻页了,直接就能获取所有的公司id,并且不用在循环中反复给服务器发送请求,增加服务器压力。

VBA实现如下:

Set http = CreateObject("MSXML2.XMLHTTP.3.0")URL = "http://listing.szse.cn/api/ras/projectrends/query?stage=20&bizType=1&pageIndex=0&pageSize=9999"    With http        .Open "GET", URL, False        .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36"   '请求头        .send        RES = .responseText    End With

1行:创建对象MSXML2.XMLHTTP.3.0

4-6行:用GET方法发送请求,请求头增加了一个浏览器的信息

7行:返回的文本赋值给变量RES

接下来就是把返回的文本解析成公司和对应id的样子,首先康康返回了啥↓

1c291d0dfb46908291f006e60c61c27f.png

可以看到每个公司的id前面都有一个字符串"prjid",那么按这个规律,直接用split函数就能粗略的切割出来(一般会用正则表达式来解析,这里简单起见就用split函数了)

代码如下:

sp1 = Split(RES, "prjid"":")

切割完康康长啥样:

ed3c0d32696439d1b4bf42803bcc1d88.png

可以看出再用,"分割ID、用cmpnm":"和","cmpsnm"分割公司名就行。

代码如下:

For i = 1 To UBound(sp1)fxxh = Split(sp1(i), ",""")(0)   '发行公司序号fxnm = Split(Split(sp1(i), "cmpnm"":""")(1), """,""cmpsnm")(0)   '发行公司名称Next

此时,已获取到了所有公司的ID,变量名为fxxh。

02

②打开公司详情页,解析下载地址

既然得到了公司的ID,那么将前缀和ID拼接一下,就能得到详情页的链接了,代码如下:

URL = "http://listing.szse.cn/api/ras/projectrends/details?id=" & fxxh

首先,我们先看看详情页中的下载链接要怎样获取:

先随意打开一个详情页查看源代码,直接搜索".pdf",如果能搜索到并且对应上的话,直接把网页源码获取到,慢慢解析就行了↓

653173cf49259c97de2d1d0c108b676a.png

遗憾的是又没搜索到,那他应该又是用了异步渲染,果然不是那么好爬的,继续F12监听,刷新一下页面,看看发送了哪些请求↓

eead28b735cf0e56885ee069bf512ae0.png

这里一眼就挑出了一个最特殊的,直接搜索里面有没有.pdf吧↓

870adbe028bd6643d1d585b30566487f.png

这里搜索出来了.pdf,但是看样子不像是网站链接,可能又需要拼接一下,我们随便打开一个下载链接,看看长啥样↓

2631122f679738a20ef786c46c11ee0a.png

果不其然又是拼接而成的,RAS_之前的链接是固定的,所以我们只需要取到所有的RAS_XXXX.pdf就行了。

看看这个xhr请求的是哪个地址↓

57361a88fce9b6668735b461b78f25c4.png

所以第二步最开始拼接的网址错了(因为那个详情页搜索不到.pdf),我们需要请求这个网址,依旧是固定前缀+公司的ID

重写拼接链接↓

URL = "http://listing.szse.cn/api/ras/projectrends/details?id=" & fxxh

03

已经找到正确的详情页了,那么只用获取文本进行解析就行了:

    With http        .Open "GET", URL, False        .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36"   '请求头        .send           RES2 = .responseText        sp2 = Split(RES2, """dfphynm"":""")    '框出每段开头        For j = 1 To UBound(sp2)            sp3 = Split(sp2(j), """,""dftitle""")    '截掉不用段落            dl = "http://reportdocs.static.szse.cn/UpFiles/rasinfodisc/RAS_" & Split(sp3(0), """,""dfnm"":""")(0)    '分割            nm = Split(sp3(0), """,""dfnm"":""")(1)            p = Range("A1048576").End(xlUp).Row + 1            Cells(p, 1) = fxnm            Cells(p, 2) = dl            Cells(p, 3) = nm           Next    End With         

1-5行:发送请求,获取文本

6-10行:切割出RAS_XXX.pdf及对应文件名(同上不再赘述)

11-14行:将相应的下载地址和文件名写入单元格

至此,这个爬虫已经写完了,实际运行结果如下↓

98b6196269d75f25d90a022438f1fb17.gif

想了想,还是没有把爬地址和下载放在一起,可以自行决定部分下载,以后如果更新了新的反馈意见,直接爬新的就行了,要下载时再复制到下载器中下载。

50e098d4027b24737b4a3f4af03236c8.png

这篇文章不是手把手教你VBA爬虫,只是作为一个实战案例分享出来,如果有VBA基础,可以稍微研究一下,要是对爬虫感兴趣的话,还是建议去学Python爬虫,各种库用起来更加方便。

end

要是内容对你有用,可以分享到你的朋友圈噢~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值