开发者社区> 技术小胖子> 正文

黑客工具_Python多线程爬虫抓取扫描器

简介:
+关注继续查看

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# -*- coding:utf-8 -*-
__author__="iplaypython.com"
  
import os
import urllib2
import threading
import Queue
import time
import random
  
= Queue.Queue() # Queue产生一个队列,有3种类型队列 默认用 FIFO队列
threading_num = 5 # 开启5个线程
  
# 扫描本地IP或域名
domain_name = "http://127.0.0.1"
# 百度蜘蛛UA
Baidu_spider = "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
# 不需要的文件过滤列表
exclude_list = ['.jpg''.gif''.css''.png''.js''.scss'
  
proxy_list = # 代理服务器,可能已经失效,换为自己的
    {'http''117.28.254.130:8080'},
    {'http''118.144.177.254:3128'},
    {'http''113.118.211.152:9797'},
]
  
# 打开字典文件,开始过滤不需要的文件路径
with open("/home/leo/app_txt/wordpress.txt" "r") as lines:
    for line in lines:
        line = line.rstrip()
        if os.path.splitext(line)[1not in exclude_list:
            q.put(line) #将line传入到队列 q 中
  
# 扫描器方法
def crawler():
    while not q.empty(): # 循环
        path = q.get() 将line从队列 q 中取出来
  
        url = "%s%s" % (domain_name, path) # 组合url地址,用于下一步提交
  
        random_proxy = random.choice(proxy_list) # 随机使用一个代理服务器
        proxy_support = urllib2.ProxyHandler(random_proxy)
        opener = urllib2.build_opener(proxy_support)
        urllib2.install_opener(opener)
  
        headers = {} 
        headers['User-Agent'= Baidu_spider # 蜘蛛的头部信息
        # 玩蛇网 www.iplaypython.com
  
        request = urllib2.Request(url, headers=headers) 
  
        try:
            response = urllib2.urlopen(request)
            content = response.read()
  
            if len(content): # 内容不为空的情况下返回状态码、路径
                print "Status [%s]  - path: %s" % (response.code, path)
  
            response.close()
            time.sleep(1# 休息一会儿,防止速度过快连接数过大被封掉IP
        except urllib2.HTTPError as e:
            # print e.code, path
            pass # 异常处理,先暂时pass掉
  
if __name__ == '__main__':
    # 创建多线程并指明函数的入口为crawler,以后还可以传参进去
    for in range(threading_num): 
        = threading.Thread(target=crawler)
        t.start()


    # 上面代码,我们一共导入了6个模块都是接下来需要使用的功能模块,

    # os作用是对我们不需要扫描的后缀名文件进行筛选,     

    # urllib2负责抓取,而threading就是我们的Python多线程模块,     

    # 这次还需要用到Queue这个保证线程安全的队列模块,     

    # 其它两个比较简单,一个是随机模块random,另一个时间模块time

转载地址:http://www.iplaypython.com/crawler/multithreading-crawler-scanner.html





      本文转自027ryan  51CTO博客,原文链接:http://blog.51cto.com/ucode/1871010,如需转载请自行联系原作者






版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
python爬虫用到的工具和类库
python爬虫用到的工具和类库
61 0
Python 开发工具集:关于文档、测试、调试、程序的优化和分析
Python已经演化出了一个广泛的生态系统,该生态系统能够让Python程序员的生活变得更加简单,减少他们重复造轮的工作。同样的理念也适用于工具开发者的工作,即便他们开发出的工具并没有出现在最终的程序中。本文将介绍Python程序员必知必会的开发者工具。
44 0
Python 多线程居然是 —— 假的?
不过最近有位读者提问: Python 的多线程真是假的吗? 一下子点到了 Python 长期被人们喜忧参半的特性 —— GIL 上了。 到底是怎么回事呢?今天我们来聊一聊。
76 0
2013年度Python运维工具
Pycoders周刊根据读者对周刊文章的点击数据,评选出了2013年最受关注的Python运维工具。
23 0
Python基础框架和工具
最近在学Python金融大数据分析,在安装Python进行大数据分析的环境时遇到很多问题,例如:在安装pandas包时候就要到各种错误,总是缺少很多安装包,最后发现利用Python的Anaconda进行科学计算环境的搭建非常方便。
4108 0
21114
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载