1

我遇到的问题是我想从此页面获取相关链接: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
4

2 回答 2

4

此部分使用 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接收函数的名称加载结果。使用 Chrome 开发工具的 Firebug 更详细地检查页面。

于 2013-04-07T19:38:32.767 回答
3

我遇到了类似的问题,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
于 2017-10-31T21:16:11.550 回答