작성자의 클래스가 페이지 외부에서 동일하지 않은 것처럼 보이므로 필터링을 일부 수행해야합니다.
저자 요소에는 여러 개의 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())
당신이 시도한 것을 공유하십시오. – eLRuLL
@eLRuLL Sry, 편집했습니다! – Diamonds
당신은 다이아몬드라는 단어에 속박입니까? – jlaur