Scrapy

2016-03-23 24 views
4

ile arama sorgusu POST istek üzerine bir web sitesine tarama yapmak için bir Scrapy örümceği kullanmak için bir web sitesi belirli bir sayfada arama sorgusu için bir anahtar kelime göndermek için FormRequest kullanmaya çalışıyorum. Okuduğum şeyle açık gibi görünüyor ama sorun yaşıyorum. Oldukça yeni Python için çok üzgünüm, eğer göründüğüm bir şey varsa üzgünüm.Scrapy

Yardım etmek için kullanmaya çalıştığım ana 3 site: Fare vs Python [1]; Stack Overflow; Scrapy.org [3] ben sürünerek am belirli url kaynak koduna itibaren

: Ben aramanın adıdır düşünüyorum <input name="dnn$ctl01$txtSearch" type="text" maxlength="255" size="20" id="dnn_ctl01_txtSearch" class="NormalTextBox" autocomplete="off" placeholder="Search..." /> "dnn_ct101_txtSearch: Bulduğum belirli sayfanın bir kaynaktan www.lkqpickyourpart.com\locations/LKQ_Self_Service_-_Gainesville-224/recents

"Ben örnekte kullanacağım ben 2 olarak atıfta bulundu ve ben araç arama içinde benim anahtar kelime olarak" toyota "girmek istedim. İşte

Ben şu anda benim örümceğin sahip kodudur ve ben beggining aşırı şeyler ithal ediyorum farkındayım: Neden ararken veya sonuçların her türlü baskı yapmadığı

import scrapy 
from scrapy.http import FormRequest 
from scrapy.item import Item, Field 
from scrapy.http import FormRequest 
from scrapy.spider import BaseSpider 

class LkqSpider(scrapy.Spider): 
name = "lkq" 
allowed_domains = ["lkqpickyourpart.com\locations/LKQ_Self_Service_-_Gainesville-224/recents"] 
start_urls = ['http://www.lkqpickyourpart.com\locations/LKQ_Self_Service_-_Gainesville-224/recents/'] 

def start_requests(self): 
    return [ FormRequest("www.lkqpickyourpart.com\locations/LKQ_Self_Service_-_Gainesville-224/recents", 
       formdata={'dnn$ctl01$txtSearch':'toyota'}, 
       callback=self.parse) ] 

def parsel(self): 
    print self.status 

olduğu örnek olarak, yalnızca arama çubuklarına girmeyen web sitelerine giriş yapmak için kopyalanıyor muyum?

sayesinde Dan acemi Python yazar Burada

cevap

3

sen :)

# -*- coding: utf-8 -*- 
from __future__ import unicode_literals 
import scrapy 
from scrapy.shell import inspect_response 
from scrapy.utils.response import open_in_browser 


class Cars(scrapy.Item): 
    Make = scrapy.Field() 
    Model = scrapy.Field() 
    Year = scrapy.Field() 
    Entered_Yard = scrapy.Field() 
    Section = scrapy.Field() 
    Color = scrapy.Field() 


class LkqSpider(scrapy.Spider): 
    name = "lkq" 
    allowed_domains = ["lkqpickyourpart.com"] 
    start_urls = (
     'http://www.lkqpickyourpart.com/DesktopModules/pyp_vehicleInventory/getVehicleInventory.aspx?store=224&page=0&filter=toyota&sp=&cl=&carbuyYardCode=1224&pageSize=1000&language=en-US', 
    ) 

    def parse(self, response): 
     section_color = response.xpath(
      '//div[@class="pypvi_notes"]/p/text()').extract() 
     info = response.xpath('//td["pypvi_make"]/text()').extract() 
     for element in range(0, len(info), 4): 
      item = Cars() 
      item["Make"] = info[element] 
      item["Model"] = info[element + 1] 
      item["Year"] = info[element + 2] 
      item["Entered_Yard"] = info[element + 3] 
      item["Section"] = section_color.pop(
       0).replace("Section:", "").strip() 
      item["Color"] = section_color.pop(0).replace("Color:", "").strip() 
      yield item 

     # open_in_browser(response) 
     # inspect_response(response, self) 

bir AJAX çağrısıyla oluşturulan kazımak çalıştığınız sayfa gidin.

Varsayılan olarak Scrapy, AJAX dahil olmak üzere dinamik olarak yüklenen herhangi bir Javascript içeriği yüklemez. Sayfayı aşağı kaydırırken verileri dinamik olarak yükleyen hemen hemen tüm siteler AJAX kullanılarak yapılır. ^^ Trapping ^^ AJAX çağrıları, Chrome Dev Tools veya Firefox için Firebug kullanılarak oldukça basittir. Tek yapmanız gereken Chrome Dev Tools veya Firebug'da XHR taleplerini gözlemlemektir. XHR bir AJAX isteğidir.

Burada nasıl göründüğünü bir ekran görüntüsü var:

Capturing an XHR Request

Bağlantıyı bulduktan sonra, onun niteliklerini değiştirmek gidebilir. Bana sayfa başına 1000 sonuçları vermek üzere orada 1000 sayfa boyutunu değiştirdik

http://www.lkqpickyourpart.com/DesktopModules/pyp_vehicleInventory/getVehicleInventory.aspx?store=224&page=0&filter=toyota&sp=&cl=&carbuyYardCode=1224&pageSize=1000&language=en-US 

:

Bu

Chrome Dev Tools XHR isteği bana verdiği bağlantıdır. Varsayılan değer 15 idi. Ayrıca, tüm verileri yakalayana kadar ideal olarak artacağınız bir sayfa numarası da var.

+0

Teşekkürler! Bu gerçekten yararlıdır.Bu nedenle, başlangıç ​​URL'sinde "field =" ve "& sp" ifadesinden sonra görünen bir "anahtar kelime" değişkeni veya üretmek veya kazımak istediğim sonuçlar sayfasına bağlı olarak değişebilecek bir şey olabilir. –

+0

Teşekkürler! Bu gerçekten yararlıdır. Bu nedenle, başlangıç ​​URL'sinde "field =" ve "& sp" ifadesinden sonra beliren bir karakter değişkeni olabilir "anahtar kelime" veya üretmek ve kazımak istediğim sayfanın aramasına bağlı olarak değişebilecek bir şey olabilir mi? Arabaların ve eşlik eden resimlerin listesini saklamak için en iyi yol ne olurdu, eğer diğer başlangıç ​​URL'lerinden alıntılanan arama sonuçlarıyla bir araya gelebilseydim. –

0

web sayfası scrapy kodu

Kullanım Splash içeriği yüklemek ve kullanımı için document başvurmak için JavaScript render çerçeve gerektirir.

+0

Basit AJAX çağrıları almak için Splash veya Selenium kullanmanıza gerek yoktur. Bu bağlantıyı kontrol edin: http://stackoverflow.com/questions/16390257/scraping-ajax-pages-using-python – MetalloyD