1.此操作的实现需要引入 requests库与 bs4中的BeautifulSoup库
2.我们这次爬取网页 http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html 的排名信息
3.打开源代码,发现我们要爬取的所有学校信息(排名、学校名称、总分)均包含在 tbody 标签下,而tbody的子标签tr标签包含了一所学校的全部信息,tr标签下的多个td标签对应一所学校的各项参数,这就包括我们需要的信息。如下图:(由于源代码是横向,所以我截取了开头与结尾,最好自己打开网站看一下)
4.上代码
import requests import bs4 from bs4 import BeautifulSoup #函数一:从网络上获取大学排名网页内容。 def getHtml(url): try: r = requests.get(url, timeout = 30) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "" #函数二:提取网页内容中信息到合适的数据结构。 def fillList(ulist, html):
soup = BeautifulSoup(html, "html.parser")
soup.find("tbody") #找到 “tbody”
for tr in soup.tbody.childern: #遍历 “tbody”的子标签, 找到 “tr”
if isinstance(tr, bs4.element.Tag): #过滤非标签类型的字符串 检测 tr 标签的类型
tds = tr("td")
ulist.append([tds[0].string, tds[1].string, tds[2].string])#将我们需要的td标签添加到列表中
#函数三:利用数据结构展示并输出结果 def printList(demo, num):
tplt = "{:^10}\t{1:{3}^10}\t{2:^10}" #保证中文输出对齐
print(tplt.format("排名", "学校名称", "总分", chr(12288))) #print函数打印表头 for i in range(num): #控制打印学校之数量
u = ulist[i] print(tplt.format(u[0], u[1], u[2], chr(12288))) #函数四:main函数 def main(): uinfo = [] url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html" html = getHtml(url) fillList(uinfo, html) printList(uinfo, 20) main()
5.效果展示:
6.注意点:(1).append([元素])
(2)中文对齐的优化, 应用广泛
小白第一次写博,若有不当之处, 请各位明示,谢谢 。最后,望武汉之疾快快褪去!
原文:https://www.cnblogs.com/wharder/p/12339745.html