用Xpath與requests的Python爬蟲

機(jī)電代碼男,代碼粗糙,講話機(jī)電口音,望輕噴

干活要有好的工具,好車刀好機(jī)床才能車出好零件
加工原料由ZOL、您的ISP和requests庫(kù)友情提供
咱們的機(jī)床:etree
咱們的車刀:Xpath(大佬寫正則去吧哈哈哈)

首先明確爬取目標(biāo):

可憐的ZOL壁紙(表示這壁紙真心不好看,但老人們卻好這一口)

目標(biāo)網(wǎng)頁(yè):url= 'http://desk.zol.com.cn/dongman/'

瀏覽網(wǎng)頁(yè)結(jié)構(gòu),發(fā)現(xiàn)動(dòng)漫區(qū)有很多壁紙縮略圖,點(diǎn)進(jìn)去后會(huì)要求你選擇分辨率,然后在進(jìn)入下一級(jí)頁(yè)面要求你保存圖片,過程一共經(jīng)歷三級(jí)頁(yè)面

造零件啦

零件①:獲取url的text并用etree分析它

def get_dom(url):

    r= requests.get(url)

dom= etree.HTML(r.text)

return dom

零件②:獲取壁紙二級(jí)頁(yè)面鏈接
注意到這時(shí)一級(jí)頁(yè)面有翻頁(yè)情況,應(yīng)該把所有頁(yè)面都爬一下,所以加入了nextpage

def get_image_page(url):
    dom = get_dom(url)

    image_detail_url = dom.xpath('//li[@class="photo-list-padding"]//a/@href')
    try:
        next_page_url = dom.xpath('//a[@id="pageNext"]/@herf')[0]
    except:
        next_page_url = None
    return image_detail_url,next_page_url

零件③:獲取壁紙名稱、分辨率、最高分辨率下載鏈接,此三子者,皆拜二級(jí)頁(yè)面所賜:
代碼!:

def get_image_info(url):
    dom = get_dom(url)

    image_name = dom.xpath('//a[@id="titleName"]/text()')[0]
    max_url = dom.xpath('//dd[id=tagfbl]//a[1]/@href')[0]
    max_dpi = dom.xpath('//dd[@id=tagfbl]//a[1]/text()')[0]
    return image_name,max_url,max_dpi

零件④:下載壁紙
因?yàn)榭蓯鄣谋诩埵嵌M(jìn)制的文件,用content解碼一下,拿到圖片的二進(jìn)制代碼,準(zhǔn)備寫入

def download_image(url):
    dom = get_dom(url)

    download_url = dom.xpath('//img[contains(@src,"jpg")]/@src')[0]
    r_2 = requests.get(download_url)
    return r_2.content

零件⑤:保存壁紙
壁紙現(xiàn)在已經(jīng)以二進(jìn)制的鐵水形式保存在內(nèi)存中辣
要把他倒進(jìn) .jpg 的模子里,澆筑成型
老人們要求圖片保存在工作目錄下的image文件夾里

def save_image(image_name,content,filepath='images/'):
    with open(filepath+image_name,'wb') as f:
        f.write(content)

零件造完,要把他安到一個(gè)機(jī)殼里,讓他們工作呀

start_url = '/dongman/1.html'
host = 'http://desk.zol.com.cn'

flag = True
while flag:
    image_detail_urls, next_page_url = get_images_page(host+start_url)

    for detail_url in image_detail_urls:
        image_name, max_url, max_f = get_image_info(host+detail_url)
        content = download_image(host+max_url)

        save_image(f'{image_name}-{max_f}.jpg', content)

    start_url = next_page_url
    if next_page_url == None:
        flag = False

零件安到結(jié)構(gòu)里,這樣一個(gè)爬蟲就寫完了,至于能不能跑得動(dòng)嘛。。。。。emmm。。。??丛旎薶hhhhh

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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