2016-08-31 4 views
0

저는 scrapy와 python을 처음 사용합니다. 나는 데이터를 긁어내는 데 scrapy를 사용하고 있습니다. 스크래치를 사용하여 10 개 이상의 레코드를 스크랩 할 수 없습니다.

페이지 매기기에 AJAX를 사용하는 사이트

그래서 내가 나에게

감사를 도와주세요 내 코드

from scrapy import Spider 
from scrapy.selector import Selector 
from scrapy import Request 
from justdial.items import JustdialItem 
import csv 
from itertools import izip 
import scrapy 
import re 

class JustdialSpider(Spider): 
    name = "JustdialSpider" 
    allowed_domains = ["justdial.com"] 
    start_urls = [ 
     "http://www.justdial.com/Mumbai/Dentists/ct-385543", 
    ] 

    def start_requests(self): 
     headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0'} 
     for url in self.start_urls: 
      yield Request(url, headers=headers) 

    def parse(self, response): 
     questions = Selector(response).xpath('//div[@class="col-sm-5 col-xs-8 store-details sp-detail paddingR0"]') 
     for question in questions: 
      item = JustdialItem() 
      item['name'] = question.xpath(
       '//div[@class="col-sm-5 col-xs-8 store-details sp-detail paddingR0"]/h4/span/a/text()').extract() 
      item['contact'] = question.xpath(
       '//div[@class="col-sm-5 col-xs-8 store-details sp-detail paddingR0"]/p[@class="contact-info"]/span/a/b/text()').extract() 
      with open('some.csv', 'wb') as f: 
       writer = csv.writer(f) 
       writer.writerows(izip(item['name'], item['contact'])) 
       f.close() 
     return item 

    # if running code above this I'm able to get 10 records of the page 

    # This code not working for getting data more than 10 records, Pagination using AJAX 
    url = 'http://www.justdial.com/functions/ajxsearch.php?national_search=0&act=pagination&city=Mumbai&search=Chemical+Dealers&where=&catid=944&psearch=&prid=&page=2&SID=&mntypgrp=0&toknbkt=&bookDate=' 
    next_page = int(re.findall('page=(\d+)', url)[0]) + 1 
    next_url = re.sub('page=\d+', 'page={}'.format(next_page), url) 
    print next_url 

    def parse_ajaxurl(self, response): 
     # e.g. http://www.justdial.com/Mumbai/Dentists/ct-385543 
     my_headers = {'Referer': response.url} 
     yield Request("ajax_request_url", 
         headers=my_headers, 
         callback=self.parse_ajax) 

을 게시하도록하겠습니다 데이터를 10 개 이상 기록을 얻을 수 아니에요.

답변

1

실제로 페이지를 볼 때 자바 스크립트를 사용하지 않으면 사이트에서 AJAX 중 하나 인 "결코 끝나지 않는"대신 전통적인 페이지 매김을 제공한다는 것을 알 수 있습니다.

당신은 단순히 다음 페이지의 URL을 찾아 계속이 사용 : 나는 또한 당신의 XPath의를 고정

def parse(self, response): 
    questions = response.xpath('//div[contains(@class,"store-details")]') 
    for question in questions: 
     item = dict() 
     item['name'] = question.xpath("h4/span/a/text()").extract_first() 
     item['contact'] = question.xpath("p[@class='contact-info']//b/text()").extract_first() 
     yield item 
    # next page 
    next_page = response.xpath("//a[@rel='next']/@href").extract_first() 
    if next_page: 
     yield Request(next_page) 

하지만 overal 변경 유일한 비트 # next page 코멘트 미만 3 줄입니다. scrapy crawl myspider --output results.csv

+0

고마워 날 도와 : 난 당신이 내장 사용할 수 있습니다 scrapy 수출 명령처럼 거미에 CSV로 저장하는 나타났습니다 보조 노트로 . 지금 일하고있다. – JT28

관련 문제