많은 웹사이트에서 javascript를 사용합니다. 웹페이지 콘텐츠는 js에 의해 동적으로 생성되며 일부 js 이벤트는 페이지 콘텐츠 변경 및 링크 열기를 트리거합니다. 심지어 일부 웹사이트는 js 없이는 전혀 작동하지 않고 대신 유사한 메시지를 반환합니다.
Javascript를 지원하는 네 가지 솔루션이 있습니다.
1. 인터페이스를 사용하여 브라우저를 호출하는 코드를 작성합니다. 테스트에 널리 사용되는 Selenium과 유사합니다.
3. 인터페이스가 없는 브라우저, 다양한 웹킷 기반 브라우저, casperjs, phantomjs 등을 사용합니다.
4. 가벼운 브라우저를 직접 구현하세요.
관련 코드를 작성하고 있습니다. js 로직을 사용하려면 먼저 브라우저의 js를 닫아 필요한 것을 얻을 수 있는지 확인하세요. 일부 페이지는 js 없이도 호환성을 제공합니다. 작동하지 않으면 chrome 콘솔이나 firebug를 열어 js 로직을 관찰하세요. -송수신과 같습니다. urllib2(권장 요청 라이브러리)를 사용하여 시뮬레이션하거나 dom 등을 수정하고 lxml을 사용하여 그에 맞게 수정하면 됩니다.
이 솔루션의 또 다른 문제는 서버에 있다는 것입니다. 데스크톱 환경이 없으면 셀레늄은 시각적으로 실행할 수 없습니다.
1, casperjs, phantomjs: non py, 명령줄을 통해 호출할 수 있으며 기본적으로 이 두 가지를 충족하는지 확인하는 것이 좋습니다. 먼저 Phantomjs에는 비공식 웹 드라이버 프로토콜 구현이 있으므로 phantomjs는 인터페이스를 달성하지 못하도록 조정할 수 있습니다.
2. Ghost, spynner 등: 개인적으로 py 맞춤형 웹킷입니다. spynner 코드는 지저분하고 고스트 코드는 품질이 좋습니다. 그러나 버그가 있습니다.
이 솔루션에 대한 자세한 내용은 아래를 참조하세요. 옵션을 사용하면 js를 지원하는 경량의 인터페이스 없는 브라우저를 구현할 수 있습니다. 크롤링해야 할 콘텐츠가 많지 않다면 효율성이 매우 중요합니다. pyv8을 살펴볼 수 있습니다. v8을 기반으로 한 간단한 브라우저 모델이 있습니다. 예, 이는 단지 모델일 뿐이며 직접 수행해야 합니다. 내부에 몇 가지 메소드를 입력해야 합니다. 이를 위해서는 js 엔진(v8) 및 http 라이브러리(urllib2) 위에 이러한 기능을 구현해야 합니다. 1. 웹 페이지가 열릴 때 포함된 js 코드를 가져옵니다. 2. 다양한 이벤트를 포함하는 브라우저 모델을 구축합니다. 3. js를 실행합니다.
Yitao에서 사용하는 쇼핑 가격 비교 크롤러에 대한 관련 ppt도 있습니다. 세 번째 해결 방법은 이 ppt를 참조하세요. 크롤러는 아마도 webkit과 scrapy를 사용하고 배포를 위해 scrapy 스케줄링 대기열을 redis 기반으로 변경합니다.
구현 방법:
이 외에도 프레임워크의 다른 부분은 모두 비동기식으로 간단히 말하면 크롤러에서 생성된 요청이 처리됩니다. 다운로드를 위해 스케줄러에 전달되고 크롤러는 계속해서 실행됩니다. 스케줄러가 다운로드를 완료한 후 응답은 분석을 위해 크롤러에 전달됩니다.
인터넷에서 찾은 참조 예에는 DownloaderMiddleware에 작성된 Node.js 지원은 scrapy 공식 웹사이트의 코드 조각에도 적용됩니다. 이러한 방식으로 구현되면 전체 프레임워크에서 크롤러의 작업 모드가 다운로드 구문 분석이 됩니다. -download-parse, 병렬 다운로드 대신 높은 효율성이 필요하지 않은 소규모 크롤링에서는 큰 문제가 되지 않습니다.
더 나은 접근 방식은 scrapy의 다운로더에 js 지원을 작성하는 것입니다. (selenium+phantomjs 사용) 그러나 get 요청만 지원합니다.
scrapy의 다운로더에 웹킷을 적용할 때 처리가 필요합니다.