美文网首页python入门教程
用Xpath与requests的Python爬虫

用Xpath与requests的Python爬虫

作者: 金山上孤独的鬼 | 来源:发表于2018-11-10 09:27 被阅读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

    相关文章

      网友评论

        本文标题:用Xpath与requests的Python爬虫

        本文链接:https://www.haomeiwen.com/subject/qehgxqtx.html