문제

학교 도서관에 구독이있는 리소스 목록에서 리소스/데이터베이스 이름 및 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>

그리고 여기 내 파이썬 코드가 있습니다.

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을 처음 접했지만 그것을 모두 이해하는 것 같습니다.

도와 주셔서 감사합니다!

도움이 되었습니까?

해결책 2

나는 Firefox의 "View Selection Source"를 사용하고 있었는데, 이는 분명히 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를 얻을 수 있습니다.

다른 팁

내장 된 파서 대신 html5lib로 아름다운 수프를 시도 할 수 있습니다.

BeautifulSoup(markup, "html5lib")

html5lib는 더 관대하며, 내장 된 파서가 자르는 페이지를 구문 분석하는 경우가 많습니다. 문서를 참조하십시오 http://www.crummy.com/software/beautifulsoup/bs4/doc/#searching-the-tree

아름다운 수프 대신 html5lib + lxml을 사용하는 것이 좋습니다. 실제 HTML 파서 (Firefox in Firefox와 매우 유사)를 사용하고 LXML은 결과 트리 (CSS-Selectors 또는 XPath)를 쿼리하는 매우 유연한 방법을 제공합니다.

BeautifulSoup에는 수많은 버그 나 이상한 행동이있어 믿을 수없는 많은 HTML 마크 업을위한 최상의 솔루션이 아닙니다.

내가 올바르게 기억한다면 BeautifulSoup은 트리에서 "이름"을 태그의 이름으로 사용합니다. 이 경우 "A"는 앵커 태그의 "이름"입니다.

그래도 깨지는 것처럼 보이지는 않습니다. 어떤 버전의 Python 및 BS를 사용하고 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top