2016-12-02 20 views
1

私はPythonを使用してウェブサイトからデータをスクラップしようとしています。私はブラウザでソースコードを見ると、私が探しているすべてのものを見ることができます。しかし、BeautifulSoupでコードをダウンロードすると、私は必要なデータの一部しか取得できません。Python Webscraping

私はBeautifulSoupがjavascriptで動作しないことを知っています(私はjavascriptをまったく知りません)。そして、生のソースコードをすべてダウンロードする方法があるかどうかは疑問でした。サイトはjavascriptで行われます。私はそれを徹底的に実際のソースコードなしで私の質問に答えるのは難しい知っ

r = requests.get('https://www.example.com/example/example') 
data = BeautifulSoup(r.content) 
example1 = data.find_all("class_="example2") 
examples = [] 
for example in example1: 
    examples.append(link.get('href')) 

これは、これまでの私のコードです。残念ながら私はコードを表示することはできません!それはあまりにも大きな問題ではないことを願っています。

+0

あなたは空のリストとしての例を宣言するときに、何のあなたは、Pythonを使用することができます任意のループ – Backtrack

+0

を使用することはできませんSelenium – Wonka

+2

を行います例では例えばscrapy – Tanu

答えて

1

おそらく最良の解決策ではないかもしれませんが、ここではリンクを解析するだけの場合は2セントです。

あなたのようなクラスを検索することができます。もちろん、
import requests 
from BeautifulSoup import BeautifulSoup 
r = requests.get('http://www.examples.com') 
data = BeautifulSoup(r.content) 
examples = [] 
for d in data.findAll('a'): 
    examples.append(d) 

my_as = soup.findAll("a", { "class" : "someclass" }) 
0

あなたのコードが間違っているとは意味がありません:

r = requests.get('https://www.example.com/example/example') 
data = BeautifulSoup(r.content) 
aes = data.find_all("class_="example2") 
result = [] 
for a in aes: 
    result.append(a.attrs['href']) 
+0

申し訳ありませんが、私はその例を混同しました。私の実際のコード作業はあなたのものと似ています。 – titusAdam

+1

'aes = data.find_all(" class _ = "example2") 'は' class_'の後に '' 'がありません –

1

は、そのようなコピーを取得する最も簡単な方法がある理由です、ブラウザなしでダイナミック(JavaScriptのベース)のウェブサイトの完全なコピーを取得するのは難しいですブラウザで。

PhantomJSSeleniumを調べて、ブラウザを制御してHTMLをダウンロードするか、subprocessでPhantomJSを実行するだけです。ウェブサイトのコンテンツをダウンロード

非常に単純なPhantomJSスクリプト:

"use strict"; 
var fs = require('fs'); 
var system = require('system'); 
var webpage = require('webpage'); 
if (system.args.length != 2) { 
    console.log('Usage: gethtml.js <url>'); 
    phantom.exit(1); 
} else { 
    var url = system.args[1]; 
    var page = webpage.create(); 
    page.open(url, function(status) { 
     if (status !== 'success') { 
      phantom.exit(2); 
     } 
     setTimeout(function() { 
      console.log(page.content); 
      phantom.exit(); 
     }, 500); 
    }); 
} 

これはこれで十分か、あまりにも多くはなく、サイトやインターネット接続に依存し、「ダウンロード」の前に500msのを待って、あなたはそれを向上させることができますPhantomJSがonResourceReceivedコールバックを使用してX秒間データのダウンロードを停止するまで待ってください。

関連する問題