As you might have guessed, this site uses javascript to load more elements when scrolling through a page.
Using the developer tools included in my browser (Ctrl-Maj i for chromium), I saw on the "Network" tab that the javascript script included in the page performs the following requests to load more elements:
GET http:
The web server responds with documents of the following type:
<li id="PH969SH70HPTINDFAS" class="itm hasOverlay unit size1of4 "> <div id="qa-quick-view-btn" class="quickviewZoom itm-quickview ui-buttonQuickview l-absolute pos-t" title="Quick View" data-url ="phosphorus-Black-Moccasins-233629.html" data-sku="PH969SH70HPTINDFAS" onClick="_gaq.push(['_trackEvent', 'BadgeQV','Shown','OFFER INSIDE']);">Quick view</div> <div class="itm-qlInsert tooltip-qlist highlightStar" onclick="javascript:Rocket.QuickList.insert('PH969SH70HPTINDFAS', 'catalog'); return false;" > <div class="starHrMsg"> <span class="starHrMsgArrow"> </span> Save for later </div> </div> <a id='cat_105_PH969SH70HPTINDFAS' class="itm-link sobrTxt" href="/phosphorus-Black-Moccasins-233629.html" onclick="fireGaq('_trackEvent', 'Catalog to PDP', 'men--Shoes--Moccasins', 'PH969SH70HPTINDFAS--1699.00--', this),fireGaq('_trackEvent', 'BadgePDP','Shown','OFFER INSIDE', this);"> <span class="lazyImage"> <span style="width:176px;height:255px;" class="itm-imageWrapper itm-imageWrapper-PH969SH70HPTINDFAS" id="http://static4.jassets.com/p/Phosphorus-Black-Moccasins-6668-926332-1-catalog.jpg" itm-img-width="176" itm-img-height="255" itm-img-sprites="4"> <noscript><img src="http://static4.jassets.com/p/Phosphorus-Black-Moccasins-6668-926332-1-catalog.jpg" width="176" height="255" class="itm-img"></noscript> </span> </span> <span class="itm-budgeFlag offInside"><span class="flagBrdLeft"></span>OFFER INSIDE</span> <span class="itm-Catbrand strong">Phosphorus</span> <span class="itm-title"> Black Moccasins </span>
These documents contain more elements.
So, in order to get a complete list of elements, you will have to return Request objects in your Spider's parse method (see the Spider Class documentation ) to indicate that it should load more data:
def parse(self, response):
Oh, and by the way (in case you want to test), you can't just download http://www.website-your-are-crawling.com/men/shoes/?page=2 in your browser to find out what it will return because the website will redirect you to a global page (i.e. http://www.website-your-are-crawling.com/men/shoes/ ) if the X-Requested-With header is different XMLHttpRequest .
source share