Pythonのランキングデータの爬虫類は、大学をクロール--2019

Pythonのランキングデータの爬虫類は、大学をクロール--2019

準備

  1. 入力:大学ランキングURL接続
  2. 大学ランキング情報画面出力:出力
  3. リクエスト、BS4:ライブラリを使用する必要性

思考

  1. 情報ページを取得します。
  2. Webページの内容を抽出し、データ構造に格納
  3. 示されたデータ構造を使用して結果を出力します

プログラミング

  1. 情報ページを取得するために定義された関数getHTMLText()
  2. 定義関数UnivList()データ構造に
  3. 画面に定義された関数printUnivList()出力

全体:

  • あなたは、全体的な枠組みを生成するために、カスタム関数を記述する必要があります
  • 機能、フレーム主な機能を書きます
  • 最後に、関数を呼び出します

ステップ

ビューのソースURL

どのような位置にあるコンテンツをクロールする必要性を参照して、ソースコードを分析
001.png

絵として、中ランキング情報から分かる<tbody>タグ
内の特定の情報<tr>ラベルの場合<td>、ラベルの文字列

定義関数getHTMLText

def getHMLText(url):
    '''
    获取url信息,输出url的内容,来抓取网页的信息
    '''
    try:
        r = request.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "抓取失败!"

定義関数UnivList()

def UnivList(ulist, html):
    '''
    提取html中的数据,放入到ulist列表,完成数据提取
    '''
    soup = BeautifulSoup(html, "html.parser")
    for tr in soup.find('tbody').children:
        if isinstance(tr, bs4.element.Tag):  # 判断tr的子节点是否为非属性字符串
            tds = tr('td')
            # print(tds)
            # print('#' * 30)
            # print(tds[0], tds[0].string)
            # print('#' * 30)
            # print(tds[1], tds[1].string)
            # print('#' * 30)
            # print(tds[2], tds[2].string)
            # print('#' * 30)
            # print(tds[3], tds[3].string)
            ulist.append([tds[0].string, tds[1].string, tds[3].string, tds[2].string])

定義関数printUnivList()

def printUnivList(ulist, num):
    '''
    将ulist列表信息打印,num表示打印前多少排名的学校
    '''
    print("{:^3}\t{:^10}\t{:^20}\t{:^30}".format("排名", "学校名称", "总分", '地址'))
    for i in range(num):
        u = ulist[i]
        print("{:^3}\t{:^10}\t{:^20}\t{:^30}".format(u[0], u[1], u[2], u[3]))

メイン関数main()

def main():
    '''
    实现整个代码
    '''
    ulist = []
    url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html'
    html = getHTMLText(url)
    UnivList(ulist, html)
    printUnivList(ulist, 100)

メイン関数呼び出し

main()

完全なコード

import requests
import bs4
from bs4 import BeautifulSoup
def getHMLText(url):
    '''
    获取url信息,输出url的内容,来抓取网页的信息
    '''
    try:
        r = request.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "抓取失败!"

def UnivList(ulist, html):
    '''
    提取html中的数据,放入到ulist列表,完成数据提取
    '''
    soup = BeautifulSoup(html, "html.parser")
    for tr in soup.find('tbody').children:
        if isinstance(tr, bs4.element.Tag):  # 判断tr的子节点是否为非属性字符串
            tds = tr('td')
            # print(tds)
            # print('#' * 30)
            # print(tds[0], tds[0].string)
            # print('#' * 30)
            # print(tds[1], tds[1].string)
            # print('#' * 30)
            # print(tds[2], tds[2].string)
            # print('#' * 30)
            # print(tds[3], tds[3].string)
            ulist.append([tds[0].string, tds[1].string, tds[3].string, tds[2].string])

def printUnivList(ulist, num):
    '''
    将ulist列表信息打印,num表示打印前多少排名的学校
    '''
    print("{:^3}\t{:^10}\t{:^20}\t{:^30}".format("排名", "学校名称", "总分", '地址'))
    for i in range(num):
        u = ulist[i]
        print("{:^3}\t{:^10}\t{:^20}\t{:^30}".format(u[0], u[1], u[2], u[3]))


def main():
    '''
    实现整个代码
    '''
    uinfo = []
    url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html'
    html = getHTMLText(url)
    fillUnivList(uinfo, html)
    printUnivList(uinfo, 100)

main()

おすすめ

転載: www.cnblogs.com/moniter/p/12334232.html