#!/usr/bin/envaR.jz7Y^0l#sgL'}0

# -*- coding:utf-8 -*- 51Testing软件测试网!`G2e3a`k2Ovr

import urllib, httplib 51Testing软件测试网B*r]"xn&{c5s6v[

import thread 51Testing软件测试网O?F5D5f]b)f7e5H

import time 51Testing软件测试网9[5w2g1K&\2q

from Queue import Queue, Empty, Full

c9hF@a%G"D(sK3T%U0

HEADERS = {"Content-type": "application/x-www-form-urlencoded",

.P#q!}'Et!L*J"K0

'Accept-Language':'zh-cn', 51Testing软件测试网q'dGCi1e

QO

'User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.0)', 51Testing软件测试网W9^&cRn/g}}9`

"Accept": "text/plain"}

6lHORX/s3th)]U0

UNEXPECTED_ERROR = -1 51Testing软件测试网Li9r@6U `

POST = 'POST'

s3e8h!}m0

GET = 'GET' 51Testing软件测试网A,pN1V(?e

def base_log(msg):

n;X#~z@ KU'b0

print msg 51Testing软件测试网E/vS#z^y$MRv

def base_fail_op(task, status, log): 51Testing软件测试网B+C9X-c3Xm

log('fail op. task = %s, status = %d'%(str(task), status))

;c9n.JcAKuK"^0

def get_remote_data(tasks, results, fail_op = base_fail_op, log = base_log): 51Testing软件测试网g/v9]1dlXJ8@wP

while True: 51Testing软件测试网Jxv@3i:Dp4DzCz

task = tasks.get() 51Testing软件测试网P8|?C%E7NeZ

try:

C2oyfZD#m0

tid = task['id']

;oK/X5eF"H0

hpt = task['conn_args'] # hpt <= host:port, timeout

;{'[JHp+I oqj0v

` H0

except KeyError, e: 51Testing软件测试网m]3jUa9L

log(str(e)) 51Testing软件测试网Z!Aiz:\&pk?P:@

continue

V`:s.r8{EU)[:t0

log('thread_%s doing task %d'%(thread.get_ident(), tid)) 51Testing软件测试网9x2vTY$r Y9Ie

#log('hpt = ' + str(hpt)) 51Testing软件测试网%r/]2X \^;C#h$vX

conn = httplib.HTTPConnection(**hpt) 51Testing软件测试网'M4Dr-\)Eknq~t#}

51Testing软件测试网v,Q[!QF,F!x

try: 51Testing软件测试网 gNp!nC

params = task['params'] 51Testing软件测试网WW"E3Z.e

except KeyError, e: 51Testing软件测试网

`moz-q.A1A/Q

params = {}

pz;g`

N0

params = urllib.urlencode(params)

`3Nya`?0

#log('params = ' + params)

Q\Q\H a;?*Pr%}/Q0

51Testing软件测试网WiN ?-W$b*X-pR

try:

+pM;A~,om$ZJ-H^1Y0

method = task['method']

-lT:V`$Ws7t;U0

except KeyError: 51Testing软件测试网j&Ju Dsk

method = 'GET'

BxTN}#{0

#log('method = ' + method)

3m'\p-g%]B6H.JB|0

51Testing软件测试网aR"IE2F3M

try: 51Testing软件测试网s1P6a0DqiNN

url = task['url']

"`8{^Q,X'RI(iN-V0

except KeyError:

$L+Kl8DL7b@0

url = '/' 51Testing软件测试网Y'jw^uim

#log('url = ' + url)

e8l6K._^-cBM,F'E0

9Hj3jDWI6oK:w{*io0

headers = HEADERS

0d fN)t[1GF3R/[Z0

try:

5r7l5R-JB"Dz'_8O%L0

tmp = task['headers'] 51Testing软件测试网 O^ZzT,W6uU

except KeyError, e:

)^t

f7[oB&X0

tmp = {}

!sc4F4W^3e0

headers.update(tmp) 51Testing软件测试网sEf(@%u8RR+d

#log('headers = ' + str(headers)) 51Testing软件测试网 b;Z W/m6`&b&mv%?lC

headers['Content-Length'] = len(params) 51Testing软件测试网1r#]q(aC1f2v

RL/g&m*F6Qxa0

try: 51Testing软件测试网

H-C!P-i)A)x

if method == POST: 51Testing软件测试网O?5u1]VlJ^

conn.request(method, url, params, headers)

Bk'{ulY4w8i/U0

else: 51Testing软件测试网 ^~G

^(K7pe6`Z_

conn.request(method, url + params)

9X.z2M+Zt0

response = conn.getresponse() 51Testing软件测试网9ah%CuIO |9M*f!g

except Exception, e:

,d0z8yfp0X,GF+p%~$V0

log('request failed. method = %s, url = %s, params = %s headers = %s'%( 51Testing软件测试网kg5}h s+Q6m_0S1v

method, url, params, headers)) 51Testing软件测试网'M%dp(\)N-O

log(str(e)) 51Testing软件测试网[d@5C

l1Qx:y8w

fail_op(task, UNEXPECTED_ERROR, log) 51Testing软件测试网6[9KJZ"q|%y

continue 51Testing软件测试网P1V!X&Ib O^3F

TSs7n%Ph0

if response.status != httplib.OK: 51Testing软件测试网vE b:g@]

fail_op(task, response.status, log) 51Testing软件测试网c[r2Fy\7y7G~0}Svx

continue

ya*R9U"^%M0

51Testing软件测试网&Zd5ioH9c)g7Q

yJ

data = response.read()

&M#R;a.Y(qj0

results.put((tid, data), True) 51Testing软件测试网;q{w@1f|6Xy0q-m

Zq^0kTsI6U+a0

class HttpPool(object):

B`R'C"FY#vX8Wg0

def __init__(self, threads_count, fail_op, log):

_5Fe;g0yS0

self._tasks = Queue() 51Testing软件测试网o^!^+z2Hl

self._results = Queue() 51Testing软件测试网}I/IvptE

o,L"Y2|p0

for i in xrange(threads_count):

PV3h;k"FSE6rGT0

thread.start_new_thread(get_remote_data,(self._tasks, self._results, fail_op, log)) 51Testing软件测试网sQE;KZ+w+\(Z

51Testing软件测试网.Yz(qD/@@r

def add_task(self, tid, host, url, params, headers = {}, method = 'GET', timeout = None):

R9F:LlDV2S0

task = {

5U,@(ozE!d0c0

'id' : tid, 51Testing软件测试网_.n@/e`#}/Uc%i8?

'conn_args' : {'host' : host} if timeout is None else {'host' : host, 'timeout' : timeout},

5U'}0fFTqvX/c+}U0

'headers' : headers,

}_4JO k-Y^0

'url' : url,

4T?W K/D`N:S0

'params' : params, 51Testing软件测试网"dMO9HG}Y'?evs

'method' : method,

9u*IMu^g0

} 51Testing软件测试网rR.DWf

try:

7T@*i8u:R3zpt0

self._tasks.put_nowait(task)

U|&Hi2kj0

except Full:

:f'U$RN/D0

returnFalse 51Testing软件测试网4Rz+`S|@K

return True

2N@T&L1T9a0

xF!I#t

S,I0

def get_results(self): 51Testing软件测试网Oc~Zv

results = []

Rc5|-udd"s0

while True: 51Testing软件测试网z/quE`^

l;{m|

try:

7sAnK)DAPf~4Y0

res = self._results.get_nowait()

l?6zv*G_-X2r~0

except Empty: 51Testing软件测试网sH7l-K(Xze

break

-{Q:z.N|*S0

results.append(res) 51Testing软件测试网g$}1x.?q

return results

!SiQ"Z(k%{l~1\0

51Testing软件测试网'g&]i)]y;`EH`

defgoogle(task_count, threads_count):

1YeLU#T+`2[#U0

hp = HttpPool(threads_count, base_fail_op, base_log) 51Testing软件测试网)SgU8uL

for i in xrange(task_count): 51Testing软件测试网].CmMB!Ko!r

if hp.add_task(i, 51Testing软件测试网@/`k:Z2Q'J;q-C

'www.google.cn',

:cDA0hh"o#q|0

'/search?', 51Testing软件测试网-h7Nm$f7]%`

{'q' : 'lai'},

Q|+o)\q5Ae.m0

# method = 'POST'

3f

i.td3o.\q8l0J0

):

AsG&y5ss!q#E0

print 'add task successed.' 51Testing软件测试网9V_.I$W

W.qnZ6c

51Testing软件测试网%s)A)^T@

while True: 51Testing软件测试网;U+cxiS5h!U

results = hp.get_results() 51Testing软件测试网$pB/E&^$w5j

if not results: 51Testing软件测试网J7j#g'Bn5k

time.sleep(1.0 * random.random()) 51Testing软件测试网 }z\NPQ.@q

for i in results:

V4p6f*U;h:lE:W0

print i[0], len(i[1]) 51Testing软件测试网z*pj{O

# print unicode(i[1], 'gb18030') 51Testing软件测试网Swu[O!Y0k7No

.Z4fbv#S`d0

if __name__ == '__main__': 51Testing软件测试网/Gi8ZG6M;@

import sys, random 51Testing软件测试网*d+m,yRY(s-Z{U

task_count, threads_count = int(sys.argv[1]), int(sys.argv[2]) 51Testing软件测试网0BTwL6_Ph

test_google(task_count, threads_count)

python爬取整个网页的数据_免费网页数据抓取采集 python实现一个多线程网页下载器...相关推荐

  1. 爬取亚马逊评论_如何利用插件抓取亚马逊评论和关键词?

    如何抓取亚马逊的商品评价? 原本想给大家介绍使用市面上常见或者付费的爬虫工具,直到我发现了这个Chrome的免费插件 --Instant Data Scraper,当时我差点被感动哭了.比起学编程语言 ...

  2. python抓取直播源 并更新_电视直播源抓取工具箱

    很多时候你们在pc端看电视直播,都会出现直播源失效的情况,这样就可以用到电视直播源抓取工具箱,帮助你们自动抓取最新的直播源,让你们能够随时的观看自己喜欢的电视内容. 软件简介: 经常看到大家电视直播源 ...

  3. 后羿采集器怎么导出数据_免费爬虫工具:后羿采集器如何采集同花顺圈子评论数据...

    本文主要介绍如何使用后羿采集器的智能模式,免费采集同花顺圈子首页短评的发布时间.发布内容.作者及阅读量等信息. 采集工具简介: 后羿采集器是一款基于人工智能技术的网络爬虫软件,只需要输入网址就能够自动 ...

  4. python爬去新浪微博_Python 爬虫如何机器登录新浪微博并抓取内容?

    啊喂,你们不要只收藏不点赞啊 = = 稍微更新一下,多说两句. 虽然爬取移动端比较简单,但是爬一点难的东西对身体好对吧. 总结一下这个模拟登陆涉及的东西: 1.用户名经过base64加密. 2.输入用 ...

  5. python爬取b站评论_Python爬虫框架:scrapy抓取B站博人传评论数据

    1. B站博人传评论数据爬取简介 今天想了半天不知道抓啥,去B站看跳舞的小姐姐,忽然看到了评论,那就抓取一下B站的评论数据,视频动画那么多,也不知道抓取哪个,选了一个博人传跟火影相关的,抓取看看.网址 ...

  6. python find()效率_基于python分别采用同步与异步(协程)方式抓取时光网TOP100电影...

    欢迎各位小哥哥小姐姐阅读本的文章,对大家学习有帮助,请点赞加关注哦!!!!!!!!!! 您的点赞和关注将是我持续更新的动力呢.^v^ 有不懂的问题可以私聊我哦! 如题,同步运行就是python按照代码 ...

  7. stata抓取html,(5)详解 stata 爬虫抓取网页上的数据 part 1

    *案例:抓取 http://www.tjcn.org 中国统计信息网上前50页(每页包含20个市的数据)的1000个地区的GDP数据.使用stata版本为 stata13,与12版本和14版本都不兼容 ...

  8. 关于fi dd ler 手机抓包 网卡地址地址_利用无线路由器如何抓取手机网络数据包【详细介绍】...

    当用户运用手机访问网络时,手机在不断接受与发送数据包,而这些数据包中包含了大量的用户信息,包括各种账号信息.聊天信息.发送接收文件.邮件.浏览的网页等.虽然很多信息是加密传输的,但还是会有大量信息是明 ...

  9. html 抓取移动,网页采集提取数据教程,以自定义抓取方式为例 - 八爪鱼采集器...

    网页上的数据类型十分丰富:文本.图片.链接.源码等.在数据采集过程中,不同类型的数据类型,对应的抓取方式是不同的.本文将讲解常见的数据类型与其抓取方式. 示例网址:https://movie.doub ...

  10. 大数据之内衣的诱惑——抓取电商网站评论的秘密

    大数据之内衣的诱惑--抓取电商网站评论的秘密 前言 前段时间在知乎上看到有大神利用淘宝的评论信息,抓取购买内衣的型号和地域,分析出不同省份的女性身材指数分布.受之启发,我也动手研究了一下京东的评论信息 ...

最新文章

  1. 数据蒋堂 | 为什么我们需要C程序员
  2. 用Java语言,写一个植物大战僵尸简易版!
  3. u盘读写测试_如何提高u盘读写速度 提高u盘读写速度方法【详细步骤】
  4. SECD machine
  5. HDU1181:变形课(DFS)
  6. angular linux 打包不成功_Angular Library 系列之 构建和打包
  7. 46 WM配置-作业-库存盘点-维护编码范围(盘点凭证和转储单TO)
  8. 前端依赖包管理-bower
  9. oracle,如何查看视图结构,获得视图中的字段名称、字段类型、字段长度等。...
  10. Linux环境下的LD_PRELOAD:库预加载
  11. 关于二叉树路径的遍历和处理
  12. BluetoothLE-Multi-Library 一个能够连接多台蓝牙设备的库,它可以作为client端,也可以为server端。支持主机/从机,外围设备连接。...
  13. 如何在 Linux 终端中一次运行多个 Linux 命令(初学者教程)
  14. RPA - 前置机虚拟化U盾识别方案
  15. 【渝粤题库】国家开放大学2021春2130药物治疗学题目
  16. 洛克菲勒写给儿子的38封信
  17. 拯救者笔记本ubuntu亮度调节
  18. 张志华-统计机器学习
  19. 红黑树详解三:红黑树的删除
  20. Josh‘s Notes: SystemVerilog 验证 (Part 1 — 验证导论)

热门文章

  1. MultiThread SkinnedMeshRenderer原理及实现
  2. 年后胖三斤,减肥你准备好了吗
  3. 有一个勤奋好学积极向上的男朋友是一种什么样的体验…
  4. 2021筠连中学高考成绩查询,2021年筠连县中学升学率高不高?
  5. 软件缺陷智能分析技术(1) - 技术地图
  6. 2021-2022学年广州外国语学校九年级第一学期12月考英语试题
  7. 商品新零售行业——客户价值分析驾驶舱(附详细操作)
  8. 中职计算机英语听课记录,英语听课记录完整版).doc
  9. 连阿里都在用它处理亿万级数据统计,论其对Java程序员的重要性!
  10. oracle 文件大小为零,windows Oracle数据文件大小为0的恢复case