4

次のページをクロールしました。

http://www.nasa.gov/topics/earth/features/plains-tornadoes-20120417.html

しかし、呼び出し時にセグメンテーション エラー (コア ダンプ) が発生しました: BeautifulSoup(page_html)。ここで、page_html はリクエスト ライブラリのコンテンツです。これは BeautifulSoup のバグですか? これを回避する方法はありますか?try...except のようなアプローチでも、コードを実行するのに役立ちます。前もって感謝します。

コードは次のとおりです。

import requests
from bs4 import BeautifulSoup

toy_url = 'http://www.nasa.gov/topics/earth/features/plains-tornadoes-20120417.html'
res = requests.get(toy_url,headers={"USER-Agent":"Firefox/12.0"})
page = res.content
soup = BeautifulSoup(page)
4

2 に答える 2

1

間違いなくバグです。この方法でセグメンテーション違反を行うことはできません。再現できます(4.0.1):

>>> import bs4, urllib2
>>> url = "http://www.nasa.gov/topics/earth/features/plains-tornadoes-20120417.html"
>>> page = urllib2.urlopen(url).read()
>>> soup = bs4.BeautifulSoup(page)
Segmentation fault

二等分した後、DOCTYPE が原因のようです。

>>> page[:page.find(">")+1]
'<!DOCTYPE "xmlns:xsl=\'http://www.w3.org/1999/XSL/Transform\'">'

そして、大雑把なハックにより、bs4 がそれを解析できるようになります。

>>> soup = bs4.BeautifulSoup(page[page.find(">")+1:])
>>> soup.find_all("a")[:3]
[<a href="/home/How_to_enable_Javascript.html" target="_blank">› Learn How</a>, <a href="#maincontent">Follow this link to skip to the main content</a>, <a class="nasa_logo" href="/home/index.html"><span class="hide">NASA - National Aeronautics and Space Administration</span></a>]

もっと詳しい人なら、実際に何が起こっているのかわかるかもしれませんが、とにかく、それはあなたが始めるのに役立つかもしれません.

于 2012-11-10T16:00:20.483 に答える