2017-11-24 16 views
1

最近、私はPythonとBeautiful SoupでWebスクレイピングを学んできました。以下のページをこすりしようとしたときしかし、私は、バンプのビットをヒットしました:Web 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

ページからスクラップするデータが不明です。しかし、チェックされると、ページが読み込まれると開始されるjavascriptを介して動的 "タグ"が読み込まれます。あなたのスクレーパーがDOMコントローラーだけをロードし、ブラウザーにロードせずにバックグラウンドでWebページを解析すると、ページ内の動的データがロードされない可能性が非常に高くなります。

可能な解決策の1つは、セレンを使用してページを完全にロードし、次にそれを擦ることです。

0

BSことなく、可能な実装:実装の

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

関連する問題