一个好玩的爬虫
明天就要考试了,就是不想复习,就想去写代码,学习编程!2018,第一炮。
技术路线:request-bs4
程序结构:
1.从网上获取大学排名 :getHTMLText()
2.提取网页内容到合适的数据结构中:fillUnivList()
3.利用合适的数据结构展示爬取的结果 :printUnivList()
源程序代码:
import requests #导入request库
import bs4 #导入bs4库,包括BeautifulSoup
#输入爬取的网址,输出爬取的内容
def getHTMLText(url):
try:
r=requests.get(url,timeout=30) #爬取的网址以及,反应时间
r.raise_for_status() #判断爬取是否异常
r.encoding=r.apparent_encoding #更改编码
return r.text #返回读取的内容
#异常的处理
except:
return ""
#将页面放到一个list列表中,
def fillUnivList(ulist,html):
#使用beautifulSoup对爬取的内容进行html解码
soup=BeautifulSoup(html,"html.parser")
#遍历tbody标签的孩子的tr标签
for tr in soup.find('tbody').children:
#对获取的tr标签进行判断是不是标签
if isinstance(tr,bs4.element.Tag):
tds=tr('td') #获取td标签,列表类型
#向定义的列表增加信息
ulist.append([tds[0].string,tds[1].string,tds[3].string])
#学校信息的打印,需要格式化输出
def printUnivList(ulist,num):
#表示填充时使用第三个变量,中文空格 chr(12288)
tplt="\t^10}\t"
#首先打印表头,居中对齐10个字符
print(tplt.format("排名","学校名称","总分",chr(12288)))
for i in range(num):
u=ulist[i]
print(tplt.format(u[0],u[1],u[2],chr(12288)))
#调用的主函数
def main():
uinfo=[] #定义一个列表
url='http://www.zuihaodaxue.com/zuihaodaxuepaiming2016.html' #大学排名的链接
html=getHTMLText(url) #调用函数,爬取网页
fillUnivList(uinfo,html) #将爬取的网页放到uinfo中
printUnivList(uinfo,20) #打印前20个大学排名信息
#程序入口
main()
网页结果
01
爬取显示结果
2
这里爬取的网页是静态文字内容,不适用JavaScript动态生成的,2017年的大学排名在本程序就不可以使用。这里还需要注意的是对于字符串的格式化输出,使用chr(12288),代表的是一个中文的空格键。作者小白,请多多指导!