機(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