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