我已經做到了這一點:BeautifulSoup - 而不是預期的輸出
>>> from bs4 import BeautifulSoup; import urllib2
>>> data = urllib2.urlopen('http://api.stackexchange.com/docs/').read()
>>> soup = BeautifulSoup(data.replace('""','"')) # there are errors on page
>>> soup.prettify()
<!DOCTYPE HTML>
<html lang="en">
............... # cut short
</html>
data
似乎是正常的和預期。問題出在soup
。
soup.prettify()
不輸出包含數據中所有內容的字符串。好像soup
不是解析(或不管它)整個字符串。
如果您檢查網頁的來源和soup.prettify()
的輸出,您會發現它們不匹配。
這裏發生了什麼?爲什麼?
我有一種感覺,我不是很清楚在這篇文章中,如果是這樣,請評論。我會盡力詳細說明。否則隨意刪除這句話...
更新
在答覆FakeRainBrigand評論,我想說,即使在使用瀏覽器保存的HTML,問題仍然存在。 ..所以,即使這有同樣的問題:
data = open('Stack Exchange API.htm').read()
看來,SO發出了一個不同的頁面,不同的用戶代理。這不是BS的錯;問題出現在你使用urllib2下載頁面的第2行。請參閱此解釋[更改用戶代理](http://stackoverflow.com/q/802134/1074592)(在這種情況下由於缺少robots.txt文件而允許)。 – FakeRainBrigand 2013-03-16 12:08:41
那麼即使在保存頁面的HTML,並使用它,問題仍然存在...更新.. – pradyunsg 2013-03-16 12:14:25