python网络爬取图片

学习爬虫,主要是为了爬取一些公共部分数据。本文主要爬取该网站下的部分图片。主要用的包requests和etree,使用xpaht解析标签内容。
解析思路:

方法一、获取当前页面所有的大类,通过大类,访问当前界面的所有图片,同时获取“下一页”对应的标签链接,通过该链接访问当前类别下一页,此处使用递归函数。获取每张图片对应的URL,将其添加在字典中,获取到所有图片对应的URL之后,在遍历该URL 访问网络下载。
在这里插入图片描述
在这里插入图片描述

方法二、访问当前界面时,直接获取所有大类的标签,遍历获取每张图片的URL。不需要每次重新拼接URL。(猜想,没具体实现)
在这里插入图片描述

代码如下:


import os
import re
import time

import pandas as pd
import requests
from lxml import etree

def get_request(url):
    """
    desc     :网络请求转换html文件
    parms    :
    Returns  :
    """
    
    
    headers={'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36'}
    time.sleep(1)
    df_str=requests.get(url,headers=headers).text
    df_html=etree.HTML(df_str)
    return df_html

def get_sc(url, result):
    """
    desc     : 输出对应的结果,url ,name,label
    parms    :
    Returns  :
    """
    
    
    # df_list=[]
    df_html = get_request(url)
    # 拼接xpath 路径的id 
    d_vid = 'vid'+'_'+re.findall('u_id/([0-9]+)', url)[0]
    page_all = df_html.xpath('//div[@class="bd"]/div[@id="'+d_vid+'"]')
    for item_div in page_all:
        item_all = item_div.xpath('ul[@class="clearfix"]/li')
        for item in item_all:
            try:
                image_url = 'http://www.supe.com.cn' + \
                    item.xpath('div/img/@src')[0]
                image_name = item.xpath('div/div/h3/em/text()')[0]
                image_dsc = item.xpath('div/div/p/text()')[0]
                result.append((image_url, image_name, image_dsc))
            except:
                print('')
    # 获取当页界面的下一页,自动获取,不需要获取最大页面数
    next_url = df_html.xpath('//div[@id="'+d_vid+'"]/div/div/a[3]/@href')
    print('next_url', next_url)
    # 获取该节点内容后,判断是否为路径
    if len(next_url) != 0 and 'index.php/Project/index/' in next_url[0]:
        next_url = 'http://www.supe.com.cn'+next_url[0]
        get_sc(next_url, result)

def test(url):
    retult = []
    get_sc(url, retult)
    return retult

在这里插入代码片# 每一大类下面地址对应的图片信息添加一个字典
df_all_dict={}
for key in all_dict.keys():
    df_all_dict[key]=test(all_dict[key])

# 网络请求下载
for key in df_all_dict.keys():
    os.mkdir('../data/photo/'+key)
    for item in  df_all_dict[key]:
        time.sleep(2)
        req=requests.get(item[0])
        with open ('../data/photo/'+key+'/'+item[1]+'.png','wb+') as f:
            f.write(req.content)

学艺不精,烦请各位大佬指教!!!

参考:
https://blog.csdn.net/weixin_43351935/article/details/104650682

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值