2014-05-24 4 views
1

몇 가지 간단한 질문 (1-3 함께 가서 4-6 함께 간다).Beautifulsoup 추출

<meta property="tall"/> 
<meta property="wide" content="spiral"/> 
<meta name="red"/> 
<meta name="tall"/> 
  1. 어떻게 property의 모든 인스턴스를 찾을 수 있습니다 다음과 같이 나는 구조와 HTML이 있다고 가정?
  2. 어떻게 "tall""wide"을 추출 할 수 있습니까?
  3. 그러면 property을 어떻게 추출 할 수 있습니까?
  4. "tall"의 모든 인스턴스를 어떻게 찾을 수 있습니까?
  5. 방법은 다음 name 추출하여 property
  6. 방법은 다음 "tall"을 추출 할 수 있습니다? 그 후, 나는 결과 목록의 각 요소에 액세스해야하고 내가 propertyname 같은 것들을 얻을 수

    soup1.find_all("meta") 
    

    을하지만 : 나는 쉽게 할 수있는 일

    메타의 모든 인스턴스를 추출한다. 하지만이 단계를 건너 뛰고 가능한 경우 propertyname의 모든 인스턴스를 직접 가져옵니다.

  7. 마지막으로 requests.get을 사용하여 웹 사이트의 URL을 가져 오려면 페이지 하단에있는 버튼을 클릭하여 더 많은 정보를로드해야하는 웹 사이트이고 이 일을 만들 수 있습니까?

+1

http://www.crummy.com/software/BeautifulSoup/bs4/doc/이 스레드 당 아마 너무 많은 질문입니다 ... – MattDMo

+2

아마 시작하기에 좋은 장소입니다 . – alecxe

답변

1

저는 BeautifulSoup 사용에 익숙하지 않지만 시도해 보았습니다. 여기에 제가 생각해 낸 것이 있습니다. 저에게 좀 더 우아한 해결책이 있음을 알고 계십시오.

상용구 :

from bs4 import BeautifulSoup 
import re 

a = """<meta property="tall"/> 
<meta property="wide" content="spiral"/> 
<meta name="red"/> 
<meta name="tall"/>""" 

soup = BeautifulSoup(a) 

질문 :

I.

p = soup.findAll('meta', attrs = {"property":re.compile('.*')}) 
>> [<meta property="tall"/>, <meta content="spiral" property="wide"/>] 

II.

ex = [p[i]['property'] for i in range(len(p))] 
>> ['tall', 'wide'] 

iii. 무슨 뜻인지 모르겠다. 아마 이미 다뤄졌을지도 모른다.

IV.

alltall = soup.findAll('meta', attrs = {'name':'tall'}) 
alltall += (soup.findAll('meta', attrs = {'property':'tall'})) 
>> [<meta name="tall"/>, <meta property="tall"/>] 

V./VI. 나는 약간의 시간을 보냈지 만, 이런 식으로 우아한 방법을 찾지 못했습니다. 어쩌면 나는 뭔가를 바라보고있다.

4

Beautiful soup 데이터를 추출하여 주위를 연주하는 모든하지만 여기 시작하는 무언가이다 : 여기 test.html

당신이 게시 된 콘텐츠입니다. try, catch block이있는 이유는 찾기 작업이 실패하면 오류를 인쇄하는 대신 아무 것도 인쇄하지 않기 때문입니다.

from bs4 import BeautifulSoup 

soup = BeautifulSoup (open(r'd:\test.html','r')) 
#print soup.prettify() 

items = soup.findAll("meta") 

try: 
    print "#How can I find all of the instances of property?" 
    for all_prop in items: 
     if all_prop['property']: 
      print all_prop 
except: 
    print "" 

try: 
    print "#How can I then extract tall and wide?" 
    for properties in items: 
     print(properties['property']) 
except: 
    print "" 


try: 
    print "#all of the instances of tall" 
    print soup.findAll('meta', attrs = {'property':'tall'}) 
    print soup.findAll('meta', attrs = {'name':'tall'}) 
    print "" 
except: 
    print "" 

try: 
    print "#How can I then extract tall?" 
    for just_tall in items: 
     if just_tall.get('property') == 'tall': 
      print just_tall.get('property') 
     if just_tall.get('name') == 'tall': 
      print just_tall.get('name') 
except: 
    print "" 

출력 :

#How can I find all of the instances of property? 
<meta property="tall"/> 
<meta content="spiral" property="wide"/> 

#How can I then extract tall and wide? 
tall 
wide 

#all of the instances of tall 
[<meta property="tall"/>] 
[<meta name="tall"/>] 

#How can I then extract tall? 
tall 
tall 

나머지 모두가 장난하지만 위 시작하는 데 도움이 될 것입니다. 몇 가지 질문이 여전히 모호하므로 위의 예를 통해 도움을 드리겠습니다.

자습서 및 더 많은 예제 : Link to docs