2016-07-30 2 views
0

저는 최근에 bs4를 사용하여 웹 스크래핑의 아주 멋진 방법을 발견했습니다. bs4는 정말 멋진 조직 구조를 가지고 있습니다. 우리는 이것이 우리의 HTML 코드입니다 가정 해 봅시다 : 내가 <div class="a"> 가정하고아름다운 스프를 사용하면서 "DIV"태그에서 내용을 추출하는 루프를 적용하는 방법은 무엇입니까?

<div class="a"> 
 
    <div class="b"> 
 
    <a href="www.yelloaes.com">'hi'</a> 
 
    </div> 
 
    <div class ="c"> 
 
    <p><a href="www.bb.com">'hi again'</a></p> 
 
    <div class="d"> 
 
     <p>'well this final'</p> 
 
    </div> 
 
    </div> 
 
</div> 
 

 

 
<div class="a"> 
 
    <div class="b"> 
 
    <a href="www.yelloaes1.com">'hi1'</a> 
 
    </div> 
 
    <div class ="c"> 
 
    <p><a href="www.bb1.com">'hi again1'</a></p> 
 
    <div class="d"> 
 
     <p>'well this final1'</p> 
 
    </div> 
 
    </div> 
 
</div>
지금

우리의 부모 태그이며, 우리는이 태그에서 정보를 빨아 것, 지금 내가이를 통해 루프 의미 모든 페이지에서 정보를 추출합니다.

는하지만 난 힘든 시간 전이 <div class= "a">

내 코드의 첫 번째 반복에서 정보를 추출하는 파이썬 코드와 테스트 실행을했다 BeautifulSoup로 이해를 가지고 있었기 때문에 것은 이렇게 있습니다 :

soup = BeautifulSoup(r.text) 
find_hi =  soup.find('div',{'class':'a'}).div.text 
find_hi-again =soup.find('div',{'class':'a'}).find_all('div')[1].p.text 
find_final =soup.find('div',{'class':'a'}).find('div',{'class':'d'}).text 

print(find_hi , find_hi-again , find_final) 

#output comes as (it worked !!!) 
hi , hi again , this is final 

참고 : 정말 이걸 고수하고 싶습니다. 그래서 완전히 새로운 방법으로 폐기하십시오. 지금은 은 모든 페이지에서 반복 할 수 없습니다.. 내가 루핑이 시도했지만 내가보고 원하는 결과가 표시되지 않습니다

soup = BeautifulSoup(r.text) 
#To have a list of all div tags having this class 
scrapping = soup.find_all('div',{'class':'a'}) 
for i in scrapping: 
    find_hi =  i.div.text 
    find_hi-again =i.find_all('div')[1].p.text 
    find_final =i.find('div',{'class':'d'}).text 

print(find_hi , find_hi-again , find_final) 

루핑에서 도와주세요를?

+0

표시되는 결과는 무엇입니까? – sushant

+0

결과를 표시하고 있지만 다른 요소를 표시하지는 않지만 동일한 태그에서 반복되는 요소를 표시하고 있습니다. *** 안녕하세요, 안녕하세요.이 마지막, 안녕하세요, 안녕하세요. 안녕하세요, 안녕하세요. 안녕하세요. 안녕하세요. 안녕하세요. 안녕하세요. 안녕하세요. 안녕하세요. 안녕하세요. 마지막 1 ** –

+0

가능한 경우 URL을 공유하고 출력으로 기대하는 바를 따르면 현재 코드가 의미가 없습니다. –

답변

0

구문 오류가있는 경우를 제외하고는 코드가 올바르게 작동합니다. find_hi-again은 유효한 변수 이름이 아닙니다.

divs = soup.find_all('div',{'class':'a'}) 
for i in divs: 
    find_hi = i.div.text.strip() 
    find_hi_again = i.find_all('div')[1].p.text.strip() 
    find_final = i.find('div',{'class':'d'}).text.strip() 

    print(find_hi , find_hi_again , find_final) 

## (u"'hi'", u"'hi again'", u"'well this final'") 
## (u"'hi1'", u"'hi again1'", u"'well this final1'") 
+0

큰 실 페이지를 시도해보고 나에게 효과가 없으므로 작동하는지 알려주십시오. 그리고 yaa 나는 그 이름을 만들었다. 나는 그것이 오류를 던진다는 것을 안다. –

+0

내가 실제로하고있는 것에 대한 제 코드를 공유하는 방법은 무엇입니까? –

+0

답변을 주셔서 감사합니다 그것은 작동합니다 일부 사이트에서 작동하지 않는 것 같아요 내가 expedia 및 makemytrip 시도하고 작동하지 않지만 작동 한 다른 사이트에 –

관련 문제