我遇到的问题是我想从此页面抓取相关链接:http://support.apple.com/kb/TS1538
如果我在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 :(得分: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 of Chrome开发工具更详细地检查页面。
答案 1 :(得分:0)
我遇到了类似的问题,BeautifulSoup可能无法捕获动态创建的html内容。一个非常基本的解决方案是让它在捕获内容之前等待几秒钟,或者使用具有等待元素然后继续的功能的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