2017-10-24 2 views
0
<a href="link" target="_blank" class="xXx text-user topic-author" sl-processed="1"> 
      diamonds 
     </a> 

나는 BeautifulSoup로 'a'태그에있는 의사 '다이아몬드'를 추출하고 싶습니다.Python & BeautifulSoup : 다른 태그에있는 태그의 값을 추출하는 방법은 무엇입니까?

많은 것을 시도했지만 항상 '나'를 돌려줍니다. 것은 느릅 나무는 일에했는데 나를 위해

도움이

txt = soup.find('a', {'class': 'xXx text-user topic-author'}) 
print (txt) 

감사했다.

+0

당신이 시도한 것을 공유하십시오. – eLRuLL

+0

@eLRuLL Sry, 편집했습니다! – Diamonds

+0

당신은 다이아몬드라는 단어에 속박입니까? – jlaur

답변

2

작성자의 클래스가 페이지 외부에서 동일하지 않은 것처럼 보이므로 필터링을 일부 수행해야합니다.

저자 요소에는 여러 개의 CSS 클래스가 있지만 몇 가지 유사점을 공유합니다.

아래 코드는 작성자를 인쇄합니다. 저자가 될 요소를 먼저 잡아냅니다. 문제는이 CSS 클래스 (JvCare)가 많은 것들에 사용된다는 것입니다. 요소 수는 페이지에 대해 98을 반환하지만 25 개의 작성자 이름 만 있으므로 나중에 약간의 필터링이 필요합니다.

import requests 
from bs4 import BeautifulSoup 

url = "http://www.jeuxvideo.com/forums/0-7059-0-1-0-1-0-another-war.htm" 
r = requests.get(url) 
soup = BeautifulSoup(r.text, "html.parser") 
JvCs = soup.find_all('span', attrs={'class': 'JvCare'}) 
for j in JvCs: 
    if 'topic-author' in j['class']: 
     print(j.text.strip()) 

J의 [ '클래스'는 상기 JvCs리스트에서 98 개의 각 요소에 대한 다른 CSS-클래스들의 목록을 반환한다. 저자 이름이있는 곳은 'topic-author'라는 css-class가 있습니다.

그래서 98 개의 각 요소에 대해 'topic-author'가 j [ 'class']에 의해 반환 된 목록에 있는지 확인합니다. 그렇다면 작성자 이름을 인쇄하십시오.

희망이 있으면 도움이 될 것입니다.

편집 : 관련된 두 개 이상의 CSS 선택기가있는 상황 (BeautifulSoup로의 정말 멋진 docs에 언급 된)이 일을 더 똑똑한 방법이 보인다 . 이러한 경우에는 .select-method를 사용하는 것이 좋습니다. 귀하의 경우 그렇게 될 것입니다 :

author_list = soup.select('span.JvCare.topic-author') 
for author in author_list: 
    print(author.text.strip()) 
+0

감사합니다. 완벽하게 작동합니다. 저자를 목록에 넣었습니다. 나는 우리가 그렇게 부를 수 있다면 귀하의 게시물이 다른 CSS "선택자"를 위해 나를 도울 것이라고 확신합니다. 고마워. – Diamonds

관련 문제