2016-11-09 13 views
0

以下のHTMLページからCSVファイルを抽出する必要があります。以下は、以前の割り当てからHTMLコードの特定の行を抽出するコードです。 URLは 'https://vincentarelbundock.github.io/Rdatasets/datasets.html' です。テストコードなので、その行が見つかると一時的に破棄されます。 私のcsvの行の一部はhrefですcsv/datasets/co2.csv(ユニコードはタイプと思います)複数のCSVファイルリンクを含むWebページHTMLから特定のCSVを抽出する方法

どのようにco2.csvを開きますか? ご質問に関する書式設定の問題についてお詫び申し上げます。コードはエディタによってスライスされ、ダイスされています。

import urllib 
url = 'https://vincentarelbundock.github.io/Rdatasets/datasets.html' 
from BeautifulSoup import * 

def scrapper(url,k): 
    c=0 
    html = urllib.urlopen(url).read() 
    soup = BeautifulSoup(html) 
#. Retrieve all of the anchor tags 
    tags = soup('a') 
    for tag in tags: 
     y= (tag.get('href', None)) 
     #print ((y)) 
     if y == 'csv/datasets/co2.csv': 
      print y 
      break 
     c= c+ 1 

     if c is k: 
      return y 
      print(type(y)) 

for w in range(29): 
    print(scrapper(url,w)) 
+0

あなたの質問を改善してください:あなたが唯一の*シングル* '' co2.csv''ファイルを処理したい場合は、それは明らかではない、またはあなたがしたい場合は* htmlページにリンクされているすべての* csvファイルを処理します。 –

+0

私は1つのファイルだけが必要です。 Co2.csv – Cliff

+0

そして、私はそのファイルを取って、データ解析を行いたい(線形回帰)。 – Cliff

答えて

0

あなただけの次のcsvファイルを取得し、それはあなたがしたいですかどうかを確認するために、再度ダウンロードして、ループの30回の反復のすべてのための完全なHTMLページを再解析しています。つまり、は非常にであり、サーバーにとってあまり礼儀正しくはありません。 HTMLページを一度読んだだけで、あなたが望むタグがあるかどうかチェックしなければならないタグ​​の上にループを使用してください!そうであれば、それを使って何かを行い、特定のファイルが1つだけ必要だと言ったので、不要な処理を避けるためにループを止めてください。

あなたの質問に関連する他の問題は、htmlファイルではcsvのhrefが相対URLであることです。だからあなたは彼らが入っているドキュメントのベースURLにそれらに加わる必要があります。urlparse.urljoin()はそれだけです。

質問に直接関係はありませんが、コードをクリーンアップしてください。

  • は、より良い変数名を選択し、あなたのインデント(9行にコメント)
  • を修正。 y/c/k/wは無意味です。以下のようなものでは結果の

import urllib 
import urlparse 

url = 'https://vincentarelbundock.github.io/Rdatasets/datasets.html' 
from BeautifulSoup import * 


def scraper(url): 
    html = urllib.urlopen(url).read() 
    soup = BeautifulSoup(html) 
    # Retrieve all of the anchor tags 
    tags = soup('a') 
    for tag in tags: 
     href = (tag.get('href', None)) 
     if href.endswith("/co2.csv"): 
      csv_url = urlparse.urljoin(url, href) 
      # ... do something with the csv file.... 
      contents = urllib.urlopen(csv_url).read() 
      print "csv file size=", len(contents) 
      break # we only needed this one file, so we end the loop. 

scraper(url) 
+0

はい私のコードは、この質問とは関係のない別のプロジェクトで使用された最初の粗い試みです。私は相対URLも調べます。 – Cliff

+0

今後、「質問とは関係がない」というコードを投稿しないでください。なぜそれを読むべきですか?代わりに*関連コードを投稿してください –

+0

ありがとうございます。私はあなたが私の質問を理解してうれしいです。 – Cliff

関連する問題