2013-07-11 4 views
0

저는 Python 3을 사용하고 있으며 웹 사이트에서 데이터를 검색하려고합니다. 그러나,이 데이터를 동적으로로드하고, 내가 지금 가지고있는 코드는 작동하지 않습니다 나는 특정 값을 찾기 위해 노력하고있어Python을 사용하여 동적 HTML 컨텐트의 값을 검색하는 방법

url = eveCentralBaseURL + str(mineral) 
print("URL : %s" % url); 

response = request.urlopen(url) 
data = str(response.read(10000)) 

data = data.replace("\\n", "\n") 
print(data) 

, 나는 예 : "{{formatPrice의 중간 값 대신 템플릿을 찾는거야 }} "대신"4.48 "을 사용하십시오.

자리 표시 자 텍스트 대신 값을 검색 할 수 있도록하려면 어떻게해야합니까?

편집 : This은 정보를 추출하려고하는 특정 페이지입니다. 템플릿 {{formatPrice median}}을 사용하는 "중간 값"을 얻으려고합니다.

편집 2 : Selenium과 BeautifulSoup를 사용하도록 프로그램을 설치하고 설정했습니다.

내가 지금 가지고있는 코드는 다음과 같습니다

from bs4 import BeautifulSoup 
from selenium import webdriver 

#... 

driver = webdriver.Firefox() 
driver.get(url) 

html = driver.page_source 
soup = BeautifulSoup(html) 

print "Finding..." 

for tag in soup.find_all('formatPrice median'): 
    print tag.text 

Here 그것을 실행됩니다으로 프로그램의 스크린 샷이다. 불행히도 "formatPrice median"을 지정하지 않은 것 같습니다.

+1

브라우저의 URL을 방문 할 때 템플릿 태그를 가져 옵니까? 편집 : 또한, 어떻게 렌더링 템플릿. 자바 스크립트 템플릿 엔진 (예 : 핸들 바)을 사용하는 경우 응답에 템플릿 태그가 표시됩니다. –

+1

RE 편집 2 - 이것은 새로운 질문에 관한 것입니다 ... 어쨌든 find_all 문자열이 유효하지 않기 때문에 find_all에 대한 설명서를 살펴야한다고 생각합니다. 아래에서 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html#arg-name에 좀 더 가깝게 업데이트 할 것입니다. –

+0

건배! 나는 모든 태그를 얻기 위해 soup.findall (True)를 사용했다. 필요한 정보가 거기에있다! 그 정보를 얻기 위해 검색해야하는 태그를 정확히 찾는 문제 일뿐입니다. – Tagc

답변

6

당신이 (handlebars 같은 인스턴스 뭔가) 자바 스크립트 템플릿을 사용하여 렌더링 된 페이지에서 값을 얻으려고 노력하는 가정은, 다음이 당신은 표준 용액 (즉 beautifulsoup 또는 requests)의로 얻을 것입니다.

브라우저가받은 내용을 변경하고 새 DOM 요소를 만드는 데 자바 스크립트를 사용하기 때문입니다. urllib은 브라우저와 같은 요청 부분을 수행하지만 템플릿 렌더링 부분은 수행하지 않습니다. A good description of the issues can be found here.

  1. 직접
  2. 요청 SpiderMonkey을 처리하기 위해 오프라인 자바 스크립트 인터프리터를 사용하는 아약스 JSON을 구문 분석,
  3. crowbarsplinter

This answer가 제공하는 브라우저 자동화 도구를 사용하여이 문서에서는 세 가지 주요 솔루션에 대해 설명합니다 옵션 3에 대한 몇 가지 제안 (예 : selenium 또는 watir). 셀레늄을 사용하여 자동화 된 웹 테스트를 수행했으며 매우 편리합니다. 그것은 핸들 구동 사이트처럼 귀하의 의견에서


편집

가 보인다. 나는 셀레늄과 아름다운 수프를 권하고 싶다. This answer 유용 할 수 있습니다 좋은 코드 예제를 제공합니다

from bs4 import BeautifulSoup 
from selenium import webdriver 
driver = webdriver.Firefox() 
driver.get('http://eve-central.com/home/quicklook.html?typeid=34') 

html = driver.page_source 
soup = BeautifulSoup(html) 

# check out the docs for the kinds of things you can do with 'find_all' 
# this (untested) snippet should find tags with a specific class ID 
# see: http://www.crummy.com/software/BeautifulSoup/bs4/doc/#searching-by-css-class 
for tag in soup.find_all("a", class_="my_class"): 
    print tag.text 

기본적으로 셀레늄 브라우저에서 렌더링 된 HTML을 가져온 다음 당신은 page_source 속성에서 BeautifulSoup로를 사용하여 구문 분석 할 수 있습니다. 행운을 빌어 요 :)

+0

도움을 주셔서 감사합니다. 웹 언어 또는 웹 기반 프로그래밍에 대한 경험이 거의 없지만 도움이된다면 데이터를 구문 분석하려고하는 사이트를 연결합니다. – Tagc

+0

요청과 아름다움을 살펴볼 것입니다. – Tagc

+1

사이트를 살펴 보았습니다. 컴퓨터가 거의로드되지 못했습니다. :) 예, Chrome에 F12 키를 누르고 '네트워크'탭으로 이동하면 '백본', '밑줄' 와'handlebars'가 모두로드됩니다. 나는 당신이'셀레늄'접근법을 따라야한다고 생각한다. 약간의 샘플 코드로 편집하겠습니다. –

관련 문제