我需要用bs4来分析一个html,需要写很多 提取语句,大概几十条,格式如下
twitter_url = summary_soup.find('a','twitter_url').get('href')
facebook_url = summary_soup.find('a','facebook_url').get('href')
linkedin_url = summary_soup.find('a','linkedin_url').get('href')
name = summary_soup.find('p', class_='name').find('a').string
但是每个语句都有可能出异常,如果每个语句都加上try except 就太繁琐了,有没有什么好的方法处理每条语句,出异常赋值为None,不中断程序
질문 댓글에 작은 질문을 드렸는데, 답변해주시면 모두가 귀하의 요구를 더 쉽게 이해할 수 있을 것입니다.
너무 많이 생각하고 싶지 않고
으아악get
할 때 발생할 수 있는 오류를 피하고 싶다면 처리해야 할 이상한 상황이 너무 많지 않다면 더 은밀한 방법이 있을 수 있습니다. 시도해 보세요:bs의
좀 더 탄탄하게 글을 쓰고 싶다면 @prolifes의 제안을 참고하시면 큰 도움이 될 것입니다.find
이 아무것도 찾지 못하면return None
이 됩니다. 이때or
가 절대 실패하지 않도록 트릭을 완성해보겠습니다. Dictionary의get
과 bs태그의get
의 유사한 기능을 이용하면get
처럼 예외처리 및 변수에 값을 할당할 수 있습니다.None
이면 닭 훔치는 방법이냐고 물으시는데 이렇게 엿보니 닭 훔치는 비법은
결과:find
:假資料
으아악으아악
치킨 훔치기 성공!내가 답변한 질문: Python-QA
이건 예외가 많다는 문제가 아니라 코드 작성의 문제라고 생각합니다. 다음 문장처럼 과감하게 추측해 보겠습니다.
twitter_url = summary_soup.find('a','twitter_url').get('href')
오류가 발생할 수 있는 이유는 다음과 같습니다.
summary_soup.find('a','twitter_url')
이 문장은 요소를 찾지 못한 후None
를 반환했습니다. 그런 다음 이None
를 사용하여get('href')
를 호출하면 오류.이러한 이유라면 처리하기가 더 쉬울 것입니다.
으아악bs4의 체인콜이 너무 좋아서 국물을 포장해왔습니다
으아악@prolifes 참고
오류가 보고될 수 있는 메소드를 사용자 정의하고 메소드 내부에서 시도해 보세요
HTML 작성을 분석할 때 문제가 되는 모든 예외가 발생할 수 있습니다. HTML을 분석할 때는 최대한 포괄적으로 시도한 다음 모든 분석 문을 포함하는 try Except를 수행한 다음 오류를 캡처하여 작성합니다. 캡처된 페이지가 많을수록 오류가 없어야 분석문이 잘 작성되었다는 의미입니다