我的第一个爬虫——获取国防科技大学历年录取分数
2019-01-03 本文已影响0人
秋秋_f99f
1、根据URL获取网页
导入urllib.request库,创建一个表示远程的url的类文件对象req.urlopen(' '),如同本地文件一样读取内容。
import urllib.request as req
#根据URL获取网页:
#http://www.gotonudt.cn/site/gfkdbkzsxxw/lqfs/index.html
url = 'http://www.gotonudt.cn/site/gfkdbkzsxxw/lqfs/index.html'
webpage = req.urlopen(url) # 按照类文件的方式打开网页
# 读取网页的所有数据,并转换为uft-8编码
data = webpage.read().decode('utf-8')
print(data)
执行成功后可以得到如下的数据:
捕获.PNG
2、网页数据存入文件
将读取的网页数据写入文件:
outfile = open("enrollnudt.txt", 'w') # 打开文件
outfile.write(data) # 将网页数据写入文件
outfile.close()
3、提取链接(历年录取分数统计的URL)
① 发现特殊子串
根据数据的特征,寻找到特殊的子串
1.PNG
② 通过特殊子串进行粗筛
先对“国防科技大学2017年录取分数线统计”这一特殊子串进行粗筛,提取出其URL
2.PNG
urls=[]
website = 'http://www.gotonudt.cn'
for year in range(2012,2018):
index = data.find('国防科技大学%d年录取分数统计' % year)
href = data[index-100:index].split('"')[3] # 提取url子串
# href是相对URL,需要加上站点域名
urls.append(website+href)
print(urls)
4、根据超链接抓取并保存链接网页内容
# 分析并提取出国防科技大学2016年录取分数统计的超链
years = [2016, 2015, 2014, 2013, 2012]
urls = []
for year in years:
index = data.find("国防科技大学%s年录取分数统计" %year)
href = data[index-80:index-39] # 根据单个特征串提取url子串
# 注意提取的超链href是相对URL,需要加上站点域名
website = 'http://www.gotonudt.cn'
urls.append([year,website+href])
for url in urls:
webpage = req.urlopen(url[1]) # 根据超链访问链接的网页
data = webpage.read() # 读取超链网页数据
outfile = open("6-4 enroll%s.txt"%url[0], 'wb') # 按二进制写方式打开文件
outfile.write(data) # 将网页数据写入文件
outfile.close() # 关闭文件
读取到的网页数据已经写入了文件:
image.png
5、提取表格
从抓取的数据中可以发现,数据虽然很零碎但是有规律可循,先看2016年分数线的网页,表格范围从<table>...</table>,导入正规表达式包
def firsttable2file(year, url):
webpage = req.urlopen(url)
data = webpage.read().decode('utf-8')
# 获取网页中的第一个表格中所有内容:
table = re.findall(r'<table(.*?)</table>', data, re.S)
firsttable = table[0]
outfile = open('temp.txt', 'w')
outfile.write(firsttable)
outfile.close()
6、提取表格中的行
# 获取表格中所有行:
rows = re.findall(r'<tr(.*?)</tr>', firsttable, re.S)
outfile = open('temp.txt', 'w')
for row in rows:
outfile.write(row)
outfile.write('\n')
outfile.close()