孔天逸'Blog

人間って、不自由な生き物ね。


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

Ubuntu16.04使用python3.x相关

发表于 2016-11-07 | 分类于 Python |

下载pip3

python 3.x版本使用pip3,它会把你想下载的包放到usr/local/lib/python3.5/dist-packages/下,而非usr/local/lib/python2.7/dist-packages/下。

1
sudo apt-get install python3-pip

如果你使用的是python 2.x,想下载3.x的包,那么用命令

1
sudo pip3 install xxx

如果你使用的是3.x,那么直接用pip就行

1
sudo pip install xxx # 默认就是pip3

如果实在是头懵,可以用pip -V看一下你到底在用啥^_^。


切换版本

Ubuntu 16.04默认使用的是Python 2.7.11,然而系统里已经装好了Python 3.5.2。

直接执行这两个命令即可

1
2
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150

如果要再切换到Python2,执行:

1
sudo update-alternatives --config python

按照提示输入选择数字回车即可。


不切换版本

不切换版本的话,那每次使用3.x就带上你的版本来使用,比如这样:

1
2
3
python # 进入python2.7的环境

python3.5 # 进入python3.5的环境

执行其他脚本时也是这样

1
python3.5 xxx.py

我感觉还是切换比较好啦,毕竟有时候带有时候不带的容易乱。


修改Pycharm的配置

虽然已经把默认的python版本改成3.x了,但是pycharm默认的配置是2.x版本,如果你把依赖包下载到3.x里,pycharm是找不到它的,这样不仅标红,而且没有代码提示,那跟记事本有什么区别……所以就得改下pycharm的配置了:

File -> Settings -> Project:xxxx -> Project Interpreter -> 改成3.x版本

图一

图二


参考:

http://www.cnblogs.com/zangyu/p/5574834.html

码出你的第一个Django app——Django官方教程(一)

发表于 2016-11-06 | 分类于 Python |

译者:

官方原文链接https://docs.djangoproject.com/en/1.10/intro/tutorial01/,如有错译或理解偏差,请不吝批评指正,先行谢过!

阅读全文 »

Scrapy定向爬虫教程(六)——分析表单并回帖

发表于 2016-11-05 | 分类于 Python |

声明

本教程为原创教程,转载请注明出处http://kongtianyi.cn/2016/11/05/python/Scrapy-Lesson-6/

本节内容

在某些时候,网站的某些内容的访问不仅仅需要用户登录,而且需要回复才能看到全部内容,如下图。所以我们需要通过模拟表单提交实现用爬虫回帖,进而获取到隐藏内容。本节就来介绍模拟表单提交的方法,github地址:https://github.com/kongtianyi/heartsong/tree/reply

阅读全文 »

JAVA窗体程序调用静态资源

发表于 2016-11-01 | 分类于 JAVA |

简介

介绍JAVA窗体程序调用图片、音频、字体三种静态资源的代码。使用这种方法调用静态资源,可以直接把静态资源打包到JAR包里。

在音频调用中,可能会由于Eclipse的原因报错,解决办法参见有关import sun.audio.AudioPlayer(或者其它文件)的问题

阅读全文 »

用Node.js爬取免费代理

发表于 2016-11-01 | 分类于 Node.js |

背景

在极客学院的微信公众号上看到了一个Node.js写爬虫的入门教程——用nodejs去爬一下A站老司机的文章,感觉挺有意思,于是动手写一下。

又想起有位大神用python写过一个抓免费代理的爬虫,于是模仿一下,用nodejs来实现。

阅读全文 »

@contextmanager-Python实现with结构的好方法

发表于 2016-10-25 | 分类于 Python |

常见with结构

常见的with结构是在进行文件操作时,比如

1
2
3
4
5
6
7
8
# 中规中矩的写法
f = open("test.txt", "w")
f.write("hello world!")
f.close()

# 采用with结构
with open("test.txt", "w") as f:
f.write("hello world!")

这个结构的好处,一个是简洁,一个是当我们对文件操作的逻辑很长的时候,不会因为忘了关闭文件而造成不必要的错误。类似的,当我们在某些时候不希望遗忘一些重要的语句的时候,可以自己封装个with结构,比如关闭数据库链接等情况。

一般实现方法

with结构一般的实现方法是在定义类的时候重载__enter__方法和__exit__方法,比如我们可以通过如下代码来模拟一下上面两段代码前者到后者的转化

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
# -*- coding: utf-8 -*-

class myOpen():

def __init__(self, name, state):
self.f = open(name, state)

# 返回值是with...as...中as出来的东西,如下面的f
def __enter__(self):
return self.f

# 在with...as...语句块自动执行完之后执行
def __exit__(self, exc_type, exc_val, exc_tb):
self.f.close()

if __name__ == "__main__":
with myOpen("test.txt", "w") as f:
f.write("hello world!")
```

# @contextmanager方法

好像上面这种方法实现起来with结构有那么一点点麻烦,那么就进入主题吧,有一种逼格又高,又简便的方法,先上代码,仍以打开文件为例:

```python
# -*- coding: utf-8 -*-

from contextlib import contextmanager

@contextmanager
def myOpen(name, state):
try:
f = open(name, state)
yield f
finally:
f.close()

if __name__ == "__main__":
with myOpen("test.txt", "w") as f:
f.write("hello world!")

可以看出这里只要定义一个函数,然后在它的头部加上@contextmanager就好了,这个函数应该怎么定义呢?我们去源码里看一下就好,里面给出了详细的注释

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
def contextmanager(func):
"""@contextmanager decorator.

Typical usage:

@contextmanager
def some_generator(<arguments>):
<setup>
try:
yield <value>
finally:
<cleanup>

This makes this:

with some_generator(<arguments>) as <variable>:
<body>

equivalent to this:

<setup>
try:
<variable> = <value>
<body>
finally:
<cleanup>

"""
@wraps(func)
def helper(*args, **kwds):
return GeneratorContextManager(func(*args, **kwds))
return helper

通过注释我们可以看到,我们可以通过给一个try…finally…结构的函数头部加上@contextmanager就可以通过with…as…结构来调用它了,这样try块中yield的数据被as出来,finally块中的数据在with..as..块结束的时候被执行。

这样写出来的代码是不是感觉很nice?

Scrapy定向爬虫教程(五)——保持登陆状态

发表于 2016-10-15 | 分类于 Python |

声明

本教程为原创教程,转载请注明出处http://kongtianyi.cn/2016/10/15/python/Scrapy-Lesson-5/

本节内容

在访问网站的时候,我们经常遇到有些页面必须用户登录才能访问。这个时候我们之前写的傻傻的爬虫就被ban在门外了。所以本节,我们给爬虫配置cookie,使得爬虫能保持用户已登录的状态,达到获得那些需登录才能访问的页面的目的。

由于本节只是单纯的想保持一下登陆状态,所以就不写复杂的获取页面了,还是像本教程的第一部分一样,下载个网站主页验证一下就ok了。本节github戳此处。

阅读全文 »

Scrapy定向爬虫教程(四)——数据存入MongoDB

发表于 2016-10-14 | 分类于 Python |

声明

本教程为原创教程,转载请注明出处http://kongtianyi.cn/2016/10/14/python/Scrapy-Lesson-4/

本节内容

这一小结我们共同学习把Scrapy爬取到的数据存储到MongoDB数据库中。其中包括以下知识:

  • Linux下MongoDB的安装
  • pymongo的安装
  • Scrapy + pymongo
  • Robmongo的下载使用

我已将本节内容的源码传至本项目的useMongoDB分支,不学习本节不影响以后的教程学习。

阅读全文 »

Scrapy定向爬虫教程(三)——爬取多个页面

发表于 2016-09-28 | 分类于 Python |

声明

本教程为原创教程,转载请注明出处http://kongtianyi.cn/2016/09/28/python/Scrapy-Lesson-3/

本节内容

本部分所实现的功能是,批量的爬取网页信息,不再是像以前那样只能下载一个页面了。也就是说,分析出网页的url规律后,用特定的算法去迭代,达到把整个网站的有效信息都拿下的目的。
因为本部分讲完后,功能已经到了可以使用的地步,所以我把本部分的结果独立出来,把项目上传到了github,小伙伴可以下载参考,地址https://github.com/kongtianyi/heartsong。教程余下的其他部分是添加功能和优化,今后我会另外创建一个ex项目上传到github。

阅读全文 »

Scrapy定向爬虫教程(二)——提取网页内容

发表于 2016-09-27 | 分类于 Python |

声明

本教程为原创教程,转载请注明出处http://kongtianyi.cn/2016/09/26/python/Scrapy-Lesson-2/

本节内容

在这一小结,我将介绍如何使用Scrapy通过Selector选择器从网页中提取出我们想要的内容,并将这些内容存放到本地文件。
我们的目标网页是http://www.heartsong.top/forum.php?mod=viewthread&tid=8,一个有七层楼的帖子。我们要获取到每一层楼的下列信息:

  • 所属主题帖的标题
  • 所属主题帖的url
  • 这一楼层的作者
  • 这一楼层的发表时间
  • 这一楼层的内容
阅读全文 »
1…345…7
孔天逸

孔天逸

67 日志
18 分类
32 标签
GitHub E-Mail CSDN
© 2016 — 2021 孔天逸
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4
已有 位大佬知道这儿有个菜鸡了 已被公开处刑 次