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