최근에 웹 크롤러를 부 프로젝트로 작성했습니다. 구조화 된 방식은 System.Net.WebClient
의 DownloadString
함수를 사용하여 지정된 주소 HTML을 다운로드 한 다음 모든 문자열 처리를 수행합니다. html에 포함 된 링크를 찾은 다음 찾은 모든 링크에서 프로세스를 반복합니다 (이미 크롤링 된 항목은 건너 뜁니다).WebClient.DownloadString이 횡설수설하고 있습니다.
그것은 대부분의 주소에 대해 잘 작동하지만 씨앗으로 www.yahoo.com
그것을 시작할 때 매우 이상한 일을한다. 대신 다시 DownloadString
에서 HTML 태그를 얻는 것이 횡설수설의 무리를 다시지고 호출합니다.
은 기본적으로 당신이 무엇을보고 돌려 줄 것이라고 당신이 웹 페이지에 view page source
하지만 브라우저에서 www.yahoo.com
에 그렇게 할 때이 HTML을 볼 수 있기 때문에이 경우 수 없습니다 예상 DownloadString
기능의 나의 이해가 될 때 때 .
매우 짧은 시일 내에 생각해 보면 내 초기 생각은 문자열이 디코딩에 사용 된 것과 다른 인코더로 인코딩 된 것처럼 보였지만 사용하려고하는 인코딩을 수동으로 설정하는 방법이 표시되지 않습니다. System.Net.WebClient
클래스를 통해 문자열을 다운로드하십시오.
이것은 내가받은 텍스트의 일부입니다 :
‹Ä½y“£FÖ7úÿó)4í™ûQ«Ä.è;^´ïû~ûvH€Ö ÷›€ÈL©ªì‰{» gÉ“'OîÉ¿ÿQî•Æ‹~%cûÿùwøŸŒ¥þþEÜ¥|ÉØ’cüþEsr“Ñ—ŒbK¾KËlδâÚûãg윻2}×Ïy€S°õ3úü/w 2žB†©š.íí ³±+·7s®“9XÚQórže˜AƼŒªùëÀÝfÊ×ÿÊë€" µdÙ¾¤k_2~p¶µß¿È
www.yahoo.com
에서 HTML을 당길 때 뭔가 잘못을하고있는 중이 야한다면 내 첫 질문은 누구나 알고 있나요입니까? 그리고 그렇다면, html을 가져와야하는 또 다른 방법이 있습니까? 다음 질문은 디자인에 의한 것이라면 어떻게 이것을 달성할까요? 그리고 왜 그들은 그것을 뒤섞을 것입니까? 경쟁 업체가 웹 사이트를 크롤링하지 못하게하려고합니까?
"테스트"조차도 모든 사용자 에이전트가 작동하기 때문에 헤더 값이 있어야합니다. – Esko
그 트릭을 했어. 나는 그것을 확인하기 위해 결코 생각하지 않았을 것이다, 고마워! –
문제 없음 - 도움이 되니 기쁩니다. –