搜索
查看: 15580|回复: 14

[网络] 自动抓取代理

    [复制链接]

5

主题

442

帖子

2420

积分

五级会员

Rank: 8Rank: 8

积分
2420
发表于 2011-11-6 16:58:14 | 显示全部楼层 |阅读模式
本帖最后由 神码 于 2011-11-7 12:33 编辑

使用 thread.works 实现多线程任务分派

import win.ui;
/*DSG{{*/
var winform = win.form(parent=...; right=515;text="代理aardio";bottom=526 )
winform.add(
spin={ text=
"<>";bottom=175;right=261;left=236;transparent=1;top=151;z=12;edge=1;cls="spin" };
listview={ bgcolor=16777215;bottom=472;text=
"listview";left=20;top=189;z=1;right=500;edge=1;cls="listview" };
editPorxyIpPattern={ bottom=73;text=
"!\d(\d+\.\d+\.\d+\.\d+)!\D\s*\:*(\d*)";left=131;multiline=1;top=44;z=3;right=496;edge=1;cls="edit" };
static={ bottom=36;align=
"right";text="代理抓取页面";left=37;top=14;z=6;right=122;transparent=1;cls="static" };
static2={ bottom=72;align=
"right";text="IP匹配模式";left=37;top=50;z=7;right=122;transparent=1;cls="static" };
static4={ bottom=142;align=
"right";text="期望关键字";left=56;top=120;z=9;right=122;transparent=1;cls="static" };
buttonRun={ bottom=183;right=482;left=324;top=146;z=10;text=
"检测有效代理地址";cls="button" };
static3={ bottom=107;align=
"right";text="测试网址";left=37;top=85;z=8;right=122;transparent=1;cls="static" };
buttonSetProxy={ bottom=515;right=495;left=333;top=477;z=13;text=
"设置为系统代理";cls="button" };
editExpectKeyWord={ bottom=142;text=
"Google";left=131;multiline=1;top=113;z=5;right=496;edge=1;cls="edit" };
editTestUrl={ bottom=107;text=
"http://www.google.com";left=131;multiline=1;top=78;z=4;right=496;edge=1;cls="edit" };
editThreadsCount={ num=1;bottom=176;text=
"25";left=201;top=151;z=11;right=234;edge=1;cls="edit" };
editProxyUrl={ bottom=38;text=
"http://www.sooip.cn/zuixindaili/2011-11-01/2610.html";left=131;multiline=1;top=9;z=2;right=496;edge=1;cls="edit" }
)
/*}}*/

winform.spin.buddy = winform.editThreadsCount
winform.listview.insertColumn(
"代理IP:端口",250)
winform.listview.insertColumn(
"速度",200)

import inet.whttp;

getIpList  =
function(url,pattern){
   
var http = inet.whttp()
   
var str = http.get(url);
   
if(str){
        
var tab = {}
        
for ip,port in string.gmatch( str,pattern) {  
            ..table.push( tab,ip +
":" + (port : 80 ) )
        }
        
return tab;
    }
    http.close();
}

import thread.works;  
winform.show()  

winform.buttonRun.oncommand =
function(id,event){
    winform.buttonRun.disabled =
true;
    winform.listview.clear()
   
   
var works = thread.works( tonumber(winform.editThreadsCount.text),
        
function(...) {
            
import inet;
            
import inet.http;
            
import time.performance;
            
var http = inet.http()
            http.flags = 0x80000000
/*_INTERNET_FLAG_RELOAD*/ | 0x4000000/*_INTERNET_FLAG_DONT_CACHE*/  
            inet.setProxy(
"HTTP://" + ..., ,http.session )
            
            
var tick = time.performance.tick()
            
var str = http.get( thread.get("PROXY_TEST_URL") )
            
if( str ? string.find(str,thread.get("PROXY_TEST_KEYWORD") ) ){  
               
return {  ... ; ( time.performance.tick() - tick) }
            }   
   
        }
    );

   
var tProxy = getIpList(winform.editProxyUrl.text,winform.editPorxyIpPattern.text);
   
    thread.set(
"PROXY_TEST_URL",winform.editTestUrl.text )
    thread.set(
"PROXY_TEST_KEYWORD",winform.editExpectKeyWord.text)

   
for(k,proxyIp in tProxy){
        works.push(proxyIp)
    }
   
   
while( works.busy() ) {
        win.delay(10)
        
var ret =  works.pop(1) ;
        
if( #ret ){
            
var row = winform.listview.addItem(  ret[1] );
            winform.listview.setItemText(
tostring(ret[2]),row,2)
        }
    }
    winform.buttonRun.disabled =
false
}

import inet.conn
winform.buttonSetProxy.oncommand =
function(id,event){
   
var proxy =  winform.listview.getItemText( winform.listview.selIndex);
    winform.msgbox( winform.listview.getItemText( winform.listview.selIndex) )
    inet.conn.setProxy( ,
"HTTP://" + proxy)
}

winform.show()
win.loopMessage();


分享一点心得:
UI线程、与工作线程应各司其职。
没有必要在工作线程里去访问UI对象,界面线程只做界面应该做的事。

如果在工作线程里用了 import win.ui.xxxxx 之类的代码.
那一定是一个凌乱、糟糕的设计.






评分

参与人数 2专家分 +100 银币 +30 收起 理由
papapa314 + 30 很给力!
qqmmcc + 100 很给力!

查看全部评分

回复

使用道具 举报

117

主题

1237

帖子

6592

积分

六级会员

Rank: 9Rank: 9Rank: 9

积分
6592
发表于 2011-11-6 17:20:28 | 显示全部楼层

顶了 好东西

顶了 好东西
我是菜鸟...
回复

使用道具 举报

6

主题

167

帖子

903

积分

荣誉会员

爱生活,爱拉芳。

Rank: 8Rank: 8

积分
903
发表于 2011-11-7 11:55:42 | 显示全部楼层

收藏了。下午再学。

收藏了。下午再学。
专注、深入。
回复

使用道具 举报

57

主题

256

帖子

1436

积分

四级会员

Rank: 6Rank: 6

积分
1436
发表于 2011-11-7 12:10:17 | 显示全部楼层

很好的,强烈支持的

很好的,强烈支持的
回复

使用道具 举报

52

主题

1340

帖子

7326

积分

荣誉会员

Rank: 8Rank: 8

积分
7326
发表于 2011-11-8 00:23:25 | 显示全部楼层

[i=s] 本帖最后由 qqmmcc 于 2011-11-8 00:26 编辑 [/i] [quote]如果在工作线程里用了 import win.ui.xx

本帖最后由 qqmmcc 于 2011-11-8 00:26 编辑
如果在工作线程里用了 import win.ui.xxxxx 之类的代码.
那一定是一个凌乱、糟糕的设计.

这个真是要认真思考。。。
界面线程是不是可以理解为“主线程”呢?
回复

使用道具 举报

51

主题

265

帖子

1548

积分

四级会员

Rank: 6Rank: 6

积分
1548
发表于 2011-11-8 09:02:13 | 显示全部楼层

顶了, 这个许多值得学习啊。

顶了, 这个许多值得学习啊。
回复

使用道具 举报

48

主题

593

帖子

3336

积分

五级会员

Rank: 8Rank: 8

积分
3336
发表于 2011-11-8 09:34:28 | 显示全部楼层

强悍,学习

强悍,学习
回复

使用道具 举报

12

主题

679

帖子

4008

积分

荣誉会员

子非魚、安知魚之樂

Rank: 8Rank: 8

积分
4008
发表于 2011-11-9 21:30:19 | 显示全部楼层

[quote][size=2][color=#999999]papapa314 发表于 2011-11-9 20:50[/color] [url=forum.p

papapa314 发表于 2011-11-9 20:50
请问, function(...) 和 return {  ...  里面的这三个点是什么意思呢?一直没有搞清楚。望不吝赐教,谢谢! ...

可变参数
1、在形参列表尾部定义可变参数
在定数定义的形参列表尾部,可以用三个连续的圆点表示可变参数(不定参数)。
2、在实参列表尾部使用可变参数

参考帮助 使用参数
回复

使用道具 举报

2

主题

77

帖子

549

积分

三级会员

Rank: 4

积分
549
发表于 2011-12-5 20:26:41 | 显示全部楼层

不错的东东,谢谢分享

不错的东东,谢谢分享
回复

使用道具 举报

16

主题

90

帖子

673

积分

三级会员

Rank: 4

积分
673
QQ
发表于 2012-8-13 15:50:50 | 显示全部楼层

好东西。

好东西。
回复

使用道具 举报

2

主题

23

帖子

196

积分

一级会员

Rank: 2

积分
196
发表于 2013-4-7 20:39:24 | 显示全部楼层

这个太牛了

这个太牛了
回复

使用道具 举报

0

主题

3

帖子

16

积分

新手入门

Rank: 1

积分
16
发表于 2013-11-12 14:01:32 | 显示全部楼层

好定西,支持

好定西,支持
回复

使用道具 举报

9

主题

96

帖子

622

积分

三级会员

叫我何细尔

Rank: 4

积分
622
QQ
发表于 2013-11-12 15:21:29 | 显示全部楼层

{:3_41:}今天还找代理用来着。。。。来论坛一看就发现了这帖子。先收藏,工作太多,这么好的源码舍不得不收藏

今天还找代理用来着。。。。来论坛一看就发现了这帖子。先收藏,工作太多,这么好的源码舍不得不收藏
回复

使用道具 举报

0

主题

10

帖子

301

积分

二级会员

Rank: 3Rank: 3

积分
301
发表于 2014-8-30 10:02:37 | 显示全部楼层

感谢版主分享! 学习学习.

感谢版主分享!
学习学习.
回复

使用道具 举报

2

主题

36

帖子

307

积分

二级会员

Rank: 3Rank: 3

积分
307
发表于 2014-9-3 06:04:33 | 显示全部楼层

好东西,顶!!

好东西,顶!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-10-16 18:55 , Processed in 0.078125 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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