中国大学慕课中嵩老师《python网络爬虫与信息提取》国家精品课程中使用BeautifulSou库与requests库爬取最好大学网大学2016年排名实战章节的课程(最新对应连接)
最大变化为现在的网页中大学校名嵌入在第二个td标签中a标签中,另外提取的字符串包含换行符和大量空格。
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 jieHTML(ulist, html):
soup = BeautifulSoup(html, "html.parser")
for tr in soup.find("tbody").children:
m = tr.find('a').string# 校名单独处理,在每个tr标签下第二个td标签中,有且唯一存在一个a标签。
if isinstance(tr, bs4.element.Tag):
tds = tr.find_all('td')
ulist.append([tds[0].string.strip(), m, tds[4].string.strip()])
# 通过使用.strip()去除提取到的字符串当中的换行符与空格
# 这里得到的ulist列表为二维表格。
def printHTML(ulist, num):
print("{0:^10}\t{1:^10}\t{2:^10}".format("排名", "学校名称", "总分"))
for i in range(num):
u = ulist[i]
print("{0:^10}\t{1:^10}\t{2:^10}".format(u[0], u[1], u[2]))
if __name__ == '__main__':
url = 'https://www.shanghairanking.cn/rankings/bcur/201611'
ulist = []
html = getHTML(url)
jieHTML(ulist, html)
printHTML(ulist, 20)
不足:受当前网页限制和本人能力不足,只能提取到前30排名数据。其余部分需要进行js分析获取真正的链接,进而进行爬取。
欢迎大神指点。。。