Python网络爬虫与信息提取

(一)爬取中国大学排名(BeautifulSoup库)|Pyth

2018-01-15  本文已影响271人  努力奋斗的durian

1.爬取网页的步骤
2.爬取网页的代码及显示结果
3.自定义getHTMLText函数代码存在的知识点
4.自定义fillUnivList函数代码存在的知识点
5.自定义printUnivList函数代码存在的知识点
以下内容是看了【Python网络爬虫与信息提取】.MOOC. 北京理工大学 的视频,自己整理并分析的结果。
最近更新:2018-01-15
视频原链接:https://www.bilibili.com/video/av9784617/index_22.html#page=32

1.爬取网页的步骤

2.爬取网页的代码及显示结果

2.1爬取网页的代码

#CrawUnivRankingB.py
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].string, tds[1].string, tds[3].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/zuihaodaxuepaiming2016.html'
    html = getHTMLText(url)
    fillUnivList(uinfo, html)
    printUnivList(uinfo, 20) # 20 univs
main()

2.2 代码显示的结果


大学排名.png

3.自定义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 ""

3.1自定义getHTMLText函数的理解
从网络上获取大学排名网页内容
3.2 requests.get的理解

 r = requests.get(url, timeout=30)
#requests.get(url, params=None,**kwarge)#

timeout设定超时时间,以秒为单位

4.自定义fillUnivList函数代码存在的知识点

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].string, tds[1].string, tds[3].string])

4.1自定义fillUnivList函数的理解
提取网页内容中信息到合适的数据结构

4.2 Beautiful Soup库的解析器是

soup = BeautifulSoup('<html>data</html>','html.parser')
soup = BeautifulSoup(html, "html.parser")

这里的代码中的html是跟解释器中的“标签树”相对应。

4.3 Beautiful Soup标签树的下行遍历

soup.find('tbody').children:

4.4标签的过滤

if isinstance(tr, bs4.element.Tag):

这里isinstance检测出tbody儿子中的标签类,过滤掉非标签类。

5.自定义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)))

5.1 自定义printUnivList函数的理解
利用数据结构展示并输出结果 。

5.2 format知识点

tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"

format知识点
请参考此博文:https://www.jianshu.com/p/e6912942f3f4

5.2解决中文对齐问题
采用中文字符的空格填充 chr(12288)。

上一篇 下一篇

猜你喜欢

热点阅读