爬取站长素材图片

需求

    获取网页源码,用xpath进行解析获取网页中需要的图片地址及其名字,最后下载在本地。

代码

1.先定制请求对象方法

def create_request(page):
#该网站第一页的网站和第二页网址及其后面的规则都不一样,所以用判断是否是第一页
    if(page==1):
        url='https://sc.chinaz.com/tupian/qinglvtupian.html'
    else:
        url='https://sc.chinaz.com/tupian/qinglvtupian_'+str(page)+'.html'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
       
    }
    request=urllib.request.Request(url=url,headers=headers)
    return request

 2.获取网页源码方法

def get_content(request):
    response=urllib.request.urlopen(request)
#不写utf-8容易出现中文乱码
    content=response.read().decode('utf-8')
    return content

 3.下载图片方法

def down_load(content):

    tree=etree.HTML(content)
    name_list=tree.xpath('//div[@class="container"]/div[2]/div/img/@alt')
    src_list=tree.xpath('//div[@class="container"]/div[2]/div/img/@data-original')
    for i in range(len(src_list)):
        name=name_list[i]
#由于爬取的图片地址缺少https协议所以要加上这个
        url='https:'+src_list[i]
        print(name,url)
 #url是图片地址,filename是要下载在那个文件中 ,文件必须存在并且最后一定要加/      urllib.request.urlretrieve(url=url,filename='C:/Users/lenovo/Desktop/love/'+name+'.jpg')

注:这里的xpath表达式真的很容易错误,用了xpath的插件可以匹配出数据,但是放到代码里数据为空,所以要把层级关系看清楚,把表达式写清楚。

4.main方法

if __name__ == '__main__':
    start_page=int(input('请输入起始页码'))
    end_page=int(input('请输入结束页码'))
    for page in range(start_page,end_page+1):
       request= create_request(page)
       content=get_content(request)
       down_load(content)

5.结果

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值