关于多线程采集的思路
比如我想采集易语言问答区里所有用户
基本思路如下:
1、先得到易语言问答区里总面数,然后采集所有帖子链接
2、进入所有帖子链接,得到回复总页数(可能1-100页等)
3、采集各帖子链接里面的所有页数的用户ID。
但流程控制我不太会基本想法是这样的
变量名 | 类 型 | 静态 | 数组 | 备 注 | 局_临时文本 | 文本型 | | | 局_总页 | 文本型 | | | 局_分页 | 整数型 | | |
超级列表框1. 全部删除 ()序号_关键字 = 0 集_关键字 = 编码_gb2312到utf8 (编辑框_关健字.内容 )局_临时文本 = 网页访问u (“http://” + 集_关键字 + “&pg=1”)局_总页 = 文本_取出中间文本 (局_临时文本, “page-number” + #引号 + “>共”, “页”)如果真 (局_总页 = “”)局_总页 = “1”变量循环首 (1, 到整数 (局_总页 ), 1, 局_分页 )标签_进度.标题 = “共” + 局_总页 + “页 正在采集第” + 到文本 (局_分页 ) + “页”启动线程 (&关键字搜索, 局_分页, )延时 (10 )变量循环尾 ()变量名 | 类 型 | 静态 | 数组 | 备 注 | 局_临时文本 | 文本型 | | | 局_正则 | 正则表达式类 | | | 局_i | 整数型 | | |
局_临时文本 = 网页访问u (“http://” + 集_关键字 + “&pg=” + 到文本 (局参_分页 )) 局_正则. 创建 ( #常量_搜索, 局_临时文本 )计次循环首 (局_正则. 取匹配数量 (), 局_i )ID采集 (局_正则. 取子匹配文本 (局_i, 1 )) 延时 (10 )计次循环尾 ()变量名 | 类 型 | 静态 | 数组 | 备 注 | 局_临时文本 | 文本型 | | | 局_总页 | 文本型 | | | 局_分页 | 整数型 | | | 局_网址 | 文本型 | | | 局_分割符 | 字节集 | | | 局_参数串 | 字节集 | | | 局_指针 | 整数型 | | |
局_临时文本 = 网页访问u (局参_链接 + “_1.html”)局_总页 = 文本_取出中间文本 (局_临时文本, “>共”, “页”)如果真 (局_总页 = “”)局_总页 = “1”变量循环首 (1, 到整数 (局_总页 ), 1, 局_分页 )局_网址 = 局参_链接 局_分割符 = { 255 }局_参数串 = 到字节集 (局_网址 ) + 局_分割符 + 到字节集 (到文本 (局_分页 )) 集_参数串长度_2 = 取字节集长度 (局_参数串 )局_指针 = 申请内存 (取字节集长度 (局_参数串 ), 真)写到内存 (局_参数串, 局_指针, )启动线程 (&ID多线程采集, 局_指针, )延时 (10 ) 变量循环尾 ()变量名 | 类 型 | 静态 | 数组 | 备 注 | i | 整数型 | | | 局_ID采集 | 文本型 | | 0 | 临时索引 | 整数型 | | | 局_临时文本 | 文本型 | | | 局_参数串 | 字节集 | | | 局_参数串数组 | 字节集 | | 0 | 局_网址 | 文本型 | | | 局_分页 | 整数型 | | |
局_参数串 = 指针到字节集 (局参_参数, 集_参数串长度_2 )释放内存 (局参_参数 )局_参数串数组 = 分割字节集 (局_参数串, { 255 }, )局_网址 = 到文本 (局_参数串数组 [1 ])局_分页 = 到整数 (到文本 (局_参数串数组 [2 ])) 局_临时文本 = 网页访问u (局_网址 + “_” + 到文本 (局_分页 ) + “.html”)调试输出 (局_网址 + “_” + 到文本 (局_分页 ) + “.html”)文本_取中间_批量_正则方式 (局_临时文本, #常量_ID采集前标识, #常量_ID采集后标识, 局_ID采集 )计次循环首 (取数组成员数 (局_ID采集 ), i )进入许可区 (许可证 )如果 (倒找文本 (文本_取右边 (文本_取出中间文本 (局_ID采集 [i ], “来自:”, “</a>”), “>”), 编辑框_城市.内容, , 假) ≠ -1 或 倒找文本 (文本_取右边 (文本_取出中间文本 (局_ID采集 [i ], “医院:”, “</a>”), “>”), 编辑框_城市.内容, , 假) ≠ -1 )序号_关键字 = 序号_关键字 + 1 临时索引 = 超级列表框1. 插入表项 (, , , , , )超级列表框1. 置标题 (临时索引, 0, 到文本 (序号_关键字 )) 超级列表框1. 置标题 (临时索引, 1, 文本_取右边 (文本_取出中间文本 (局_ID采集 [i ], “来自:”, “</a>”), “>”)) 超级列表框1. 置标题 (临时索引, 2, 文本_取右边 (文本_取出中间文本 (局_ID采集 [i ], “医院:”, “</a>”), “>”)) 超级列表框1. 置标题 (临时索引, 3, 文本_取出中间文本 (局_ID采集 [i ], “sendmsg&to=”, #引号 )) 超级列表框1. 置标题 (临时索引, 4, 文本_取出中间文本 (局_ID采集 [i ], “发表于”, “'”)) 超级列表框1. 置标题 (临时索引, 5, 文本_去除文本 (文本_取出中间文本 (局_ID采集 [i ], “ontent” + #引号 + “>”, “</div>”), #常量_ID采集去除文本, 字符 (32 ), “</span>”, “<br/>”, “<br>”)) 退出许可区 (许可证 )计次循环尾 ()
但感觉以上思路会很乱,而且容易出差,因为线程感觉实在太多在运行了,不知道怎么投递,一个个进入线程,
比如
1、先得到易语言问答区里总面数,然后采集所有帖子链接,先投递一个链接进去执行
2、进入其中一个链接,得到回复总页数(可能1-100页等)
3、对该链接的所有回复分页用户ID进行采集,并完成。
4、再投递一个帖子链接。
就是分别控制,对这一块我不太懂,或是有没其它思路
比如先把所有帖子链接数全保存进一个数组,然后从数组得到一个个链接进行多线程,求教
补充内容 (2017-3-21 10:12):
如果有相关例子提供最好谢谢 |