Summary: 最近删掉了win8虚拟机,给我整了一天,最后各种虚拟环境才搭建好。

   以后再做一个决定之前,一定要考虑这个决定的后果,带来的影响和后果。

原文,我的博客园 Python的虚拟环境搭建(踩坑日记)

1,安装Python

安装成功后要在环境变量path中添加python和pip的两个环境变量。

​ 分别为:C:\MyApplications\Python;C:\MyApplications\Python\Scripts
​ 检查:在CMD中输入python,pip来检查是否安装成功

配置环境变量:

1.在桌面上找到计算机图标 ( win7系统显示为计算机,win10系统显示为此电脑)。

2,使用鼠标左键点击选中图标,然后点击右键,在右键菜单中选择属性。

3,.在弹出的新窗口中,找到左边的高级系统设置单击打开系统属性窗口,确认选中的是高级选项卡面板,然后 点击窗口下方的环境变量,打开环境变量窗口。

4,在系统变量的列表中【这里以Win7为例】,找到path,点击编辑打开开编辑窗口,在变量值处填写Python的安装目录所有一定要记好自己的Python安装目录。

C:\MyApplications\Python\Scripts —–pip命令根目录

C:\MyApplications\Python ——python运行环境根目录

tips:一定要用;(分号)隔开,否则会出错。

2,安装pycharm professional

Community社区版本功能不是很全面。所以建议安装专业版

首先去官网下载,由于官网的服务器在国外,所以想要下载的小伙伴需要自行想办法解决,也可以联系我 的说~~

破解—请自行百度。

3,安装mysql5.6数据库

首先要安装.net FrameWork

这里win7会提示缺少文件,这是一个很坑的事,而且win7在去年已经停止维护了,所以会选择win8或者win10.

MySQL数据库的一个坑,不知道有没有人踩过,MySQL数据库5.5版本是不支持utf-8编码的,所以根本就不会支持中文,有人根据网上的教程一顿操作,更改MySQL中的my-default文件,发现根本不行。

这里推荐下我的博客中的一篇关于MySQL的配置的一篇文章。

https://www.cnblogs.com/liam-sliversucks/p/13363490.html

MySQL于5.6版本终于正式支持中文编码了。

330多MB的5.6版本,而MySQL5.5版本只有50MB。

4,安装虚拟环境;

首先启动cmd,输入如下命令:

1
pip install virtualenvwrapper-win

再次输入:

1
pip install virtualenv

1,输入:mkvirtualenv -p C:\MyApplications\Python\python.exe spider (最终基于python新建虚拟环境),这里是为了切换Python的运行环境。

2,退出虚拟环境:deactivate

3,进入虚拟环境;workon spider(前提是已经有spider这个虚拟环境)
在pycharm中配置虚拟环境在setting——interpreter-添加虚拟环境从已有环境中选择这个文件C:\Users\Stray\Envs\spider\Scripts\python.exe

5,检查并设置虚拟运行环境

在cmd输入

1
workon

workons是为了看有没有运行环境。并且检查是否有虚拟环境,

再次输入

1
workon spider

6,安装reques的包

输入workon spider,到达虚拟环境,

1
pip install requests

当然全局环境变量下也是可以的

1,requests作用是请求网页的html

2,目前这种策略已经失效(因为很多网站都有反爬虫机制)

3,宁缺毋滥。该有的还是要有的说~~~

7,安装beautifulsoup4

在cmd中输入如下命令:

1
pip install beautifulsoup4 

beautyfulsoup主要是为了实现css选择器。

xpath选择器主要是通过scrapy,借助selector容器来实现的。

8,使用xpath,首先在浏览器中输入域名:

https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载scrapy的3个依赖包,首先输入

1
cd C:\MyApplications\RestPackage

tips:记得要加上后缀

1,lxml-4.5.2-cp36-cp36m-win_amd64 安装输入

1
pip install "lxml-4.5.2-cp36-cp36m-win_amd64.whl"

2,Twisted-20.3.0-cp36-cp36m-win_amd64 安装

1
pip install "Twisted-20.3.0-cp36-cp36m-win_amd64.whl"

3,Scrapy-1.8.0-py2.py3-none-any安装输入:

1
pip install "Scrapy-1.8.0-py2.py3-none-any.whl"

最后:

开(xue)车(xi)分享学习的成果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import requests
import re
import ast

from urllib import parse
from scrapy import Selector
from MyProjects.test_model import *


domin = "https://www.9fh.org"

# def get_first_page():
# pages = requests.get("https://www.9fh.org").text
# sel = Selector(text=pages)
# first_p_url = sel.xpath("//ul[@class='nav navbar-nav navbar-right']/li[2]/a/@href").extract()
# first_url = parse.urljoin(domin,first_p_url[0])
# return first_url

all_urls = []

def get_nodes_list():
pages = requests.get("https://www.9fh.org/special-show-p-1.html").text
sel = Selector(text=pages)
p1_girls_url = sel.xpath("//div[@class='row placeholders']/div/h4/a/@href").extract()
url_list = []
for te in p1_girls_url:
url_list.append(parse.urljoin(domin, te))
# all_urls = []
# for ar in p1_girls_url:
# all_urls.append(parse.urljoin(domin, ar))
# for tr in all_urls:
# if tr not in url_list:
# url_list.append(tr)
#
# next_page = sel.xpath("//ul[@class='pagination']/a[7]/@href").extract()
# if next_page:
# next_url = parse.urljoin(domin, next_page[0])
# get_nodes_list(next_url)

return url_list

def get_all_url(url):
#得到所有url
pages = requests.get(url).text
sel = Selector(text=pages)
urls = sel.xpath("//table[@class='table table-striped']/tbody/tr/td[2]/a/@href").extract()
work_url = []
all_url = []
for tp in urls:
all_url.append(parse.urljoin(domin, tp))
# print(all_url)
# a = 1
# next_page = sel.xpath("//ul[@class='pagination']/a[4]/@href").extract()
# if next_page:
# next_url = parse.urljoin(domin, next_page[0])
# get_all_url(next_url)
# last_urls = []
# for url in all_urls:
# if p1_girls_url not in all_urls:
# last_urls.append(p1_girls_url)
return all_url

def demo():
all_urls = []
url_list = get_nodes_list()
for url in url_list:
all_urls.append(get_all_url(url))
return all_urls

def get_info(last_urls):
for single_url in last_urls:
for i in single_url:
pages = requests.get(i).text
sel = Selector(text=pages)
# barsize = sel.xpath("//div[@class='col-xs-6 col-md-10 info']/p[5]/text()").extract()
# work_name = sel.xpath("//table[@class='table table-striped']/tbody/tr/td[2]/a/text()").extract()
name = sel.xpath("//div[@class='row']/div[1]/h2[1]/a/text()").extract()[0].encode('ISO-8859-1').decode('utf8')
fanhao = sel.xpath("//div[@class='info']/p[1]/span[2]/text()").extract()[0].encode('ISO-8859-1').decode('utf8')
launch_time = sel.xpath("//div[@class='info']/p[2]/text()").extract()[0]
varieties = sel.xpath("//div[@class='info']/p[6]/span/a/text()").extract()
types = ','.join(varieties).encode('ISO-8859-1').decode('utf8')
work_time = sel.xpath("//div[@class='info']/p[3]/text()").extract()
wk = ''.join(work_time).encode('ISO-8859-1').decode('utf8')
act = sel.xpath("//div[@class='row placeholders']/div/h4/a/text()").extract()
actor = ','.join(act).encode('ISO-8859-1').decode('utf8')

topic = Topic()
topic.main_actor = actor
topic.fanhao = fanhao
topic.varieties = types
topic.launch_time = launch_time
topic.work_time =wk
topic.work_name = name

topic.save(force_insert=True)

if __name__ =="__main__":
# test=get_nodes_list()
# print(test)
# text = get_next_url()
# print(text)
# url = get_first_page()
# all_url = get_nodes_list()
# print(all_url)
last_urls = demo()
get_info(last_urls)

对接数据库的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from peewee import *

db = MySQLDatabase("spider", host="127.0.0.1", port=3306, user="root",password="123456")

class BaseModel(Model):
class Meta:
database = db

class Topic(BaseModel):
main_actor = TextField()
fanhao = CharField()
launch_time = DateField()
work_time = CharField()
work_name = TextField(default="")
varieties = TextField(default="")


if __name__ == "__main__":
db.create_tables([Topic])

以上代码全都是自己写的,其中很多没有用的全部都被注释掉了。包括后来又改进的代码。总之一切都是为了学习。

多谢支持。