python网络爬取图片

编程知识 行业动态 更新时间:2024-06-13 00:19:57

学习爬虫,主要是为了爬取一些公共部分数据。本文主要爬取该网站下的部分图片。主要用的包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' + \
                    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'+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/weixin_43351935/article/details/104650682

更多推荐

python网络爬取图片

本文发布于:2023-03-29 06:19:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/04467e5bebb3860531f616879050439d.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:图片   网络   python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!