好好学习,天天向上

小爬虫之下载豆瓣文章

这个小东西来源于某一天我浏览豆瓣的一个养生帖子,然后突发奇想,想把所有养生的东西下载下来。于是想到了用python写个小爬虫

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
#!/usr/bin/python

import re

import urllib



#获取html页面内容

def getHtml(url):

page = urllib.urlopen(url)

html = page.read()

return html



#将html中满足pattern的内容找出,写入filePath中

def getContent(html,pattern,filePath="1.txt"):

contentre = re.compile(pattern)

contentList = re.findall(contentre,html)

for i in contentList:

i = i.replace("<br/>", "\n") #这里由于写入txt文件,所以要做个字符替换

i = i + "\n\n***********************************************************\n\n"

#write into xx file

writeFile(i,filePath)



#将content以追加的形式写入filePath

def writeFile(content, filePath):

output = open(filePath, "a+")

output.writelines(content)

output.close()



#要爬的内容不只一页哦,所以这个函数是从html中获取下一页的地址

def getNext(html,pattern):

nre = re.compile(pattern)

nt = re.findall(nre,html)

return nt



#这个url就是要爬的网址,可以替换成任意想要的网址

url = "http://www.douban.com//group//topic//5480779//?author=1#sep"

#这个pattern和nextPage都是查看网页源代码中发现的内容和下一页地址的格式,可以用正则表达式获取相应的内容

pattern = r'<p class="">(.*?)</p>'

nextPage = r'<link rel="next" href="(.*?)"/>'

while True:

html = getHtml(url)

getContent(html, pattern,"forHealth.txt")

has = getNext(html,nextPage) #若下一页地址为空,则记得退出

if 0 == len(has):

print "Finish!"

break

url = has[0]

后面的话:其实这个东西可以扩展应用下,用来下载想要的图片呀,小说呀,视频神马的,只要查看网页源代码,找到所在内容的前后格式,用正则表达式抠出来就可以了。我比较懒,经常在没网络的地方玩,因此想下载点东西可以离线看看,所以这个小东西对我还是挺有用的……

请言小午吃个甜筒~~