Python 简单爬虫

说明

这个爬虫是相对简单的爬虫,只是抓取豆瓣上的图书信息,并且有一个简单的界面

d

上面是完成后的样子

爬取思路如下:

1.先找一个简单的网页作为目标网页爬取

2.分析网页的源代码结构

3.通过正则表达式筛选我们需要的数据

4.中间可以加一些分页等功能

5.建立一个窗口和按钮,并绑定点击事件为抓取内容方法

6.多线程

代码如下:

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

from Tkinter import *
import urllib,re,threading

def get_book(ID):
'''
获取书名和价格
'''

#通过URL获取网页内容
html = urllib.urlopen('https://read.douban.com/tag/%E6%82%AC%E7%96%91/')
bookmsg = html.read()
#通过正则表达式获取书名和价格
reg = r'<span class="price-tag ">(.*?)元</span>.*?\'read.douban.com\'\)">(.*?)</a>'
reg = re.compile(reg)
h = re.findall(reg, bookmsg)
return h

def get_msg():
'''
分页调用获取书籍方法
'''

ID = 0
p = []
x = 0
while ID < 888:
List = get_book(ID)
ID += 20
for i in List:
x += 1
p.append(float(i[0]))
text.insert(END, '书名:%s 价格:%s\n'%(i[1],i[0]))
global varl
varl.set('已经获取%s页'%(int(ID / 20) + 1))
global text
text.insert(END, '####################################\n')
text.insert(END, '书本总数:%s\n'%x)
text.insert(END, '书本总价格:%s\n'%sum(p))
text.insert(END, '书本平均价格:%s\n'%float(sum(p) / x))

def qd():
'''
获取数据单起一个线程
'''

t = threading.Thread(target = get_msg)
t.start()

def window():

root = Tk()

root.title('Book采集软件')

root.geometry('+500+300')

global text
text = Text(root, font=('新宋体', 10))

text.grid()

b = Button(root, text='开始采集', font=('新宋体', 10), command=qd)

b.grid()

global varl
varl = StringVar()
l = Label(root, textvariable= varl, fg = 'blue')

l.grid()
varl.set('准备中')


root.mainloop()

window()

最后

以动手实践为荣 , 以只看不练为耻;

以打印日志为荣 , 以单步跟踪为耻;

以空格缩进为荣 , 以制表缩进为耻;

以单元测试为荣 , 以人工测试为耻;

以模块复用为荣 , 以复制粘贴为耻;

以多态应用为荣 , 以分支判断为耻;

以Pythonic为荣 , 以冗余拖沓为耻;

以总结分享为荣 , 以跪求其解为耻;

引自啄木鸟社区