Beautiful Soup库学习-中国大学MOOC-Python网络爬虫与信息提取-北京理工大学嵩天教授

Beautiful Soup库知识及项目实战

  • 前言
  • 一、Beautifou Soup相关知识
    • 1:Beautiful Soup库的下载
    • 2:Beautiful Soup库的使用
    • 3:BeautifulSoup类的基本元素
    • 4:BeautifulSoup的几个常用方法
  • 二、中国大学排名定向爬虫项目实战
    • 1.网页介绍与预期想要的结果
    • 2.爬虫可行性分析
    • 3.程序分析
    • 4.代码展示
    • 5.代码几个点需要注意的地方:
  • 总结


前言

本博客会先介绍Beautiful Soup库的基础知识,再讲解1个相关实战项目。非常基础,具体视频以及课件,在中国大学MOOC里可以找到,由北京理工大学,嵩天教授主讲:Python网络爬虫与信息提取


一、Beautifou Soup相关知识

主要介绍Beautifou Soup的基本使用以及bs4库的基本元素
Beautiful Soup库学习-中国大学MOOC-Python网络爬虫与信息提取-北京理工大学嵩天教授_第1张图片

1:Beautiful Soup库的下载

Beautiful Soup库学习-中国大学MOOC-Python网络爬虫与信息提取-北京理工大学嵩天教授_第2张图片

2:Beautiful Soup库的使用

Beautiful Soup库学习-中国大学MOOC-Python网络爬虫与信息提取-北京理工大学嵩天教授_第3张图片
可以看到通过Beautiful Soup库解析出来得到的,不再是像requests库那样的一个html页面,而是一个个的标签。即如下图所示:建立html页面和标签之间的对应关系
Beautiful Soup库学习-中国大学MOOC-Python网络爬虫与信息提取-北京理工大学嵩天教授_第4张图片

3:BeautifulSoup类的基本元素

Beautiful Soup库学习-中国大学MOOC-Python网络爬虫与信息提取-北京理工大学嵩天教授_第5张图片
使用方法举例,如图是demo页面:
Beautiful Soup库学习-中国大学MOOC-Python网络爬虫与信息提取-北京理工大学嵩天教授_第6张图片
BeautifulSoup基本元素举例输出,如下图:
Beautiful Soup库学习-中国大学MOOC-Python网络爬虫与信息提取-北京理工大学嵩天教授_第7张图片

4:BeautifulSoup的几个常用方法

Beautiful Soup库学习-中国大学MOOC-Python网络爬虫与信息提取-北京理工大学嵩天教授_第8张图片
还有个**find_all()**方法
Beautiful Soup库学习-中国大学MOOC-Python网络爬虫与信息提取-北京理工大学嵩天教授_第9张图片
这个方法经常用到,大家多留心,如图是使用举例:
Beautiful Soup库学习-中国大学MOOC-Python网络爬虫与信息提取-北京理工大学嵩天教授_第10张图片

二、中国大学排名定向爬虫项目实战

1.网页介绍与预期想要的结果

中国大学排名链接

Beautiful Soup库学习-中国大学MOOC-Python网络爬虫与信息提取-北京理工大学嵩天教授_第11张图片
输入url链接后,输出如下图:
Beautiful Soup库学习-中国大学MOOC-Python网络爬虫与信息提取-北京理工大学嵩天教授_第12张图片

2.爬虫可行性分析

标签如下图:我们先找到tbody标签,再找到其子标签tr,接着找tr标签的子标签,也就是td标签,直接获取每个td标签里的值。
Beautiful Soup库学习-中国大学MOOC-Python网络爬虫与信息提取-北京理工大学嵩天教授_第13张图片

3.程序分析

Beautiful Soup库学习-中国大学MOOC-Python网络爬虫与信息提取-北京理工大学嵩天教授_第14张图片

4.代码展示

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('td')
            ulist.append([tds[0].text, tds[1].text, tds[4].text])


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].strip(), u[1].strip(), u[2].strip(),chr(12288)))


def main():
    unifo = []
    url = "https://www.shanghairanking.cn/rankings/bcur/2020"
    html = getHTMLText(url)
    fillUnivList(unifo, html)
    printUnivList(unifo, 20)
main()

5.代码几个点需要注意的地方:

tag.text的用法是:获取标签下所有文字的内容
Beautiful Soup库学习-中国大学MOOC-Python网络爬虫与信息提取-北京理工大学嵩天教授_第15张图片
tag.contents的用法:将其子节点以列表形式输出,因此ulist.append可以改为:

 #ulist.append([tds[0].text, tds[1].text, tds[4].text])之前的代码
  ulist.append([tds[0].contents[0], tds[1].contents[0].text, tds[4].contents[0]])

Beautiful Soup库学习-中国大学MOOC-Python网络爬虫与信息提取-北京理工大学嵩天教授_第16张图片
关于tag.string的说明:这就是为什么不用tds[0].string:
即标签中既有bs4.element.NavigableString也有bs4.element.Comment,会导致回报None。
Beautiful Soup库学习-中国大学MOOC-Python网络爬虫与信息提取-北京理工大学嵩天教授_第17张图片

总结

多看官方文档(比直接找博客来的快且准确):文档链接请点击

你可能感兴趣的:(python爬虫,python,爬虫)