python爬取整个网页的数据_免费网页数据抓取采集 python实现一个多线程网页下载器...
#!/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实现一个多线程网页下载器...相关推荐
- 爬取亚马逊评论_如何利用插件抓取亚马逊评论和关键词?
如何抓取亚马逊的商品评价? 原本想给大家介绍使用市面上常见或者付费的爬虫工具,直到我发现了这个Chrome的免费插件 --Instant Data Scraper,当时我差点被感动哭了.比起学编程语言 ...
- python抓取直播源 并更新_电视直播源抓取工具箱
很多时候你们在pc端看电视直播,都会出现直播源失效的情况,这样就可以用到电视直播源抓取工具箱,帮助你们自动抓取最新的直播源,让你们能够随时的观看自己喜欢的电视内容. 软件简介: 经常看到大家电视直播源 ...
- 后羿采集器怎么导出数据_免费爬虫工具:后羿采集器如何采集同花顺圈子评论数据...
本文主要介绍如何使用后羿采集器的智能模式,免费采集同花顺圈子首页短评的发布时间.发布内容.作者及阅读量等信息. 采集工具简介: 后羿采集器是一款基于人工智能技术的网络爬虫软件,只需要输入网址就能够自动 ...
- python爬去新浪微博_Python 爬虫如何机器登录新浪微博并抓取内容?
啊喂,你们不要只收藏不点赞啊 = = 稍微更新一下,多说两句. 虽然爬取移动端比较简单,但是爬一点难的东西对身体好对吧. 总结一下这个模拟登陆涉及的东西: 1.用户名经过base64加密. 2.输入用 ...
- python爬取b站评论_Python爬虫框架:scrapy抓取B站博人传评论数据
1. B站博人传评论数据爬取简介 今天想了半天不知道抓啥,去B站看跳舞的小姐姐,忽然看到了评论,那就抓取一下B站的评论数据,视频动画那么多,也不知道抓取哪个,选了一个博人传跟火影相关的,抓取看看.网址 ...
- python find()效率_基于python分别采用同步与异步(协程)方式抓取时光网TOP100电影...
欢迎各位小哥哥小姐姐阅读本的文章,对大家学习有帮助,请点赞加关注哦!!!!!!!!!! 您的点赞和关注将是我持续更新的动力呢.^v^ 有不懂的问题可以私聊我哦! 如题,同步运行就是python按照代码 ...
- stata抓取html,(5)详解 stata 爬虫抓取网页上的数据 part 1
*案例:抓取 http://www.tjcn.org 中国统计信息网上前50页(每页包含20个市的数据)的1000个地区的GDP数据.使用stata版本为 stata13,与12版本和14版本都不兼容 ...
- 关于fi dd ler 手机抓包 网卡地址地址_利用无线路由器如何抓取手机网络数据包【详细介绍】...
当用户运用手机访问网络时,手机在不断接受与发送数据包,而这些数据包中包含了大量的用户信息,包括各种账号信息.聊天信息.发送接收文件.邮件.浏览的网页等.虽然很多信息是加密传输的,但还是会有大量信息是明 ...
- html 抓取移动,网页采集提取数据教程,以自定义抓取方式为例 - 八爪鱼采集器...
网页上的数据类型十分丰富:文本.图片.链接.源码等.在数据采集过程中,不同类型的数据类型,对应的抓取方式是不同的.本文将讲解常见的数据类型与其抓取方式. 示例网址:https://movie.doub ...
- 大数据之内衣的诱惑——抓取电商网站评论的秘密
大数据之内衣的诱惑--抓取电商网站评论的秘密 前言 前段时间在知乎上看到有大神利用淘宝的评论信息,抓取购买内衣的型号和地域,分析出不同省份的女性身材指数分布.受之启发,我也动手研究了一下京东的评论信息 ...
最新文章
- 数据蒋堂 | 为什么我们需要C程序员
- 用Java语言,写一个植物大战僵尸简易版!
- u盘读写测试_如何提高u盘读写速度 提高u盘读写速度方法【详细步骤】
- SECD machine
- HDU1181:变形课(DFS)
- angular linux 打包不成功_Angular Library 系列之 构建和打包
- 46 WM配置-作业-库存盘点-维护编码范围(盘点凭证和转储单TO)
- 前端依赖包管理-bower
- oracle,如何查看视图结构,获得视图中的字段名称、字段类型、字段长度等。...
- Linux环境下的LD_PRELOAD:库预加载
- 关于二叉树路径的遍历和处理
- BluetoothLE-Multi-Library 一个能够连接多台蓝牙设备的库,它可以作为client端,也可以为server端。支持主机/从机,外围设备连接。...
- 如何在 Linux 终端中一次运行多个 Linux 命令(初学者教程)
- RPA - 前置机虚拟化U盾识别方案
- 【渝粤题库】国家开放大学2021春2130药物治疗学题目
- 洛克菲勒写给儿子的38封信
- 拯救者笔记本ubuntu亮度调节
- 张志华-统计机器学习
- 红黑树详解三:红黑树的删除
- Josh‘s Notes: SystemVerilog 验证 (Part 1 — 验证导论)
热门文章
- MultiThread SkinnedMeshRenderer原理及实现
- 年后胖三斤,减肥你准备好了吗
- 有一个勤奋好学积极向上的男朋友是一种什么样的体验…
- 2021筠连中学高考成绩查询,2021年筠连县中学升学率高不高?
- 软件缺陷智能分析技术(1) - 技术地图
- 2021-2022学年广州外国语学校九年级第一学期12月考英语试题
- 商品新零售行业——客户价值分析驾驶舱(附详细操作)
- 中职计算机英语听课记录,英语听课记录完整版).doc
- 连阿里都在用它处理亿万级数据统计,论其对Java程序员的重要性!
- oracle 文件大小为零,windows Oracle数据文件大小为0的恢复case