2017-11-24 4 views
1

최근에 나는 Python과 Beautiful Soup로 웹 스크래핑을 배웠습니다. 그러나 다음 페이지 긁어하려고 할 때 나는 범프 약간의 충돌했습니다웹 Python 특정 페이지 스크래핑

http://www.librarything.com/work/3203347

내가 페이지에서 원하는 데이터는 책의 태그입니다하지만 난 얻을 수있는 방법을 찾을 수 없습니다 인터넷을 트롤링하는 데 많은 시간을 소비 함에도 불구하고 데이터.

온라인 가이드 몇 개를 시도했지만 어느 누구도 작동하지 않는 것으로 나타났습니다. 페이지를 XML 및 JSON으로 변환하려고했지만 여전히 데이터를 찾을 수 없습니다.

지금 당황스럽고 도움이되었습니다.

감사합니다.

+1

페이지의 특정 요소를 스크랩하는 것을 의미합니까? IE, Tags 헤더 아래의 데이터? –

답변

2

되는 HTML 및 스크립트를 분석 한 후, 태그는 AJAX와 요청을 통해로드 AJAX URL은 우리의 삶을 편하게 해줍니다. 다음은 python 스크립트입니다.

import requests 
from bs4 import BeautifulSoup 

content = requests.get("http://www.librarything.com/ajax_work_makeworkCloud.php?work=3203347&check=2801929225").text 
soup = BeautifulSoup(content) 

for tag in soup.find_all('a'): 
    print(tag) 
+1

오 마이 갓. 문자 그대로 인터넷을 통해 수 시간의 검색을 한 후에, 나는 작동하는 것을 발견합니다. 정말 고맙습니다!! – Univold

0

페이지에서 긁어 내고 싶은 데이터가 확실하지 않습니다. 그러나 페이지가로드되면 자바 스크립트를 통해 동적 "태그"가로드됩니다. 스크래퍼가 DOM 컨트롤러 만로드하고 브라우저에서로드하지 않고 백그라운드에서 웹 페이지를 구문 분석하면 페이지의 동적 데이터가로드되지 않을 가능성이 높습니다.

가능한 해결책 중 하나는 셀레늄을 사용하여 페이지를 완전히로드 한 다음 스크랩하는 것입니다. BS없이

0

가능한 구현 : 구현을위한

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.common.exceptions import TimeoutException 

my_url = 'http://www.librarything.com/work/3203347' 
driver = webdriver.Chrome() 
driver.get(my_url) 

delay = 5 # seconds 

try: 
    WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'span.tag'))) 
    print("Page is ready!") 
    for element in driver.find_elements_by_css_selector('span.tag'): 
     print(element.text) 
except TimeoutException: 
    print("Couldn't load page") 
finally: 
    driver.quit() 

소스는 :

Waiting until an element identified by its css is present

Locating elements with selenium