最近看到各大牛,都在捣鼓 Python。本着羡慕嫉妒恨的节奏,也热闹下。公司有个北大女医学博士,人家都会用 Python 写东西。跟着学习下,整理下这几天学到的东西和遇到的问题。

安装 Python

官网下载

Downloads 按钮很明显也很智能,根据你当前的系统,给你推荐下载哪一个。如下图:

She_is_Python

选择 Python 版本

Python 3.X 和 Python 2.X 到底该选择哪个?

听别人说改动挺大,本着跟准新技术的原则,我选择的是 Python 3.X。

学习教程

官方教程

官方库

第三方库

3.X 和 2.X版本的区别

pip

pip 是啥,类似 iOS 开发中的 CocoaPods,类库管理工具。

如何安装 pip,需自备梯子

如何使用 pip

我在安装的过程中,安装成功,但出现了一个没有 pip 这个命令的问题,应该是还没安装成功的原因吧。下方答案虽然没打对号,但是用这个sudo easy_install pip命令,就解决了。

StackOverFlow 上的解决方法

4.Get/POST 请求数据

GET 请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import urllib.request
import urllib
data = {}
data['id'] = '1' #请求参数
urlStr = 'http://XXX' #请求地址
urlParameters = urllib.parse.urlencode(data)
print(urlParameters)#打印参数
fullURLString = urlStr + '?' + urlParameters #拼接URL 地址 + 参数
resp = urllib.request.urlopen(fullURLString)
responseStr = resp.read()
responseDecodeStr = responseStr.decode("utf8")
print(responseDecodeStr)

POST 请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import urllib.request
import urllib
data = {}
data['id'] = '1'
urlStr = 'http://XXX'#请求地址
urlParameters = urllib.parse.urlencode(data)
postdata = urlParameters.encode('utf-8')
print(urlParameters)
response = urllib.request.urlopen(urlStr,postdata)
responseStr = response.read()
responseDecodeStr = responseStr.decode("utf8")
print(responseDecodeStr)

爬虫 1:查找一个网站所有的链接地址

这个例子是这里面的,光看不敲,不是做技术的态度。参照他的,自己写一哈,不如他写的好,好多东西没考虑到。

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
import urllib.request
import urllib
from bs4 import BeautifulSoup
from collections import deque
#要爬取的地址
urlStr = 'http://www.douban.com'
#创建一个队列 用来存储要爬的URL
spiderQueue = deque()
#将爬取的地址放在队列里
spiderQueue.append(urlStr)
#创建一个集合 用来存储已经爬过的URL
visitedSet = set()
#创建循环开始扫描
while spiderQueue:
urlStr = spiderQueue.popleft() #队首元素
print (urlStr)
try:
response = urllib.request.urlopen(urlStr)
responseStr = response.read()#URL网页源码
soup = BeautifulSoup(responseStr)
linksArray = soup.findAll('a')
#print('链接地址:' + str(linksArray))
for link in linksArray:
hrefStr = link.get('href')
print('链接地址 ' + hrefStr + '\n')
if 'http' in hrefStr and hrefStr not in visitedSet:
visitedSet |={hrefStr}
spiderQueue.append(hrefStr)
print('加入队列 ---> ' + hrefStr + '\n')
except:
print('遇到异常')
continue

爬虫2:爬妹子图片

这个可能有点邪恶,是这篇文章教我的, 我多添加了些代码。可以爬出这个豆瓣妹子网站的所有图片。可以再优化下。

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
#抓妹子图片
#根据http://dbmeizi.com/?p=1
#li class = 'span3'
#img data-bigimg属性
import urllib.request
import urllib
from bs4 import BeautifulSoup
while 1:#这个地方可以优化下 要不爬到Duang
pageNumber = 1 #页码
urlStr = 'http://dbmeizi.com/?p=' + str(pageNumber)#URL 地址
response = urllib.request.urlopen(urlStr)
responseStr = response.read() #网页源代码
soup = BeautifulSoup(responseStr)
liTagsArray = soup.findAll('li',attrs = {'class':'span3'})
for li in liTagsArray:
imageTags = li.findAll('img')#img标签
for image in imageTags:
imageLink = image.get('data-bigimg')#data-src bigimg
imageName = image.get('data-id')
fileSavePath = '/Users/iYiming/Downloads/meizi/%s.jpg' % imageName
urllib.request.urlretrieve(imageLink,fileSavePath)
print (fileSavePath)
pageNumber += 1
urlStr = 'http://dbmeizi.com/?p=' + str(pageNumber)#URL 地址

展示下爬到的东西:

She_is_Python

其他

一个不错教程:用 Python 3 开发网络爬虫

中间遇到的问题:

Python 3.4 版本 和 2.7 版本的不同

IDLE 中不能输入中文的问题

有疑惑的问题

0.IDLE 如何带自动提示,太难受了
1.没有提示,这么多类库,怎么用?

感谢上面所有链接的作者!