2016-12-05 5 views
0

죄송합니다. 바리 같은 질문 인 경우 죄송합니다.스크립트로 div를 삽입 한 웹 스크래핑

Firefox에서 Beautifulsoup 및 urllib2를 사용하여 URL을보고 특정 클래스의 모든 div를 추출하려고합니다. 그러나 크롬 개발자 도구에서 요소를 검사 할 때 div가 표시 될 수 있지만 결과는 항상 비어 있습니다.

페이지 소스를 살펴본 결과, 해당 div가 스크립트에 삽입되었다는 것을 알았습니다. 그래서 내 질문은 Beautifulsoup를 사용하여 해당 div (클래스 이름 사용)를 찾는 방법은 무엇입니까? 나는 결국 그 div 아래에서 href를 읽고 따라 가고 싶습니다.

감사합니다.

[편집] 나는 현재 H & M 웹 사이트에서 찾고 : http://www.hm.com/sg/products/ladies 내가 '제품 목록 항목'클래스의 모든 div의를 얻을 관심

+0

이 사용하는 경우가 확인 당신이 긁어하려고 URL을 게시 할 수 자바 스크립트를 – Wonka

답변

0

를 실행하는 셀레늄을 사용해보십시오 자바 스크립트

from selenium import webdriver 

driver = webdriver.Firefox() 
driver.get("http://www.python.org") 
html = driver.page_source 
0

확인 당신이 변화 모든 정보를 URL을 얻을 수 있습니다 enter link description here

이 링크이 링크에서 찾을 수 있습니다 크롬 dev 도구> 네트워크

0

당신이 그 특정 URL에서 아무것도 얻지 못한 이유는 당신이 필요로하는 정보가 거기에 없기 때문입니다.

우선 페이지가 브라우저에로드되는 방법에 대해 조금 설명해 보겠습니다. 해당 페이지 (http://www.hm.com/sg/products/ladies)를 요청하면 리터럴 콘텐츠가 매우 처음 단계에서 반환됩니다 귀하의 urllib2 요청), 다음 브라우저가 읽기/구문 분석을 시작, 기본적으로 그것이 어디 전체 페이지 (예 : CSS는 레이아웃을 제어하는 ​​추가 정보 javascript/URL/페이지 특정 영역을 채우기 위해 필요한 모든 정보를 찾을 수있는 브라우저를 알려줍니다 등등.) 그리고 브라우저는 그 장면을 모두 뒤에합니다. 크롬에서 "요소 검사"를 수행하면 페이지가 이미 완전히로드되고 원하는 정보가 원래 URL에 없으므로 대신 해당 URL을 채우고 해당 URL을 따르는 데 사용되는 URL을 찾아야합니다.

이제 장면 뒤에서 어떤 일이 일어나는지 알아야하며 페이지가로드 될 때 모든 트래픽을 캡처하는 도구가 필요합니다 (fiddler 권장). 당신이 볼 수 있듯이 브라우저에서 해당 페이지를 열 때

traffic captured by fiddler

는 상황이 많이! 일 (그것은 전체 페이지 로딩 과정의 일부입니다) 추측에 의한 그래서, 그 정보는 당신이해야 필요 그 세 가지 "api.hm.com"요청 중 하나에 있어야하며, 가장 중요한 부분은 JSON 형식으로 작성된 것입니다. 즉, BeautifulSoup에 신경 쓰지 않고 내장 된 json 모듈이 작업을 수행 할 수 있습니다.

이제 무엇을 할 수 있습니까? 이러한 요청을 시뮬레이트하고 원하는 것을 얻으려면 urllib2을 사용하십시오.

P. requests은 이러한 종류의 직업을위한 훌륭한 도구입니다. here을 얻을 수 있습니다.

0

이 하나의 시도 :

from bs4 import BeautifulSoup 
import urllib2 
page = urllib2.urlopen("http://www.hm.com/sg/products/ladies") 

soup = BeautifulSoup(page.read(),'lxml') 

scrapdiv = open('scrapdiv.txt','w') 

product_lists = soup.findAll("div",{"class":"o-product-list"}) 
print product_lists 
for product_list in product_lists: 
    print product_list 
    scrapdiv.write(str(product_list)) 
    scrapdiv.write("\n\n") 
scrapdiv.close()