版权声明: https://blog.csdn.net/Wang_Jiankun/article/details/83757133
Python 网络爬虫笔记5 – Beautiful Soup库实战
Python 网络爬虫系列笔记是笔者在学习嵩天老师的《Python网络爬虫与信息提取》课程及笔者实践网络爬虫的笔记。
课程链接:Python网络爬虫与信息提取
参考文档:
Requests 官方文档(英文)
Requests 官方文档(中文)
Beautiful Soup 官方文档
re 官方文档
Scrapy 官方文档(英文)
Scrapy 官方文档(中文)
中国大学排名定向爬虫
import requests
from bs4 import BeautifulSoup
import bs4
def get_html_text(url):
"""
从网络上获取大学排名网页内容
"""
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
def fill_univ_list(univ_list, html):
"""
提取网页内容中的信息(大学排名表)到合适的数据结构
"""
soup = BeautifulSoup(html, "html.parser")
# 分析网页源代码,确定检索的内容
for tr in soup.find('tbody').children:
if isinstance(tr, bs4.element.Tag):
tds = tr('td')
univ_list.append([tds[0].string, tds[1].string, tds[3].string])
def print_univ_list(univ_list, num):
"""
输出结果,即大学排名表
"""
# 格式化输出,使用中文字符填充空白实现居中对齐
template = "{0:^10}\t{1:{3}^10}\t{2:^10}"
print(template.format("排名", "学校名称", "总分", chr(12288)))
for i in range(num):
u = univ_list[i]
print(template.format(u[0], u[1], u[2], chr(12288)))
def main():
"""
输入大学排名的 url,得到排名表
"""
univ_info = []
url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2018.html'
html = get_html_text(url)
fill_univ_list(univ_info, html)
print_univ_list(univ_info, 20) # 20 univs
if __name__ == '__main__':
print('running crawl_ranking')
main()