2013-04-07 74 views
0
我有

我的問題是,我想抓住從這個頁面的相關鏈接:http://support.apple.com/kb/TS1538BeautifulSoup不斂動態內容

如果我在Chrome或Safari檢查元素我可以看到<div id="outer_related_articles">和列出的所有文章。如果我試圖用BeautifulSoup抓住它,它會抓取頁面和一切,除了的相關文章。

這是我到目前爲止有:

import urllib2 
from bs4 import BeautifulSoup 
url = "http://support.apple.com/kb/TS1538" 
response = urllib2.urlopen(url) 
soup = BeautifulSoup(response.read()) 
print soup 
+0

BeautifulSoup只是一個解析器。我認爲你的問題更可能與'urlopen'。你有沒有檢查過,在你試圖解析它之前,是否已經包含了適當的元素? – 2013-04-07 19:37:12

回答

2

本節使用Javascript加載。禁用瀏覽器的Javascript,看看BeautifulSoup「看到」頁面。

從這裏,你有兩個選擇:


一些挖後它似乎它的請求,該地址(http://km.support.apple.com/kb/index?page=kmdata&requestid=2&query=iOS%3A%20Device%20not%20recognized%20in%20iTunes%20for%20Windows&locale=en_US&src=support_site.related_articles.TS1538&excludeids=TS1538&callback=KmLoader.receiveSuccess),並使用與JSONP被KmLoader.receiveSuccess接收功能的名稱來加載結果。使用Firebug的Chrome開發工具更詳細地檢查頁面。

0

我遇到了類似的問題,動態創建的html內容可能無法被BeautifulSoup捕獲。一個非常基本的解決方案是在捕獲內容之前等待幾秒鐘,或者使用Selenium,它具有等待某個元素的功能,然後繼續。所以對於前者,這工作對我來說:

import time 

# .... your initial bs4 code here 

time.sleep(5) #5 seconds, it worked with 1 second too 
html_source = browser.page_source 

# .... do whatever you want to do with bs4