2016-01-28 10 views
6

Ben kamu sitede asx.com.auWeb kazıma - Angular.js aracılığıyla JavaScript'te oluşturulan içeriğe nasıl erişilir?</p> <p><a href="https://i.stack.imgur.com/Siny9.png" rel="noreferrer"><img src="https://i.stack.imgur.com/Siny9.png" alt="enter image description here"></a></p> <p>Ama:

sayfa http://www.asx.com.au/asx/research/company.do#!/ACB/details ihtiyacım bilgiler bir div sınıfla 'görünümü-içerik', içerdiği veri kazımak için çalışıyorum

import urllib2 
from bs4 import BeautifulSoup 

url = 'http://www.asx.com.au/asx/research/company.do#!/ACB/details' 
page = urllib2.urlopen(url).read() 
soup = BeautifulSoup(page, "html.parser") 
contentDiv = soup.find("div", {"class": "view-content"}) 
print(contentDiv) 

# the results is an empty div: 
# <div class="view-content" ui-view=""></div> 

erişmek mümkün mü: Ben div boş olduğunu Python en urllib2.urlopen yoluyla bu sayfayı görüntülemek için deneyin Bu div içeriği programlı olarak mı?

Düzenleme: yorumun göründüğü şekilde içeriğin Angular.js aracılığıyla oluşturulduğu görünür. Python ile bu içeriğin oluşturulmasını tetiklemek mümkün mü?

+0

'ng scope' - bu adı kullanımı çerçevesinde' AngularJS' (ya da benzer bir çerçeve) tarafından bu yüzden bu sayfa JavaScript tarafından oluşturulmuştur. – furas

+0

@furas, belki de bu bir http://stackoverflow.com/questions/30673447/fetch-text-from-web-with-angular-js-tags-such-as-ng-view'inin bir kopyasıdır ve buna ihtiyacım var Selenium veya benzeri kullanmak için? –

+1

selenuma ihtiyacınız yok, cevabımda zaten bir url var ve 'urrlib' ve json' kullanarak elde edebilirsiniz :) Kod örneği üzerinde çalışıyorum. – furas

cevap

13

Bu sayfa sunucudan ve dolgu sayfasından veri okumak için JavaScript'i kullanmaktadır.

Chrome'da geliştirici araçları kullandığınızı görüyorum - "XHR" veya "JS" isteklerinde "Ağ" sekmesine bakın.

bu url Bu URL'ye, neredeyse &callback=angular.callbacks._0 olmadan bu linki kullanınız eğer

Ama sonra saf JSON biçiminde veri almak JSON biçiminde tüm verileri verir http://data.asx.com.au/data/1/company/ACB?fields=primary_share,latest_annual_reports,last_dividend,primary_share.indices&callback=angular.callbacks._0

bulundu ve yapacaksın olabilir python sözlüğüne dönüştürmek için json modülünü kullanın.


DÜZENLEME: kod çalışma

import urllib2 
from bs4 import BeautifulSoup 
import json 

# new url  
url = 'http://data.asx.com.au/data/1/company/ACB?fields=primary_share,latest_annual_reports,last_dividend,primary_share.indices' 

# read all data 
page = urllib2.urlopen(url).read() 

# convert json text to python dictionary 
data = json.loads(page) 

print(data['principal_activities']) 

Çıkış:

görmek
Mineral exploration in Botswana, China and Australia. 
+0

Hızlı ve ayrıntılı yanıt için çok teşekkürler! Bu harika. Yeni url'de –

+0

“ACB” yerine başka bir firma adı kullanmanız gerekiyor ve bu firma için veri alıyorsunuz – furas

İlgili konular

 İlgili konular