2014-11-19 2 views
2

조각 식별자가 포함 된 요청 모듈을 사용하여 GET 요청을 보내려고합니다. 합니다 (#의 p20_quanitity_description 전송하지 않는 것) 파이썬에서 조각 식별자로 GET 요청 보내기

url = 'http://steamcommunity.com/market/search?appid=730#p20_quantity_desc' 
page = requests.get(url, headers=headers) 

그러나 나는 항상 기본 페이지 ( http://steamcommunity.com/market/search?appid=730) 대신 조각 식별자가있는 페이지를 그만 둘 : 나는 다음과 같은 코드가 있습니다.

urllib2가 또한 코드 나를 위해 작동하지 않습니다 :

req = urllib2.Request(url, headers={ 'User-Agent': 'Mozilla/5.0' }) 
page = urllib2.urlopen(req).read().decode('UTF-8', 'ignore') 

어떻게 URL에 #의 p20_quanitity_description를 GET 요청을 보내는 등 가겠어요?

답변

2

앵커 (p20_quantity_desc)는 서버에 아무런 의미가 없습니다. 페이지에이 앵커를 기반으로 결과의 정렬 순서를 변경하는 약간의 Javascript가 있지만 이는 클라이언트 측입니다. 요청/urllib는 앵커 유무와 상관없이 동일한 페이지 응답을 보게됩니다.

페이지에서 자바 스크립트를 사용하지 않도록 설정하면 내 뜻을 알 수 있습니다.

대신 페이지에서 사용중인 API 끝점에 요청을 보내고 싶습니다.

http://steamcommunity.com/market/search/render/?query=&start=0&count=10&search_descriptions=0&sort_column=quantity&sort_dir=asc&appid=730 

참고 sort_column 인수 예를 들면 다음과 같습니다입니까? 결과의 순서를 결정하기 위해 변경할 수있는 값입니다. lxml과 같은 라이브러리를 사용하여 results_html 필드를 파싱하고 presto하면 완료됩니다.

+1

이 답변은 정확합니다. 프래그먼트 식별자는 실제로 사용자 에이전트에 의해 서버로 보내지지 않아야합니다. [Architecture of the World Wide Web | 3.2.1. 표현 유형 및 프래그먼트 식별자 의미] (http://www.w3.org/TR/webarch/#media-type-fragid) 또는 [RFC3986 §3.5] (http://tools.ietf.org/html/rfc3986# 섹션 3.5 참조). –

+0

이 설명은 완벽하게 작동합니다. 페이지가 사용하고있는 API를 정확히 어떻게 찾을 수 있습니까? (다른 사이트를 사용해보고 싶었을 경우)? Steam 웹 사이트가 작동하는 방식이나 주어진 웹 사이트가로드되는 방식을 알 수있는 방법에 대해 알고 계셨습니까? –

+0

@ acfman17 Firefox 용 [Firebug 확장 기능] (http://getfirebug.com/) 또는 [Chrome 개발자 도구] (https://developer.chrome.com/devtools)는 친구입니다. 두 가지 모두 "네트워크"탭이있어 브라우저가 요청한 모든 요청 (및 매개 변수)을 표시 할 수 있습니다. –