抓取动态网页(string定义函数getHTMLText()获取网页信息定义printUnivList )
优采云 发布时间: 2022-02-22 08:11抓取动态网页(string定义函数getHTMLText()获取网页信息定义printUnivList
)
Python爬虫--2019大学排名数据爬取准备输入:大学排名URL连接输出:大学排名信息屏幕输出所需库:requests,bs4获取网页信息的思路提取网页中的内容,放入数据结构,数据结构用于显示和输出结果。编程定义函数getHTMLText()获取网页信息。将定义函数UnivList()放入数据结构定义函数printUnivList()中,输出到屏幕上。
总体:
查看url源码的步骤
分析源码看看要爬取的内容在哪里
从图中可以看出,排名信息在标签中
具体信息为标签下标签中的字符串
定义函数getHTMLText
def getHMLText(url):
\'\'\'
获取url信息,输出url的内容,来抓取网页的信息
\'\'\'
try:
r = request.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return "抓取失败!"
定义函数UnivList()
def UnivList(ulist, html):
\'\'\'
提取html中的数据,放入到ulist列表,完成数据提取
\'\'\'
soup = BeautifulSoup(html, "html.parser")
for tr in soup.find(\'tbody\').children:
if isinstance(tr, bs4.element.Tag): # 判断tr的子节点是否为非属性字符串
tds = tr(\'td\')
# print(tds)
# print(\'#\' * 30)
# print(tds[0], tds[0].string)
# print(\'#\' * 30)
# print(tds[1], tds[1].string)
# print(\'#\' * 30)
# print(tds[2], tds[2].string)
# print(\'#\' * 30)
# print(tds[3], tds[3].string)
ulist.append([tds[0].string, tds[1].string, tds[3].string, tds[2].string])
定义函数 printUnivList()
def printUnivList(ulist, num):
\'\'\'
将ulist列表信息打印,num表示打印前多少排名的学校
\'\'\'
print("{:^3}\t{:^10}\t{:^20}\t{:^30}".format("排名", "学校名称", "总分", \'地址\'))
for i in range(num):
u = ulist[i]
print("{:^3}\t{:^10}\t{:^20}\t{:^30}".format(u[0], u[1], u[2], u[3]))
主函数 main()
def main():
\'\'\'
实现整个代码
\'\'\'
ulist = []
url = \'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html\'
html = getHTMLText(url)
UnivList(ulist, html)
printUnivList(ulist, 100)
调用主函数
main()
完整代码
import requests
import bs4
from bs4 import BeautifulSoup
def getHMLText(url):
\'\'\'
获取url信息,输出url的内容,来抓取网页的信息
\'\'\'
try:
r = request.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return "抓取失败!"
def UnivList(ulist, html):
\'\'\'
提取html中的数据,放入到ulist列表,完成数据提取
\'\'\'
soup = BeautifulSoup(html, "html.parser")
for tr in soup.find(\'tbody\').children:
if isinstance(tr, bs4.element.Tag): # 判断tr的子节点是否为非属性字符串
tds = tr(\'td\')
# print(tds)
# print(\'#\' * 30)
# print(tds[0], tds[0].string)
# print(\'#\' * 30)
# print(tds[1], tds[1].string)
# print(\'#\' * 30)
# print(tds[2], tds[2].string)
# print(\'#\' * 30)
# print(tds[3], tds[3].string)
ulist.append([tds[0].string, tds[1].string, tds[3].string, tds[2].string])
def printUnivList(ulist, num):
\'\'\'
将ulist列表信息打印,num表示打印前多少排名的学校
\'\'\'
print("{:^3}\t{:^10}\t{:^20}\t{:^30}".format("排名", "学校名称", "总分", \'地址\'))
for i in range(num):
u = ulist[i]
print("{:^3}\t{:^10}\t{:^20}\t{:^30}".format(u[0], u[1], u[2], u[3]))
def main():
\'\'\'
实现整个代码
\'\'\'
uinfo = []
url = \'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html\'
html = getHTMLText(url)
fillUnivList(uinfo, html)
printUnivList(uinfo, 100)
main()