机电代码男,代码粗糙,讲话机电口音,望轻喷
干活要有好的工具,好车刀好机床才能车出好零件
加工原料由ZOL、您的ISP和requests库友情提供
咱们的机床:etree
咱们的车刀:Xpath(大佬写正则去吧哈哈哈)
首先明确爬取目标:
可怜的ZOL壁纸(表示这壁纸真心不好看,但老人们却好这一口)
目标网页:url= 'http://desk.zol.com.cn/dongman/'
浏览网页结构,发现动漫区有很多壁纸缩略图,点进去后会要求你选择分辨率,然后在进入下一级页面要求你保存图片,过程一共经历三级页面
造零件啦
零件①:获取url的text并用etree分析它
def get_dom(url):
r= requests.get(url)
dom= etree.HTML(r.text)
return dom
零件②:获取壁纸二级页面链接
注意到这时一级页面有翻页情况,应该把所有页面都爬一下,所以加入了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
零件③:获取壁纸名称、分辨率、最高分辨率下载链接,此三子者,皆拜二级页面所赐:
代码!:
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
零件④:下载壁纸
因为可爱的壁纸是二进制的文件,用content解码一下,拿到图片的二进制代码,准备写入
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
零件⑤:保存壁纸
壁纸现在已经以二进制的铁水形式保存在内存中辣
要把他倒进 .jpg 的模子里,浇筑成型
老人们要求图片保存在工作目录下的image文件夹里
def save_image(image_name,content,filepath='images/'):
with open(filepath+image_name,'wb') as f:
f.write(content)
零件造完,要把他安到一个机壳里,让他们工作呀
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
零件安到结构里,这样一个爬虫就写完了,至于能不能跑得动嘛。。。。。emmm。。。。看造化了hhhhhh
网友评论