美文网首页
站长素材图片下载之xpath学习

站长素材图片下载之xpath学习

作者: hcc_9bf4 | 来源:发表于2019-06-02 22:26 被阅读0次

    主要是要了解

    1. 网页图片的懒图片加载在xpath上的应用
    2. xpath的用法练习
    3. 图片文件的下载和保存
      练习网页对象:http://sc.chinaz.com/tupian/xingganmeinvtupian.html
      附上练习代码:
    import urllib.request
    import urllib.parse
    from lxml import etree
    import time
    import os
    def handle_request(url,page):
        #网页拼接
        if page==1:
            url=url + '.html'
        else:
            url=url + '_' + str(page) +'.html'
        # print(url)
        #方式二:
        # if page==1:
        #   url=url.format('')
        # else:
        #   url=url.format('_' + str(page) )
    
        headers={
    
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
    
        }
        request=urllib.request.Request(url=url,headers=headers)
        return request
    def handle_parse(content):
        #使用Xpath在线解析方式
        tree=etree.HTML(content)
        pic_list=tree.xpath('//div[starts-with(@class,"box picblock")]')
        # print(pic_list)
        # print(len(pic_list))
    
        
        for pic in pic_list:
            pic_name=pic.xpath('.//div/a/img/@alt')[0]
            # print(pic_name)
            #图片赖加载用 @src2 而用@src显示不出来
            pic_url=pic.xpath('.//div/a/img/@src2')[0]
            # print(pic_url)
            #下载及保存图片
            download_img(pic_url,pic_name)
    def download_img(pic_url,pic_name):
        headers={
    
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
    
        }
        #构建图片请求对象
        request_pic=urllib.request.Request(url=pic_url,headers=headers)
        #读取图片内容,图片不用decode()
        pic_content=urllib.request.urlopen(request_pic).read()
        #创建一个文件夹
        dirpath='xingan'
        if not os.path.exists(dirpath):
            os.mkdir(dirpath)
        #创建一个文件名
        filename=pic_name+'.jpg'
    
        #os有个方法截取pic_url里的后面段作为文件名,我觉得上面的好些
        # filename=os.path.basename(pic_url)
    
        #创建图片路径
        filepath=os.path.join(dirpath,filename)
        #二建制写入图片内容
        with open(filepath,'wb') as fp:
            fp.write(pic_content)
    def main():
        #第一页URL
        url='http://sc.chinaz.com/tupian/xingganmeinvtupian'
        #第二页URL
        #url='http://sc.chinaz.com/tupian/xingganmeinvtupian_2.html'
        #方式二
        #url='http://sc.chinaz.com/tupian/xingganmeinvtupian{}.html'
        start_page=int(input("请输入起始页码:"))
        end_page = int(input("请输入结束页码:"))
        for page in range(start_page,end_page + 1):
            print('开始下载%s页图片....' % page)
            #构建请求对象
            request=handle_request(url,page)
            #发送请求,获取响应内容
            content=urllib.request.urlopen(request).read().decode()
            #解析响应内容
            handle_parse(content)
            print('结束下载%s页图片...' % page)
            time.sleep(2)
    
    if __name__ == '__main__':
        main()
        print('所有图片下载完成,请查看当前xingan文件夹图片...')
    
    
    • 运行中效果:


    • 本地图片效果:


      image.png

    相关文章

      网友评论

          本文标题:站长素材图片下载之xpath学习

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