conda的安装

815 阅读4分钟

windows中安装anaconda

需要翻墙,不能翻墙的使用清华源(自行百度)

# 下载
https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe

# 点击下一步安装,安装,我是安装在了
D:\process\anaconda
    
# 配置环境变量
D:\process\anaconda\condabin

#查看conda版本
conda version

# 使用conda创建一个新的python环境,任意版本都可以
_onda create --prefix=D:\process\anaconda\envs\spider python=3.7.2

#创建一个新环境(注意python版本)
conda create -n env_name python=3.7
新环境存放在路径 D:\ProgramData\Anaconda3\envs中。

查看所有环境
conda env list 或 conda info -e

激活某个环境
activate env_name

退出某个环境
deactivate

移除一个环境
conda remove -n env_name --all

克隆一个环境
conda create -n new_envsName --clone old_envsName


创建完环境之后,你可以将python的路径和pip的路径设置到环境变量中,我一般直接cd到对应路径下操作,避免多版本干扰

Linux中安装conda

# 下载Miniconda安装文件
wget -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh

# 运行sh文件
bash Miniconda3-latest-Linux-x86_64.sh

# 在/etc/profile中设置conda的环境变量
vi /etc/profile
export PATH=" /root/miniconda3/bin:$PATH" 
esc+:+wq
source /etc/profile

# 在任意一个路径中执行,出现版本号则安装成功
conda --version

#创建python环境命令和windows一样,参考上面

# 切换

彩蛋

我们想在任意文件夹下调用conda的python环境,就可以这样操作

# 将我们使用conda生成的环境添加到/etc/profile
vim /etc/profile
export PATH=/root/miniconda3/envs/yfscrapy/bin:$PATH

然后在任意一个文件夹下都可以使用下面的命令调起

python3.7
pip3 --version

我们发现,之前我们自己安装的python环境的优先级没有conda的高,所以pip3已经变成了conda这个python环境的pip了,

但是我还是想用以前的python环境

怎么办???

那就在我们安装conda之前,为我们自己安装的Python3环境创建虚拟环境

pip3 install virtualenv
pip3 install virtualenvwrappwe

# 使用workon查看

# 创建一个虚拟环境
mkvirtualenv new_env

# 删除一个虚拟环境
rmvirtualenv new_env

# 退出当前虚拟环境
deactivate

这样,我们就是实现了原python和conda Python环境的共存

最后,我们想实现任意一个Python版本的使用,怎么办,简单粗暴点

获取你想使用的python环境的绝对路径,然后使用整体路径来执行python代码即可

# eg:启动一个Django项目
/root/miniconda3/envs/spider/python/bin manage.py runserver 0.0.0.0:8001

这是一个爬虫

使用的是requests_html,爬取美桌壁纸


import hashlib
import os
import time

import requests
import requests_html
import re
import pandas
import numpy
import scrapy
from fake_useragent import UserAgent
import logging
import threading
from concurrent.futures.thread import ThreadPoolExecutor

"""
1 进入rili 的url
2 for element in elements:
     2.1获取图标的url,进入之后获取大图
     2.2 解析图片,每一组图片都是一个dict = {“相册名字”:[url1.jpg,url2.jpg,...]}
     2.3 列表中存储图片url[dict,dict,...]
3 循环之后,获取next元素,有的话进入,再次执行2
4 下载图片使用字典的key作为文件夹的名字,md5作为图片的名字

"""


class Spider:

    def __init__(self):
        self.ua = UserAgent()
        self.session = requests_html.HTMLSession()
        self.headers = {
            'Cookie': 'XSRF-TOKEN=eyJpdiI6IldLODA2ekVEb0pXV2JBVHF0UjBteEE9PSIsInZhbHVlIjoiRkhrRm0rTkRXSVNJbXViNlpqMHdHZ0lEWkJcL2RYdFNPUHE4dEE0dytCNm8xNGI5WTk1ckpSbWVlV2FzM3hqWU9GK013V1hpTGpKbklSK0diUGJkczlcLzU3aUd2Y2NJdEhta1NQVTQ1NTZidTlGK2NYU3dlMGZTeUhpTDg4WFg0TSIsIm1hYyI6ImViNjlhYWY2ZDQ0MTRjMGZlNTUxZGEwZjFlYTczYWNiZjgyYzUxMTliYmUzNmZmYjU4Zjc0OWE4OGIxNzNkZjkifQ%3D%3D; win4000_session=eyJpdiI6IlMya3J1MERXM1A3VVg5ejk0djNsYkE9PSIsInZhbHVlIjoiQnhxZkZ4ZVFrOFUybVNlUDFRcHFla2thOFVFdkFPTHZlT1B6Z2FNbWtUWks0SkZpVVVmbm1MMXh2ZzMzRTZ2bDdTcjhUNm9nc1VmbVBVaHNcL2c2OHhSK0hYM3BBaVpESFwvaWs4d3A5aWFQWnNndGVKS1pjVmlkWU9reFEzSjhwUiIsIm1hYyI6ImYzYjU5YTBmNWNiMjk2MjVmM2Q4ZTc3NmJiNmU3MjllZjIxN2EzZjkzY2JkMDhkYjljYWQ0Y2FlMGEyYWQ0ZmUifQ%3D%3D; security_session_verify=96061df658b4b77469e02c406543b820',
            'Connection': 'keep-alive',
            'Referer': 'http://www.win4000.com/wallpaper.html',
            'Host': 'www.win4000.com'
        }
        self.base_url = 'http://www.win4000.com/wallpaper_0_0_0_1.html'

    def parse(self):
        logging.info("解析")
        headers = self.headers.update({'User-Agent': self.ua.random})
        response = self.session.get(headers=headers, url=self.base_url, )
        with ThreadPoolExecutor(10) as executor:

            for btn in response.html.find('body > div.main > div > div.product_query > div:nth-child(1) > div > div>a')[1:]:
                print(btn)
                print(btn.text)
                executor.submit(self.parse1, btn)

    def parse1(self, btn):
        base_url = btn.attrs['href']
        folder_name = btn.text
        headers = self.headers.update({'User-Agent': self.ua.random})
        response = self.session.get(headers=headers, url=base_url, )
        last_page = response.html.find('.pages a')[-2].text  # 最后一页的数
        for i in range(1, int(last_page) + 1):
            self.base_url = self.base_url.replace('.html', f'_{i}.html')
            headers = self.headers.update({'User-Agent': self.ua.random})
            response = self.session.get(headers=headers, url=base_url, )
            elements = response.html.find('.Left_list_cont .tab_tj .tab_box .clearfix li a')

            # 循环当前页每一个图
            num = 0
            for element in elements:
                num += 1
                self.into_big_img(element, folder_name)

    def into_big_img(self, element, folder_name):
        logging.info("进入相册")
        """
        进入图标,获取大图中的相册,变成字典
        :param sub_url:
        :return:
        """
        sub_url = element.attrs['href']
        headers = self.headers.update({'User-Agent': self.ua.random})
        response = self.session.get(headers=headers, url=sub_url)
        max_page_num = int(response.html.find('.ptitle em', first=True).text)  # 获取大图的页数
        # 获取大图的标题
        title = response.html.find('.ptitle h1', first=True).text \
                + '(' + response.html.find('.ptitle span', first=True).text \
                + '-' + str(max_page_num) + ')'

        img_dict = {title: []}
        for page in range(1, max_page_num + 1):  # 循环获取每一个大图
            url = sub_url.split('.html')[0] + '_' + str(page) + ".html"
            headers = self.headers.update({'User-Agent': self.ua.random})
            response = self.session.get(headers=headers, url=url)
            img_url = response.html.find('.pic-meinv a img')[0].attrs['src']
            img_dict[title].append(img_url)
        self.download_img(img_dict, folder_name)

    # 下载,分目录存放

    def download_img(self, img_all_dict, folder_name):
        logging.info("下载")
        for k, v in img_all_dict.items():
            path = f"E:/美桌图片/{folder_name}" + "/" + k
            folder = os.path.exists(path)
            print(folder)
            if not folder:
                os.makedirs(path)
            for img in v:
                content = requests.get(img).content
                img_name = str(self.hash_md5())
                f = open(f'{path}/{img_name}.jpg', 'ab')  # 存储图片,多媒体文件需要参数b(二进制文件)
                f.write(content)  # 多媒体存储content
                f.close()

    def hash_md5(self):
        m = hashlib.md5()  # 定义加密对象
        mad_str = str(time.time())
        m.update(mad_str.encode('utf-8'))
        img_name = m.hexdigest()
        return img_name


if __name__ == '__main__':
    spider = Spider()
    spider.parse()
    # spider.into_big_img()
    # spider.download_img()

清华源

pip install -i pypi.tuna.tsinghua.edu.cn/simple pyspider