Web使用Python抓取特定页面

时间:2017-11-24 14:58:55

标签: python json xml web-scraping beautifulsoup

最近,我一直在学习使用Python和Beautiful Soup进行网页抓取。然而,当我试图刮掉下一页时,我碰到了一点点:

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

我想从页面获取的数据是该书的标签,但我无法通过花费大量时间浏览互联网来获取数据。

我尝试在线跟踪一些指南,但似乎都没有。我尝试将页面转换为XML和JSON,但我仍然无法找到数据。

此刻相当难倒,我很感激任何帮助。

感谢。

3 个答案:

答案 0 :(得分:2)

在分析HTML和脚本之后,标签通过AJAX加载并请求AJAX网址使我们的生活变得轻松。这是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 :(得分:0)

我不确定您要从该页面中删除哪些数据。但是当检查时,页面通过javascript加载动态“标签”,这是在页面加载后启动的。如果您的scraper只加载DOM控制器并在后台解析网页而不在浏览器中加载,则很可能无法加载页面中的任何动态数据。

一种可能的解决方案是使用硒完全加载页面然后刮去。

答案 2 :(得分: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