2013-12-22 3 views
2

이것은 웹 스크래핑에 대한 나의 첫 번째 시도입니다. 레이몬드 제임스 (Raymond James)의 웹 사이트에서 전화 번호를 다듬기 위해 아름다운 스프를 사용하려고합니다. 예를 들어 http://www.raymondjames.com/office_locator_display.asp?addressline=90210파이썬과 아름다운 스프를 사용하여 프레임에서 정보를 긁는 방법

내가 BeautifulSoup를 사용할 때마다 HTML에서 적절한 정보를 찾을 수 없습니다.

import urllib2 
from bs4 import BeautifulSoup 

url='http://www.raymondjames.com/office_locator_display.asp?addressline=90210' 

opener = urllib2.build_opener() 
opener.addheaders = [('User-agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3)  AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36')] 
page_to_scrape=opener.open(url).read() 
soup=BeautifulSoup(page_to_scrape.decode('utf-8','ignore')) 

생성 된 출력에 필요한 정보가 없습니다. 내가 제공 한 URL이 위치 프레임을 가리 키지 않는 것 같습니다.

나는 웹 데이터로 많은 작업을하는 데 Python을 사용하지 않으므로 연락처 정보를 얻기 위해 Beautiful Soup을 '프레임'으로 보내는 방법을 모르고 있습니다.

+0

브라우저가 페이지를로드 한 후 추가 자바 스크립트 코드가 주소 목록을로드한다고 생각합니다. 브라우저 개발자 도구를 사용하여 페이지를 분석해야합니다. 주소를 포함 할 수있는 추가 네트워크 요청을 찾고 해당 주소 * 에뮬레이트하십시오. –

답변

1

Martijn이 말한 것처럼 네트워크 요청을 조사하면 원본 데이터가 있습니다. 이 경우 iframe에서 GET 요청에 대한 xml 응답입니다. 해당 URL로 무장 한이 솔루션은 매우 간단합니다.

import urllib2 
from bs4 import BeautifulSoup 
soup = BeautifulSoup(urllib2.urlopen('http://hosted.where2getit.com/raymondjames/ajax?&xml_request=%3Crequest%3E%3Cappkey%3E7BD67064-FC36-11E0-B80D-3AEEDDB2B31E%3C%2Fappkey%3E%3Cformdata+id%3D%22locatorsearch%22%3E%3Cdataview%3Estore_default%3C%2Fdataview%3E%3Climit%3E30%3C%2Flimit%3E%3Cgeolocs%3E%3Cgeoloc%3E%3Caddressline%3E90210%3C%2Faddressline%3E%3Clongitude%3E%3C%2Flongitude%3E%3Clatitude%3E%3C%2Flatitude%3E%3Ccountry%3E%3C%2Fcountry%3E%3C%2Fgeoloc%3E%3C%2Fgeolocs%3E%3Csearchradius%3E25%7C50%7C100%3C%2Fsearchradius%3E%3C%2Fformdata%3E%3C%2Frequest%3E'), 'lxml') 
# parse the points of interest into a list 
pois = soup.find_all('poi') 
# now have your way with them! 
+0

Mattexx, 도와 주셔서 감사합니다. 부분적으로 논리를 이해하고 Chrome의 개발자 도구를 사용하여 URL을 찾을 수있었습니다. url을 발견하는 과정을 자동화하기 위해 Python을 사용할 수있는 방법이 있습니까? 나는 프로세스가 get 요청에 대한 xml 응답을 얻은 다음 url을 통해 관련 정보가있는 정보를 찾은 다음 정보를 실제로 긁어 모으는 과정에서 뭔가가 될 것이라고 생각합니다. – RobTheBank

+0

파이썬을 사용하여 URL을 밝힐 수있는 방법을 모르겠습니다. Javascript로로드 되었기 때문에이 도구는 Selenium이나 PhantomJS와 같은 헤드리스 브라우저가 될 것입니다. – mattexx

+0

조금만 업데이트하면됩니다. PhantomJS를 사용하여 네트워크 요청과 응답을 캡처하여 JSON 형식으로 표시함으로써 상당한 진전을 이루었습니다. 관련 링크는 항상 ID : 60입니다. 이제 BeautifulSoup과 결합하여 관심있는 우편 번호를 반복하는 간단한 스크립트를 작성하는 것입니다. 도움을 주셔서 감사합니다. – RobTheBank

관련 문제