2017-02-23 15 views
0

まだ、プログラミング、そして特にPythonには新しかった。私はKickstarterのページのためのWebscraperに取り組んできました。私はページ上の各プロジェクトからすべての情報を得ていますが、私が行ってきたやり方は比較的混乱しています。私はこのスクレーパーに最初のプロジェクトを行い、データをつかみ、追加して次のページに行くようにしたいと思いますが、代わりに、ページのすべてのターゲットデータを取得し、すべてのデータを最後に正しいプロジェクト。私のBeautifulSoup4ウェブスクレイピングの整理

(好奇心誰のためのリンク:https://www.kickstarter.com/discover/advanced?category_id=16&woe_id=0&sort=newest&seed=2479798&page=1

今、私はそれぞれにちょうど宣伝文やリンクよりそれぞれ1からより多くのデータをつかむが、以下、私がやっていることのいくつかのサンプルコードですされています。 BeautifulSoupは、私が訓練されていない目には、.find_next()型のものを一緒にストリングするのをより困難にする、異なるデータ型に変換すると信じている方法のために多少混乱しています。特にKickstarterは、これらのプロジェクトを1行につき4つのプロジェクトで構成しています。

どのように私はそれを行くことができるかに関するアイデア:最初のプロジェクトを見つける - >スクレイプ - >配列を追加する - >次のプロジェクトで繰り返す?

pageGrab = BeautifulSoup(requests.get(url).content, "html.parser") 

link_array = [] 
blurb_array = [] 

links = pageGrab.select('.project-title a') 
blurb = pageGrab.select('.project-blurb') 

for link in links: 
    rel_path = link.get('href') 
    path = urljoin(base_url, rel_path) 
    link_array.append(path) 

for row in blurb: 
    blurb_array.append(row.string.strip()) 

はここから私は、Excelファイルに書き込むパンダのデータフレームの中にこれらの配列を渡してきました。私はこれが退屈な仕事である限り自分自身を非常に誇りに思っていますが、私の最初の有用なプログラム/スクリプトです!

答えて

2

私はあなたのクラスのプロジェクト」を持っている各プロジェクトの「カード」を選択することをお勧めします:selectメソッドも順番に検索できる「スープ」を、返し

pageGrab.select('.project') 

を。

クラス project-titleとヘッダに含まれるリンク要素を選択
<project soup>.select_one('.project-title > a').contents[0] 

、 内容プロパティが(何らかの理由で、リスト内の)実際のテキストを取得します。たとえば、プロジェクトのタイトルを検索します。これらの方法の詳細については、the docsを参照してください。一例として、

、最初のプロジェクトの名前を取得するには、あなたがそう

pageGrab.select('.project')[0].select_one('.project-title > a').contents[0] 

を行うことができ、すべてのプロジェクトのカード "を反復処理することができ、あなたが欲しいしかし、情報を収集します。

一般的にウェブスクレイピングを学ぶためにこれを行っているのかどうかはわかりませんが、適切なアプリケーションを作成しようとしている場合は、操作がはるかに簡単なJSONデータを使用することをお勧めします。あなただけのページのURLの末尾に.jsonを追加することにより、キックスターターのページから入手することができ :

https://www.kickstarter.com/discover/advanced.json?category_id=16&woe_id=0&sort=newest&seed=2479798&page=1

、彼らが将来的にこれを除去することがあります、と多くはないサイトがこのようにAPIを提供を覚えておいてくださいこのように

関連する問題