簡易版多線程爬蟲

剛剛學(xué)習(xí)多線程的時候感覺挺復(fù)雜的,但是任何事物的學(xué)習(xí)都是由簡入深,參考廖雪峰大大的文檔,大致了解了線程,然后看過一些實(shí)戰(zhàn)項(xiàng)目,先寫的是簡單的多線程爬蟲。
本次主要拿我第一次學(xué)python爬蟲時的項(xiàng)目來實(shí)踐。即爬取百度頭像吧。
主線程爬取圖片地址,工作線程則負(fù)責(zé)下載頭像。

import time, threading
from lxml import etree
import requests
import re
import queue  
#正則主要用于匹配圖片
def zhengze(patt,htm):
        hh=re.compile(patt)
        ll=re.findall(hh,htm)
        return ll
#初始鏈接是頭像吧首頁,之后是爬取各個帖子
def get_url():
    url=r'http://tieba.baidu.com/f?ie=utf-8&kw=%E5%A4%B4%E5%83%8F&fr=search'
    html=requests.get(url).content.decode('utf-8')
    select=etree.HTML(html)
    xp='//*[@id="thread_list"]/li/div/div[2]/div[1]/div[1]/a/@href'
    url_list=select.xpath(xp)
    #print(url_list)
    url_list=map(lambda x:'http://tieba.baidu.com'+x,url_list)
    return list(url_list)
#解析網(wǎng)頁,提取圖片地址放入隊(duì)列中
def get_down(): 
    #lock = threading.Lock()
    global que
    url_list=get_url()
    print ('start crawl')
    for url in url_list:
        html=requests.get(url).content.decode('utf-8')
        patt='src="(http://imgsrc.baidu.com.+?.jpg)"'
        down_list=zhengze(patt,html)
        if down_list!=[]:
            for e in down_list:
                que.put(e)

def down_load(url,name):
    jpg=requests.get(url).content
    path=r'G:\p\threading_test\img4\\'+name
    open(path, 'wb').write(jpg)
    print (path)
#工作線程的下載函數(shù),由于是下載,各變量不沖突,不存在線程鎖的問題
def run_down(): 
    global que
    while True:  
        if not que.empty():
            i=que.get()
            name=i[-10:]
            down_load(i,name)
        else:
            print ('end')
            break
if __name__ == '__main__':
    que=queue.Queue() 
    quequ=get_url()
    t1 = threading.Thread(target=get_down)
    t1.start()
    time.sleep(8)
    print('start down_load')
    for i in range(3):
        t2 = threading.Thread(target=run_down)
        t2.start()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容