Trade Off

supercalifragilisticexpialidocious

抓取一些网页上的表格

这些表格是所有参加比赛的学生成绩单,当然只有省份、学校、准考证、姓名、组别、奖项、是否进入决赛这几个列,我用python写的脚本来抓取,存入了本地的一个excel中,所以除了python环境之外还需要xlwt这个包包:)

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
#/usr/bin/env python
#coding: utf-8

import urllib2
import re
import xlwt

link_list = []
xls = xlwt.Workbook()
table = xls.add_sheet("main")

for i in xrange(288, 318):
link_list.append("http://www.lanqiao.org/Article/ShowArticle.asp?ArticleID=%d"%i)

chinese = []
content = ''
while len(link_list) > 0:
for link in link_list:
print link
try:
content = urllib2.urlopen(url = link, timeout = 3).read()
link_list = link_list[1:]
except:
print "timeout!"
if link not in link_list[1:]:
link_list.append(link)
some = re.findall(u'<TR.*?<\/TR>', content.decode('gbk', 'ignore'), re.S)
for s in some:
chinese_value = re.findall(u'(?<=\u5b8b\u4f53>).*(?=<\/FONT>)', s)
chinese.append(','.join(chinese_value))

for line in xrange(0, len(chinese)):
tmp = chinese[line].split(',')
for i in xrange(0, len(tmp)):
table.write(line, i, tmp[i])
print "%d, %d, %s" % (line, i, tmp[i])

xls.save('x.xls')
print len(link_list)

链接抓取超时的时候会自动重新抓取,最终就有了一个叫x.xls的表格。其中有个省的数据有问题,可以在筛选中看到奖项这里面有个垃圾数据项,自己改改吧。

里面的正则表达式耗费了我好久时间!!!不过我还是很欣慰能找到这行:

1
(?<=\u5b8b\u4f53>).*(?=<\/FONT>)

前面两个unicode是“宋体”,这个得看具体的html代码了,所以这个脚本没什么通用性……

Comments