2

学校の図書館が購読しているリソースのリストから、リソース/データベース名と ID のリストを取得しようとしています。さまざまなリソースをリストしたページがあり、urllib2 を使用してページを取得できますが、そのページを BeautifulSoup に渡すと、リスト内の最初のリソースのエントリが終了する直前でツリーが切り捨てられます。問題は、リソースを検索セットに追加するために使用される画像リンクにあるようです。ここで話が途切れます。HTML は次のとおりです。

<a href="http://www2.lib.myschool.edu:7017/V/ACDYFUAMVRFJRN4PV8CIL7RUPC9QXMQT8SFV2DVDSBA5GBJCTT-45899?func=find-db-add-res&amp;resource=XYZ00618&amp;z122_key=000000000&amp;function-in=www_v_find_db_0" onclick='javascript:addToz122("XYZ00618","000000000","myImageXYZ00618","http://discover.lib.myschool.edu:8331/V/ACDYFUAMVRFJRN4PV8CIL7RUPC9QXMQT8SFV2DVDSBA5GBJCTT-45900");return false;'>
    <img name="myImageXYZ00618" id="myImageXYZ00618" src="http://www2.lib.myschool.edu:7017/INS01/icon_eng/v-add_favorite.png" title="Add to My Sets" alt="Add to My Sets" border="0">
</a>

そして、ここに私のpythonコードがあります:

import urllib2
from BeautifulSoup import BeautifulSoup
page = urllib2.urlopen("http://discover.lib.myschool.edu:8331/V?func=find-db-1-title&mode=titles&scan_start=latp&scan_utf=D&azlist=Y&restricted=all")
print BeautifulSoup(page).prettify

BeautifulSoup のバージョンでは、開始<a href...>は表示されますが、は表示され<img>ず、<a>はすぐに閉じられ、残りの開始タグも</html>.

これらの「セットに追加」画像で見られる唯一の特徴は、名前と id 属性を持つ唯一の画像であるということです。しかし、それによって BeautifulSoup がすぐに解析を停止する理由がわかりません。

注: 私は Python をまったく初めて使用しますが、問題なく理解できているようです。

ご協力ありがとうございました!

4

4 に答える 4

3

組み込みのパーサーではなく、html5lib を使用して美しいスープを試すことができます。

BeautifulSoup(markup, "html5lib")

html5lib はより寛容で、組み込みのパーサーが切り捨てたページを解析することがよくあります。http://www.crummy.com/software/BeautifulSoup/bs4/doc/#searching-the-treeのドキュメントを参照してください。

于 2013-11-03T04:09:12.610 に答える
2

私はFirefoxの「ビュー選択ソース」を使用していました。これは明らかにHTMLをクリーンアップします。元のソースを見たとき、これが私が見たものです

<img name="myImageXYZ00618" id="myImageXYZ00618" src='http://www2.lib.myschool.edu:7017/INS01/icon_eng/v-add_favorite.png' alt='Add to My Sets' title='Add to My Sets' border="0"title="Add to clipboard PAIS International (CSA)" alt="Add to clipboard PAIS International (CSA)">

属性の後にスペースを入れることで、border="0"BSにページを解析させることができます。

于 2009-03-21T06:34:15.967 に答える
2

美しいスープの代わりにhtml5lib+lxmlを使用することを強くお勧めします。これは実際のHTMLパーサー(Firefoxのものと非常に似ています)を使用し、lxmlは結果のツリー(css-selectorsまたはxpath)を照会するための非常に柔軟な方法を提供します。

BeautifulSoupにはたくさんのバグや奇妙な振る舞いがあり、信頼できない多くのHTMLマークアップに最適なソリューションではありません。

于 2009-03-23T19:19:48.760 に答える
0

私の記憶が正しければ、BeautifulSoup はツリー内の「名前」をタグの名前として使用します。この場合、「a」はアンカー タグの「名前」になります。

それはそれを壊すべきではないようです。Python と BS のどのバージョンを使用していますか?

于 2009-03-21T03:59:26.617 に答える