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
|
#!/usr/bin/python3 import
os import
os.path import
urllib.request import
chardet import
time import
re from
multiprocessing.dummy import
Pool as ThreadPool def
url_content_read(url): res
=
urllib.request.urlopen(url).read() return
res def
url_socket_list_pharse(socket_raw_info_data): p
=
re. compile (r '<td>(\d+\.\d+\.\d+\.\d+)</td><td>(\d+)</td>' ) socket_info_list
=
p.findall(socket_raw_info_data) socket_pharsed_info_list
=
[] for
s_info in
socket_info_list: socket_pharsed_info_list.append( "%s:%s" % (s_info[ 0 ],s_info[ 1 ])) return
socket_pharsed_info_list if
__name__ = =
"__main__" : urls
=
[] for
i in
range ( 1 , 42 ): urls.append( "http://www.proxy.com.ru/list_%d.html" % (i)) start_time
=
time.time() _pool
=
ThreadPool( 4 ) results
=
_pool. map (url_content_read,urls) _pool.close() _pool.join() print ( "time
spent: %f" % (time.time()
-
start_time)) p
=
re. compile (r 'http://[\w|\d|-|\.]+[:\d+]*[/|\w|\d|\.|%|@|&|\*|\+|#|\?|\=|\-]+' ) #對獲取的結果網頁進行字符串的編碼解碼 socket_info_raw_data_list
=
[] for
res in
results: det_res
=
chardet.detect(res) #print(det_res) if
det_res[ 'encoding' ]
= =
'utf-8' : socket_info_raw_data_list.append(res.decode( 'utf-8' , 'ignore' )) elif
det_res[ 'encoding' ]
= =
'GB2312' : socket_info_raw_data_list.append(res.decode( 'GB2312' , 'ignore' )) else : socket_info_raw_data_list.append(res.decode( 'gbk' , 'ignore' )) #對結果進行進一步的解析 start_time
=
time.time() _pool
=
ThreadPool( 40 ) results
=
_pool. map (url_socket_list_pharse,socket_info_raw_data_list) _pool.close() _pool.join() print ( "time
spent: %f" % (time.time()
-
start_time)) #最後對結果進行輸出 fp
=
open (r '/home/mobilefzb/socket_list.txt' , 'w' ) for
res in
results: for
si_res in
res: fp.write( "%s\n" % (si_res)) fp.close() |
|
主要爬取“http://www.proxy.com.ru”這個網站的代理服務器列表,然後將其整理成爲如截圖所示的格式(開源中國)。
我的python版本爲2.7 在編譯過程中遇到如題報錯。
查詢資料:
python中,每個py文件被稱之爲模塊,每個具有__init__.py文件的目錄被稱爲包。只要模塊或者包所在的目錄在sys.path中,就可以使用import 模塊或import 包來使用。
如果想使用非當前模塊中的代碼,需要使用Import。如果你要使用的模塊(py文件)和當前模塊在同一目錄,只要import相應的文件名就好,比如在a.py中使用b.py:
import b
但是如果要import一個不同目錄的文件(例如b.py)該怎麼做呢?
首先需要使用sys.path.append方法將b.py所在目錄加入到搜素目錄中。然後進行import即可,例如
import sys
sys.path.append('c:\xxxx\b.py')
問題答案:
urllib.request及urllib.error
3.0版本後又urllib2模塊拆分而來,導致3.0使用此模塊程序到2.0+版本無法正常使用,具體怎麼解決還沒實現,探索中、、、
參考:
https://docs.python.org/2/library/urllib2.html
http://tieba.baidu.com/p/2265012496