ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: renahu

[分享] 小白也抓网——分享网抓作品

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-11-17 14:29 | 显示全部楼层
renahu 发表于 2014-11-17 13:02
这个picturebox引用不知道哪里来的,干脆把勾打掉

呵呵,这回,想恢复都找不到了。重新试还是正常啊, ...

测试通过,多谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-17 14:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
VBA万岁 发表于 2014-11-17 14:29
测试通过,多谢!


难道是这个picturebox引用导致删了缓存后无法登陆吗?有那么厉害吗?你不是说把勾打掉了吗?

TA的精华主题

TA的得分主题

发表于 2014-11-17 15:46 | 显示全部楼层
renahu 发表于 2014-11-17 14:33
难道是这个picturebox引用导致删了缓存后无法登陆吗?有那么厉害吗?你不是说把勾打掉了吗?

估计是我电脑网络的问题——换了一台电脑及网络后,120楼的附件也能正常运行。

TA的精华主题

TA的得分主题

发表于 2014-11-18 10:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
renahu 发表于 2014-11-16 16:01
看看我的最新版,呵呵,看看是不是更精细了?请高手帮我优化一下,另外看看还有什么可以改进的?这个版本 ...

在ThisWorkbook中增加如下代码(红色字体部分),以在打开工作薄时获取图书分类数据。

Private Sub Workbook_Open()
    Call 登陆
    login = True
    获取分类数据
    Call 一级菜单初始化
End Sub

Sub 获取分类数据()
'On Error Resume Next
Dim strText As String, i%, j%, r As Long, arr, brr, sh
Set sh = Sheets("分类数据")
sh.UsedRange.Offset(1).Clear
With CreateObject("MSXML2.XMLHTTP")
    .Open "GET", "http://www.apabi.com/cdyxy/?pid=dlib.index", False
    .send
    strText = Split(Split(.responsetext, "<h2>书苑常用分类</h2>")(1), "<h2>新书推荐</h2>")(0)
    'Debug.Print strText
    arr = Split(strText, "<h3")
    For i = 1 To UBound(arr)
        r = r + 1
        sh.Cells(r + 1, 1) = Split(Split(arr(i), ">")(2), "<")(0)
        sh.Cells(r + 1, 2) = "全部"
        sh.Cells(r + 1, 3) = Split(Split(arr(i), "cc=")(1), "&amp")(0)
        brr = Split(Split(arr(i), "<ul>")(1), "</a></li>")
        For j = 0 To UBound(brr) - 1
            r = r + 1
            sh.Cells(r + 1, 1) = Split(Split(arr(i), ">")(2), "<")(0)
            sh.Cells(r + 1, 2) = Split(brr(j), ">")(2)
            sh.Cells(r + 1, 3) = Split(Split(brr(j), "cc=")(1), "&amp")(0)
        Next j
    Next i
End With
End Sub

TA的精华主题

TA的得分主题

发表于 2014-11-18 11:08 | 显示全部楼层
本帖最后由 VBA万岁 于 2014-11-18 11:09 编辑
renahu 发表于 2014-11-16 16:01
看看我的最新版,呵呵,看看是不是更精细了?请高手帮我优化一下,另外看看还有什么可以改进的?这个版本 ...


想问一下,在你的提取验证码的代码中有如下字符串:
"\u0048\u0054\u0054\u0050\u003a\u002f\u002f\u0077\u0077\u0077\u002e\u0061\u0070\u0061\u0062\u0069\u002e\u0063\u006f\u006d\u002f\u0056\u0061\u006c\u0069\u0064\u0061\u0074\u0065\u0043\u006f\u0064\u0065\u002e\u0061\u0073\u0070\u0078"
我知道这串字符经转码后会变成验证码的网址。
能告诉我这串字符是怎么得来的吗?——是直接抓包得到?还是将验证码的网址经转码得到?若为后者,该用哪个转码函数?

另,144楼我用代码获取的图书分类代码和你原来的略有差别,比如:用代码获取“小说”的分类码为“CYFL2011$$001001”,而你的原始代码为“CYFL2011%24%24001001”,而经测试,二者都可以的。
想知道它们是否也可通过转码函数互换?

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-18 11:33 | 显示全部楼层
VBA万岁 发表于 2014-11-18 10:51
在ThisWorkbook中增加如下代码(红色字体部分),以在打开工作薄时获取图书分类数据。

Private Sub Wo ...

把你改好的附件发一个吧
$=%24
\u0048\u0054\u0054\u0050。。。是我故弄玄虚,其实原来不是这样的,其实你往下看就知道答案了

TA的精华主题

TA的得分主题

发表于 2014-11-18 12:15 | 显示全部楼层
本帖最后由 VBA万岁 于 2014-11-21 13:28 编辑
renahu 发表于 2014-11-18 11:33
把你改好的附件发一个吧
$=%24
\u0048\u0054\u0054\u0050。。。是我故弄玄虚,其实原来不是这样的,其实 ...

你是说后面那一句吗?
Selection.ShapeRange.Fill.UserPicture unescape(nUrl)
这一句用unescape函数将nUrl转成了验证码网址。
可我想知道nUrl是怎么得到的,是通过另一个相反的函数将验证码网址反转过来得到的吗?

我是在第3版的基础上添加获取图书分类数据的,因附件太大,删除了其中的截图:
网抓图书目录3.zip (245.43 KB, 下载次数: 19)

TA的精华主题

TA的得分主题

发表于 2014-11-18 12:15 | 显示全部楼层
renahu 发表于 2014-11-18 11:33
把你改好的附件发一个吧
$=%24
\u0048\u0054\u0054\u0050。。。是我故弄玄虚,其实原来不是这样的,其实 ...

你是说后面那一句吗?
Selection.ShapeRange.Fill.UserPicture unescape(nUrl)
这一句用unescape函数将nUrl转成了我验证码网址。
可我想知道nUrl是怎么得到的,是通过另一个相反的函数将验证码网址反转过来得到的吗?

我是在第3版的基础上添加获取图书分类数据的,因附件太大,删除了其中的截图:

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-18 12:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
VBA万岁 发表于 2014-11-18 12:15
你是说后面那一句吗?
Selection.ShapeRange.Fill.UserPicture unescape(nUrl)
这一句用unescape函数将 ...

nUrl在response中就有,搜一下,这个图书网不设防,没有任何加密处理,完全摆在明面上

TA的精华主题

TA的得分主题

发表于 2014-11-18 12:44 | 显示全部楼层
renahu 发表于 2014-11-18 12:33
nUrl在response中就有,搜一下,这个图书网不设防,没有任何加密处理,完全摆在明面上

现在有新任务了:实现一次同时抓取3~5页目录,加速下载

你现在抓目录的时候,是一页页按次序抓的,这是同步方式,会阻塞当前线程,并等待服务器端的回应,如果服务器回应慢了,你的程序就假死了~~

异步,就是同时发多个请求给服务器,非阻塞,服务器回应后,再回调指定的函数来处理数据。可以同时抓5~10页目录,快多了~

超时,就是设定时限,服务器不回应,就放弃


http://club.excelhome.net/forum.php?mod=redirect&goto=findpost&ptid=1161199&pid=7914848
异步批量网抓 的例子~
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-25 21:46 , Processed in 0.034707 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表