爬虫案例视频讲解:
视频教学
功能描述:
输入:大学排名url链接
输出:大学排名信息的屏幕输出(排名、大学、总分)
技术路线:requests、bs4
定向爬虫:仅对输入url进行爬取,不扩展爬取
程序结构设计
步骤1:从网络上获取大学排名网页内容
getHTMLText()
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ''
步骤2:提取网页内容中信息到合适的数据结构
finallUnivList()
该步骤是整个案例中的核心
分析:
1、从图片中可以看到关于大学排名的内容都存在于<tbody>标签中,所以先获取<tbody>标
2、每一所大学又都存在于<tr>标签中的<td>标签中,然后再获取<td>标签
3、将非标签内容过滤掉
大体意思就是这样,详细分析再视频中
def fillUnivList(ulist, html):
soup = BeautifulSoup(html, 'html.parser')
for tr in soup.find('tbody').children:
if isinstance(tr, bs4.element.Tag): # 过滤掉非标签的信息
tds = tr.find_all('td')
ulist.append([tds[0].string, tds[1].string, tds[2].string])
步骤3:利用数据结构展示并输出结果
printUnivList()
def printUnivList(ulist, num):
# 打印表头,并处理中英文对齐问题
tplt = "{0:^10}\t{1:{3}^10}\t{2:^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)))
完整代码
import requests
from bs4 import BeautifulSoup
import bs4
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ''
def fillUnivList(ulist, html):
soup = BeautifulSoup(html, 'html.parser')
for tr in soup.find('tbody').children:
if isinstance(tr, bs4.element.Tag): # 过滤掉非标签的信息
tds = tr.find_all('td')
ulist.append([tds[0].string, tds[1].string, tds[2].string])
def printUnivList(ulist, num):
# 打印表头,并处理中英文对齐问题
tplt = "{0:^10}\t{1:{3}^10}\t{2:^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.cn/zuihaodaxuepaiming2019.html'
html = getHTMLText(url)
fillUnivList(uinfo, html)
printUnivList(uinfo, 20) # 输出排名前20的学习信息
main()
中英文对齐问题
点此查看