programing

웹 스크랩 - Angular.js를 통해 JavaScript에 렌더링된 콘텐츠에 액세스하는 방법

javamemo 2023. 3. 11. 08:32
반응형

웹 스크랩 - Angular.js를 통해 JavaScript에 렌더링된 콘텐츠에 액세스하는 방법

공공 사이트 asx.com에서 데이터를 긁어모으려고 합니다.au

http://www.asx.com.au/asx/research/company.do#!/ACB/details 페이지에는div필요한 정보가 있는 클래스 'view-content'를 사용합니다.

여기에 이미지 설명 입력

하지만 Python의 Python을 통해 이 페이지를 보려고 하면urllib2.urlopendiv가 비어 있습니다.

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>

그 div의 내용에 프로그래밍 방식으로 접근할 수 있습니까?

편집: 코멘트에 의하면, 컨텐츠는 다음의 방법으로 렌더링 되는 것 같습니다.Angular.jsPython을 통해 그 콘텐츠를 렌더링할 수 있습니까?

이 페이지의 용도JavaScript서버에서 데이터를 읽고 페이지를 채웁니다.

개발 도구를 사용하시는군요.Chrome- 탭 참조NetworkXHR또는JS요청한다.

다음 URL을 찾았습니다.

http://data.asx.com.au/data/1/company/ACB?fields=primary_share,latest_annual_reports,last_dividend,primary_share.indices&callback=angular.callbacks._0

이 URL은 거의 JSON 형식으로 모든 데이터를 제공합니다.

하지만 이 링크를 사용하여&callback=angular.callbacks._0순수 JSON 형식의 데이터를 얻으면jsonpython 사전으로 변환합니다.


편집: 작업 코드

import urllib2
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'])

출력:

Mineral exploration in Botswana, China and Australia.

편집(2020.12.23)

이 답변은 거의 5년이 되었고 Python2용으로 작성되었습니다.이제 Python3에서는,urllib.request.urlopen()또는requests.get()하지만 진짜 문제는 이 페이지가 5년 동안 구조와 기술을 바꿨다는 것입니다.(질문 응답에 있는) URL은 더 이상 존재하지 않습니다.이 페이지에는 새로운 분석과 새로운 방법이 필요합니다.

문제가 된 것은 url이었다.

http://www.asx.com.au/asx/research/company.do#!/ACB/details

그러나 현재 페이지는 url을 사용합니다.

https://www2.asx.com.au/markets/company/acb

그리고 다른 URL을 사용합니다.AJAX,XHR

https://asx.api.markitdigital.com/asx-research/1.0/companies/acb/about
https://asx.api.markitdigital.com/asx-research/1.0/companies/acb/announcements
https://asx.api.markitdigital.com/asx-research/1.0/companies/acb/key-statistics
기타.

다음 URL을 사용하여 더 많은 URL을 찾을 수 있습니다.DevToolsChrome/Firefox(탭:Network, 필터:XHR)

import urllib.request
import json

# new url      
url = 'https://asx.api.markitdigital.com/asx-research/1.0/companies/acb/about'

# read all data
page = urllib.request.urlopen(url).read()

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

print(data['data']['description'])

출력:

Minerals exploration & development

언급URL : https://stackoverflow.com/questions/35050746/web-scraping-how-to-access-content-rendered-in-javascript-via-angular-js

반응형