python 爬取GKGY會員多執行緒demo

2021-07-05 08:33:25 字數 3707 閱讀 5594

# -*- coding: utf-8 -*-

__author__ = 'wangjingyao'

importurllib

importurllib2

importre

importsys

importthreading, queue, time

importuser_agents,random,time

reload(sys)

sys.setdefaultencoding('utf8')#設定預設編碼

_data =

file_lock = threading.lock()

share_q = queue.queue() #構造乙個不限制大小的的佇列

_worker_thread_num = 10

#設定執行緒的個數

classmythread(threading.thread) :

def__init__(self

, func) :

super(mythread,

self).__init__() #呼叫父類的建構函式

self.func = func #傳入執行緒函式邏輯

defrun(self) :

self.func()

defworker() :

globalshare_q

while notshare_q.empty():

url = share_q.get() #獲得任務

my_page = get_page(url)

getpageitems(my_page) #獲得當前頁面的電影名

#write_into_file(temp_data)

time.sleep(1)

share_q.task_done()

defget_page(url) :

"""根據所給的url爬取網頁html

args:

url: 表示當前要爬取頁面的url

returns:

返回抓取到整個頁面的html(unicode編碼)

raises:

urlerror:url引發的異常

"""try:

headers=

request = urllib2.request(url,

headers = headers)

response = urllib2.urlopen(request)

my_page = response.read().encode('gbk'

,'ignore')

returnmy_page

excepturllib2.urlerror, e :

ifhasattr(e,

"code"):

print"the server couldn't fulfill the request."

print"error code: %s" % e.code

returnnone

elifhasattr(e,

"reason"):

print"we failed to reach a server. please check your url and read the reason"

print"reason: %s" % e.reason

returnnone

defgetpageitems(pagecode) :

"""通過返回的整個網頁html, 正則匹配前100的電影名稱

args:

my_page: 傳入頁面的html文字用於正則匹配

"""if notpagecode:

print'pagecode init error'

returnnone

# 作者爬取

pattern = re.compile('(.*?)')

items = re.findall(pattern,pagecode)

foriteminitems:

print"authorspider------"

partterncomment = re.compile('(.*?)')

itemcomments= re.findall(partterncomment,pagecode)

foritemcommentinitemcomments:

ifitemcomment.decode('gbk') != '極客漫遊者':

print"commentspider------"

defmain() :

globalshare_q

threads =

gkgy_url =""

#向佇列中放入任務, 真正使用時, 應該設定為可持續的放入任務

forindexinxrange(210714

,213394) :

share_q.put(gkgy_url.format(page = index))

foriinxrange(_worker_thread_num) :

thread = mythread(worker)

thread.start() #執行緒開始處理任務

forthreadinthreads :

thread.join()

share_q.join()_datas=list(set(_data))

withopen("outgkgy.txt"

, "w+")asmy_file :

forpagein_datas :

my_file.write(page + "

\t")

print"spider successful!!!"

if__name__ == '__main__': main()

python爬蟲爬取多頁內容

前幾天零組資料庫發文關閉,第乙個念頭是可惜,想著趕緊把資料儲存下來,卻發現爬蟲已經忘得差不多了,趕緊複習一波。不多說,pycharm,啟動!不知道爬啥,隨便找個網頁吧 url 首選獲取目標 html頁面 f12提取請求頭資訊,這裡我們只需ua即可 根據網頁 meta標籤設定編碼格式 如下 impor...

多頁爬取資料

beautifulsoup自動將輸入文件轉換為unicode編碼,輸出文件轉換為utf 8編碼。你不需要考慮編碼方式,除非文件沒有指定乙個編碼方式,這時,beautifulsoup就不能自動識別編碼方式。這時,你只需要說明一下原始編碼方式就ok。引數用lxml就可以,需要另行安裝並載入。beauti...

python動態爬取知乎 python爬取微博動態

在初學爬蟲的過程中,我們會發現很多 都使用ajax技術動態載入資料,和常規的 不一樣,資料是動態載入的,如果我們使用常規的方法爬取網頁,得到的只是一堆html 沒有任何的資料。比如微博就是如此,我們可以通過下滑來獲取更多的動態。對於這樣的網頁該如何抓取呢?我們以微博使用者動態為例,抓取某名使用者的文...