#!/usr/bin/python | |
# -*- coding:utf-8 -*- | |
import urllib | |
import urllib2 | |
import csv | |
def post(url,data): | |
"""for score post """ | |
req = urllib2.Request(url) | |
data = urllib.urlencode(data) | |
opener = urllib2.build_opener() | |
response = opener.open(req,data) | |
lnum = 0 | |
result ="" | |
for line in response: | |
lnum += 1 | |
if lnum == 81: | |
if(line.find('未能查到') != -1): | |
return "\nnot found!" | |
if(lnum >= 80) and (lnum <=83): | |
result +=line | |
return result | |
def main(): | |
"""main""" | |
postUrl ="http://120.197.89.132:8800/myExamWeb/wap/school/gaokao/loveHS!dispatcher.action" | |
mobileNo = "13800138000" | |
birthdayRange = ['9310','9311','9312','9401','9402','9403','9404','9405','9406',\ | |
'9407','9408','9409','9410','9411','9412','9501','9502','9503','9504','9505',\ | |
'9506','9507','9508','9509','9510','9511','9512','9601','9602','9603'] | |
reader = csv.reader(open("Book1.csv")) | |
for examReferenceNo,userName in reader: | |
print examReferenceNo | |
print userName | |
open("result.txt",'a+').write("\n"+examReferenceNo+userName+"\n") | |
for i in range(len(birthdayRange)): | |
print birthdayRange[i] | |
birthday = birthdayRange[i] | |
data = {'id':'14356B43-7F8B-4B00-BB13-F95841F33C46','userName':userName,'examReferenceNo':examReferenceNo,\ | |
'birthday':birthday,'mobileNo':mobileNo} | |
response = post(postUrl,data) | |
print response | |
open("result.txt",'a+').write(response) | |
open("result.txt",'a+').write('<p>' + birthday + '</p>\n') | |
if __name__ == '__main__': | |
main() |
![]() |
1
SR1 2013-07-20 21:48:58 +08:00 ![]() 会不会是你发起连接过多,
被服务器限制了或者服务器本身性能不佳所以卡住了 你设置一下超时时间,如果超时的话重新发起一次请求试试 |
![]() |
2
yuelang85 2013-07-20 23:05:19 +08:00 ![]() 同意1楼,设定下超时看看?
别的问题没看出来,看出两个地方有性能问题: 第一个: 22行:你这里字符串拼接用的是 加法,这样会导致产生八十多个字符串对象,而且第N+1号字符串是第N号字符串超集。如果文本够大,你这个将会严重侵占内存。建议改成这种形式(行首句点表示缩进): result = [] for line in response: ....result.append(line) result_str = ''.join(result) 第二个,37行,三处问题。 1,range这个函数会生成list对象,浪费,建议使用xrange,他生成 迭代器,可以提高速度。 2,i这个变量,实际上是做为坐标取birthdayRange的值,那么这里就没有必要len(birthdayRange),而且还range一下。直接for i in birthdayRange,迭代birthdayRange的各个元素。 3,range(len(birthdayRange))在这种上下文中,用起来不好(xrange也是),比较高效的用法: i = 0 max = len(birthdayRange) while i < max: #这里用max是因为如果直接用len(),len函数会被调用len(birthdayRange) 遍。 ....pass #该干啥干啥 ....i+=1 如果你又需要序号i,有需要使用birthdayRange的元素,那么用enumerate。 |
![]() |
3
pubby 2013-07-20 23:13:35 +08:00 via Android
抓取这种活,不要太爆力,自觉保持一个正常点的频率。
|
![]() |
5
Zuckonit 2013-07-22 08:44:40 +08:00
strace 看一下
|
![]() |
6
z50hz1988 2013-07-22 17:54:02 +08:00
用代理哇... 少年! 偷东西你还大义凛然的... 这样不好吧.
|