2013-11-17 3 views
2

В настоящее время я пытаюсь запустить следующий код, но он продолжает выскабливать только первый результат каждой страницы. Есть идеи, что может быть проблемой?Scrapy только соскабливает первый результат каждой страницы

from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.selector import HtmlXPathSelector 
from firstproject.items import xyz123Item 
import urlparse 
from scrapy.http.request import Request 

class MySpider(CrawlSpider): 
    name = "xyz123" 
    allowed_domains = ["www.xyz123.com.au"] 
    start_urls = ["http://www.xyz123.com.au/",] 

    rules = (Rule (SgmlLinkExtractor(allow=("",),restrict_xpaths=('//*[@id="1234headerPagination_hlNextLink"]',)) 
    , callback="parse_xyz", follow=True), 
    ) 

    def parse_xyz(self, response): 
     hxs = HtmlXPathSelector(response) 
     xyz = hxs.select('//div[@id="1234SearchResults"]//div/h2') 
     items = [] 
     for xyz in xyz: 
      item = xyz123Item() 
      item ["title"] = xyz.select('a/text()').extract()[0] 
      item ["link"] = xyz.select('a/@href').extract()[0] 
      items.append(item) 
      return items 

версия Basespider работает хорошо очищая все необходимые данные на первой странице:

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 
from firstproject.items import xyz123 

class MySpider(BaseSpider): 
    name = "xyz123test" 
    allowed_domains = ["xyz123.com.au"] 
    start_urls = ["http://www.xyz123.com.au/"] 


    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     titles = hxs.select('//div[@id="1234SearchResults"]//div/h2') 
     items = [] 
     for titles in titles: 
      item = xyz123Item() 
      item ["title"] = titles.select("a/text()").extract() 
      item ["link"] = titles.select("a/@href").extract() 
      items.append(item) 
     return items 

Извините за цензуру. Мне пришлось подвергать цензуре веб-сайт по соображениям конфиденциальности.

Первый код просканирует страницы так, как мне хотелось бы, чтобы он сканировал, однако он только тянет за первым заголовком и ссылкой. Примечание: XPath первого заголовка с помощью «проверить элемент» в гугле есть:
//*[@id="xyz123SearchResults"]/div[1]/h2/a,
второй является //*[@id="xyz123SearchResults"]/div[2]/h2/a
третий //*[@id="xyz123SearchResults"]/div[3]/h2/a и т.д.

Я не уверен, если DIV [п] бит что убивает его. Я надеюсь, что это легко исправить.

Благодаря

ответ

1
for xyz in xyz: 
      item = xyz123Item() 
      item ["title"] = xyz.select('a/text()').extract()[0] 
      item ["link"] = xyz.select('a/@href').extract()[0] 
      items.append(item) 
      return items 

уверен отступа возвращенных деталей Вы? Это должно быть меньше.

+0

Отлично! Это был отпечаток! Все, что я сделал, было отступом, строка 'return items' осталась одной, и теперь она работает Спасибо – slixor

Смежные вопросы