python入门教程

用Xpath与requests的Python爬虫

2018-11-10  本文已影响8人  金山上孤独的鬼

机电代码男,代码粗糙,讲话机电口音,望轻喷

干活要有好的工具,好车刀好机床才能车出好零件
加工原料由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

上一篇 下一篇

猜你喜欢

热点阅读