Skip to content

Instantly share code, notes, and snippets.



Last active Aug 29, 2015
What would you like to do?
자바스크립트로 동작하는 버튼이 있을 때 다음 페이지로 가는 방식을 구현한 scrapy spider, 네이버 지식쇼핑 다음페이지 숫자 링크 클릭할 때 동작하는 스크립트
from scrapy.spider import BaseSpider
from scrapy.http import Request, FormRequest
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.spiders import Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
class MySpider(BaseSpider):
name = "commu"
allowed_domains = [""]
start_urls = ["",
extractor = SgmlLinkExtractor(allow=('\d+'), restrict_xpaths=('*'))
def parse(self, response):
links = self.extractor.extract_links(response)
if links:
for link in links:
yield Request(url=link.url, callback=self.parse_items)
hxs = HtmlXPathSelector(response)
next_links ='//td[@align="right"]/a[contains(., "Next")]')
if next_links:
freq = FormRequest.from_response(response, formname="frm",
formdata={'move_indicator': 'next'})
if freq:
yield freq
def parse_items(self, response):
print "parse_items"
// 네이버 지식쇼핑 페이지에서 개발자도구로 따온 스크립트
this.goPage = function(e){
if (e<1) {
} else {
#-*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request, FormRequest
from wise_shop.items import WiseShopItem, Column
class WiseSpider(scrapy.Spider):
name = "wise"
allowed_domains = [""]
start_urls = [
url1 = ""
url2 = "&pagingSize=80&productSet=total&viewType=list&sort=rel&searchBy=none&cat_id=50000151&frm=NVSHCAT"
page_index = 1
def parse(self, response):
for sel in response.xpath('//ul[@class="goods_list"]/li/div[@class="info"]/span[@class="detail"]/a'):
column = Column()
column['title'] = sel.xpath('@title').extract()[0].encode('utf-8')
column['value'] = sel.xpath('@_value').extract()[0].encode('utf-8')
yield column
# 첫 번째 시도: 실패
# next_page = response.xpath('//div[@class="co_paginate"]/strong/following-sibling::*').extract()[0].encode('utf-8')
# WiseSpider.e = response.xpath('//div[@class="co_paginate"]/strong/following-sibling::*/text()').extract()[0]
# next_page를 받아올 때 계속 2만 리턴되더라구요. 이유를 못찾았습니다.
# 두 번째 시도: 실패
# if next_page:
# WiseSpider.e += 1
# yield FormRequest.from_response(response, formname="frm", formdata={'e': str(WiseSpider.e)})
# 또 FormRequest에서 저 코드 동작 방식이 start_urls의 맨 마지막에 &e=2 이런식으로 붙더라구요.
# 페이지 URL은 계속 바뀌어서 scrapy 스파이더는 동작했지만, 같은 페이지만 계속 긁어왔습니다. 실패.
WiseSpider.page_index += 1
url = WiseSpider.url1 + str(WiseSpider.page_index) + WiseSpider.url2
yield Request(url, self.parse)
# 어떻게 URL을 알아내서 page_index를 수정해서 Request 날리는 것으로 해결했습니다.
# 아직 위 코드에서 언제 중단할지를 정하는 코드는 넣지 않았습니다. 끊임없이 돌아갑니다. (수정 중)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment