2011-07-07 8 views
4

나는 Scrapy를 사용하여 폐품 처리 중이 야.URL에있는 치료, 해시 태그

나는 Scrapy가 해시 태그의 URL을 끝까지 제거한다는 것을 알았습니다. 여기

쉘의 출력입니다 : 때문에 일부 항목이 선택되지 않는 이유를 알아 내려고 몇 시간 후

[s] request <GET http://www.domain.com/b?ie=UTF8&node=3006339011&ref_=pe_112320_20310580%5C#/ref=sr_nr_p_8_0?rh=n%3A165796011%2Cn%3A%212334086011%2Cn%3A%212334148011%2Cn%3A3006339011%2Cp_8%3A2229010011&bbn=3006339011&ie=UTF8&qid=1309631658&rnid=598357011> 
[s] response <200 http://www.domain.com/b?ie=UTF8&node=3006339011&ref_=pe_112320_20310580%5C> 

이 정말 내 폐기에 영향을 미치는, 나는 깨달았다 긴에서 제공하는 HTML URL은 짧은 URL과 다릅니다. 게다가, 일부 관측 후에, 일부 핵심 부분에서 내용이 변경됩니다.

Scrapy가 전체 URL을 유지하도록이 동작을 수정하는 방법이 있습니까?

귀하의 의견과 제안에 감사드립니다.

+0

답변 덕분에 URL에서이 해시 태그의 개념을 알 수있었습니다.기본적으로 JAX 요청은 응답을 생성합니다. JSON을 구문 분석해야하는 경우입니다. 아래의 Scrapy 예제는 주제에 대해 명확한 점을 제시합니다. 다음은 참조할만한 문서입니다. http://blog.scrapy.org/scraping-ajax-sites-with-scrapy http://code.google.com/web/ajaxcrawling/docs/ getting-started.html – romeroqj

답변

9

이 자체가 변경할 수 있습니다 scrapy 것이 아닙니다 - URL에 해시 다음 부분은 클라이언트 (여기 scrapy, 일반적으로 브라우저) 대신 서버에서 사용하는 fragment identifier입니다.

브라우저에서 페이지를 가져올 때 발생할 수있는 현상은 조각 식별자를보고 일부 데이터를 AJAX를 통해로드하고 페이지를 업데이트하는 JavaScript가 페이지에 포함되어 있다는 것입니다. Firebug 또는 Chrome 또는 Safari 관리자와 같은 개발자 도구를 사용하면 브라우저에서 수행하는 작업을보고 에뮬레이션 할 수 있는지 여부를 확인할 수 있습니다.

예를 들어 http://twitter.com/also으로 이동하면 http://twitter.com/#!/also으로 리디렉션됩니다. 여기에서 브라우저에 의해로드 된 실제 URL은 단지 http://twitter.com/이지만 그 페이지는 페이지를 생성하는 데 사용되는 데이터 (http://twitter.com/users/show_for_profile.json?screen_name=also)를로드하며,이 경우 JSON 데이터만으로 구문 분석 할 수 있습니다. 이 문제는 Chrome의 네트워크 속성을 사용하여 확인할 수 있습니다.

+0

Selenium을 사용하여 JavaScript 코드를 실행할 수 있지만 조각 식별자는 모든 요청에서 제거됩니다. 문제는 남아 있습니다 : 프래그먼트 식별자가 포함 된 요청을 어떻게 내릴 수 있습니까? 메타 필드에 포함시킬 수는 있지만 중복 URL로 요청을 필터링하므로 Scrapy는 그러한 페이지를 하나만로드합니다. –

0

실제로 웹 브라우저에 URL을 입력하면 해시 태그 앞의 부분 만 웹 서버에 전송됩니다. 내용이 다른 경우 해시 태그 부분의 콘텐츠를 기반으로하는 페이지의 일부 자바 스크립트가 이후에 의 내용을 변경하기 때문에 발생했을 가능성이 큽니다 (대부분 XmlHttpRequest가로드 됨) 추가 콘텐츠).

1

보이지 않는 것처럼 보입니다. 문제는 응답이 아니라 요청에 있으며 URL을 잘라냅니다.

자바 스크립트에서 검색 할 수 있습니다 ( , window.location.hash). 거기에서 은 Ajax 으로 서버에 보내거나 인코딩하여 을 URL에 넣은 다음 서버 측에 을 전달할 수 있습니다.

Can I read the hash portion of the URL on my server-side application (PHP, Ruby, Python, etc.)?

왜 서버가 브라우저를받지 않을 경우 제거되어이 부분을 필요합니까? Amazon과 함께 일하는 경우 - 해당 URL에 아무런 문제가 없습니다.

+0

해시 태그가없는 URL이 할인 된 제품에 대해 일종의 필터를 적용하는 경우가 있으므로 제품이 적게 나열된 경우를 발견했습니다. – romeroqj

+0

그런 다음 해결책이 없거나 추가 요청을 시도하십시오. 요청을하는 알고리즘을 찾아서 만듭니다. – warvariuc

관련 문제