参考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(コンテンツ)