クレソンの音楽TOP250のクロールデータ

参考URLます。https://music.douban.com/top250

情報豊かな詳細ページ、詳細ページでは、この爬虫類ので、詳細ページへの最初のクロールURLリンクして、データをクロールので。

曲のタイトル、アーティスト、ジャンル、リリース日、出版社などで得点と:情報必要なクロールです。

データは、TXT、JSON、CSVストレージを使用しました。

輸入再
インポートCSV
インポート時
輸入JSON
インポート要求
BS4インポートBeautifulSoupから
リクエストからRequestExceptionをインポート
    
    
デフget_one_page(URL):
    試してみてください。
        ヘッダ= { 'のUser-Agent': 'のMozilla / 5.0(Windows NTの6.1; Win64の、x64の)のAppleWebKit / 537.36' 
                   + '(ヤモリ様KHTML)クローム/ 73.0.3683.103サファリ/ 537.36'}
        応答= requests.get(URL、ヘッダー=ヘッダ)
        #response.encoding = response.apparent_encoding
        response.status_codeの== 200の場合:
            リターンresponse.text
        他:
            Noneを返します
        Noneを返します
    RequestException除きます:
        Noneを返します

デフget_detailurl(テキスト):
    detailurl = []
    スープ= BeautifulSoup(テキスト、 'lxmlの')
    NBG = soup.find_all(名= ''、クラス_ = 'NBG')
    私NBG中のため:
        detailurl.append(I [ 'のhref'])
    リターンdetailurl
    
デフparse_one_page(テキスト):
    解析ライブラリスープ= BeautifulSoup(テキスト、 'lxmlの')#使用lxmlのをXML
    パフォーマー= soup.select( '#インフォメーション> span>のスパン> A')
    選択していない属性を持つラベルの下で#は、そうでない場合はfind_all使用します
    歌= soup.select( '#ラッパー> H1>スパン')
    
    スタイル= re.findall。?( 'ジャンル:?</ span>の(*)<BR'、テキスト、re.S)#*非欲張りマッチ
    #1 Re.Sマッチが改行を含むすべての文字が含まれます
    LEN(スタイル)== 0の場合:一部のページがジャンルされていない#、NULLで埋め
        style.append( 'NULL')
    出版社= re.findall( '出版者:??</ span>の(*)<BR'、テキスト、re.S)
    LEN(出版社)== 0の場合:#一部のページが発行者ではありません、NULLで埋め
        publisher.append( 'NULL')
    パターン= re.compile( 'リリース日:?? </ span>の(*)<BR'、re.S)
    #compileは()の後に、通常のオブジェクト、簡単に再利用にコンパイルされた文字列を強調します
    時間= re.findall(パターン、テキスト)
    
    スコア= soup.find_all(名= '強い'、クラス_ = "LL rating_num")
    ラベルの下find_allで#は、プロパティケースを持っています
    産出 {
        'パフォーマー':パフォーマーは、[0] .string、
        歌 ':歌[0] .string、
        'スタイル':[0] .stripスタイル()、
        '時間':[0] .strip時間()
        「出版社:出版社[0] .strip()、
        'スコア':スコア[0] .string、
    }
        
デフwrite_to_file(コンテンツ):
    オープン( 'doubanMusicTop250.txt'、 ''、エンコード= 'UTF-8')、Fとして有します。
        f.write(json.dumps(コンテンツ、偽= ensure_ascii)+ '\ n' は)
        文字列のJSONにオブジェクトを#dumps

デフwrite_to_json(コンテンツ):
    オープン( 'doubanMusicTop250.json'、 ''、エンコード= 'UTF-8')、Fとして有します。
        f.write(json.dumps(コンテンツ、偽= ensure_ascii)+ '\ n' は)
        
デフwrite_to_csv(コンテンツ):
    オープン( 'doubanMusicTop250.csv'、 ''、エンコード= 'UTF-8')、Fとして有します。
        フィールド名= [ 'パブリッシャー'、 'スタイル'、 '歌'、 'スコア'、 '演技'、 '時間']
        ライター= csv.DictWriter(F、フィールド名=フィールド名)
        writer.writeheader()
        writer.writerows(コンテンツ)

__name__ == '__main__' の場合:
    URL = 'https://music.douban.com/top250?start= {}'
    れるURL = [範囲内のページのurl.format(ページ)(0,256,25)]
    コンテンツ= []
    URL内のURLについて:
        テキスト1 = get_one_page(URL)
        detailurl = get_detailurl(テキスト1)
        私detailurl中のため:
            テキスト2 = get_one_page(I)
            parse_one_page(テキスト2)の項目について:          
                印刷(アイテム)
                write_to_file(アイテム)            
                content.append(アイテム)
        time.sleep(1)
    write_to_csv(コンテンツ)
    write_to_json(コンテンツ)

 

おすすめ

転載: www.cnblogs.com/oeong/p/11699326.html