2013-11-27 3 views
3

VIN 번호를 webpage에서 추출 할 수 있습니까?프로그래밍 방식으로 페이지를 파이썬으로 엽니 다.

나는 urllib2.build_opener을 요청했는데 기계화했다. 나는 user-agent도 제공했지만, 누구도 VIN을 볼 수 없었다.

opener = urllib2.build_opener() 
opener.addheaders = [('User-agent',('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) ' 'AppleWebKit/535.1 (KHTML, like Gecko) ' 'Chrome/13.0.782.13 Safari/535.1'))] 
page = opener.open(link) 
soup = BeautifulSoup(page) 

table = soup.find('dd', attrs = {'class': 'tip_vehicleStats'}) 
vin = table.contents[0] 
print vin 
+0

당신은 무엇을 얻습니까? 전체 페이지? – aIKid

+0

빈 스팬 클래스가 생겼지 만 실제로 VIN 번호가 있어야합니다. 브라우저에서 요소를 검사 할 때 볼 수 있습니다. –

+0

@TeodorScorpan 자바 스크립트를 사용하여 동적으로 생성됩니다. –

답변

5

브라우저 자동화 도구를 사용할 수 있습니다.

예를 들어이 간단한 셀렌 스크립트가 작업을 수행 할 수 있습니다.

from selenium import webdriver 
from bs4 import BeautifulSoup 

link = "https://www.iaai.com/Vehicles/VehicleDetails.aspx?auctionID=14712591&itemID=15775059&RowNumber=0" 
browser = webdriver.Firefox() 
browser.get(link) 
page = browser.page_source 

soup = BeautifulSoup(page) 

table = soup.find('dd', attrs = {'class': 'tip_vehicleStats'}) 
vin = table.contents.span.contents[0] 
print vin 

BTW, table.contents[0]은 span 태그를 포함하여 전체 범위를 인쇄합니다.

table.contents.span.contents[0]는 VIN 번호 만 인쇄합니다.

+0

당신은 내 하루를 보냈습니다! –

7

그 페이지 스크래핑에 대한 직접적인 보호와 같은 대부분 (Ajax 호출 아마 통해) 자바 스크립트로드 및 표시되는 정보의 대부분을 가지고있다. 이것을 긁으려면 자바 스크립트를 실행하는 브라우저를 사용하고 원격으로 제어하거나 자바 스크립트로 스크래퍼 자체를 작성해야합니다. 그렇지 않으면 사이트를 해체하고 정확하게 자바 스크립트로로드하는 방법과 방법을 알아 내야합니다. if 이 전화를 복제 할 수 있습니다.

+0

감사합니다. Lennart Regebro. 구현하기가 힘듭니다. =) –

+0

@TeodorScorpan 글쎄, 확실하게 도대체 Javascript로 스크레이퍼를 구현하고 싶지는 않을 것이다. :-)하지만 자바 스크립트를 디버깅하면 실제 호출이 간단한 Ajax 호출 일 수 있습니다. 그게 최선의 방법이라고 생각합니다. –

+0

'사이트를 해체하고 이러한 전화를 복제하는 방법'을 보여주는 예제 또는 자습서가 있습니까? 잠시 후 내 마음 속에 그 사실이 생겨 실제적인 성공을 보지 못했습니다. –

2

브라우저를 호출하는 셀렌을 사용할 수 있습니다. 이 작품은 나를 위해 :

from selenium import webdriver 
from selenium.common.exceptions import NoSuchElementException 
from selenium.webdriver.common.keys import Keys 
import time 

# See: http://stackoverflow.com/questions/20242794/open-a-page-programatically-in-python 
browser = webdriver.Firefox() # Get local session of firefox 
browser.get("https://www.iaai.com/Vehicles/VehicleDetails.aspx?auctionID=14712591&itemID=15775059&RowNumber=0") # Load page 


time.sleep(0.5) # Let the page load 


# Search for a tag "span" with an attribute "id" which contains "ctl00_ContentPlaceHolder1_VINc_VINLabel" 
e=browser.find_element_by_xpath("//span[contains(@id,'ctl00_ContentPlaceHolder1_VINc_VINLabel')]") 
e.text 
# Works for me : u'4JGBF7BE9BA648275' 

browser.close() 
+0

나는 이것을 shshank와 동시에 게시했다. 기본적으로 셀렌을 사용하는 것과 같은 아이디어입니다. –

+0

찰스 고마워요! –

관련 문제