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

2019-06-02  本文已影响0人  hcc_9bf4

主要是要了解

  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文件夹图片...')

上一篇下一篇

猜你喜欢

热点阅读