Scrapy Python response.css循环

时间:2018-08-22 18:26:30

标签: python scrapy scrapy-spider

我正试图在此网站上圈出所有报价:

https://www.tui.pl/wypoczynek/wyniki-wyszukiwania-samolot?pm_source=SG&pm_name=LSC&q=:price:byPlane:T:a:WAW:dF:6:dT:8:startDate:15.09.2018:endDate:30.09.2018:ctAdult:2:ctChild:0:tripType:WS&fullPrice=false

代码:

def start_requests(self):
    yield SplashRequest(
        url = 'https://www.tui.pl/wypoczynek/wyniki-wyszukiwania-samolot?pm_source=SG&pm_name=LSC&q=:price:byPlane:T:a:WAW:dF:6:dT:8:startDate:15.09.2018:endDate:30.09.2018:ctAdult:2:ctChild:0:amountRange:defaultAmountRange:minHotelCategory:defaultHotelCategory:tripAdvisorRating:defaultTripAdvisorRating:beach_distance:defaultBeachDistance:tripType:WS&fullPrice=false&page=0',
        args={'wait': 5.0}
    )

def parse(self, response):
    for item in response.css('div#offerPage'):
       print(item.css('div#offerPage h3 a ::text').extract())

输出:

['TUI MAGIC LIFE Waterworld', 'Riu Bambu', 'Ivana Palace', 'Kos Bay', 'Tia Maria', 'Rezydencja Villa List', 'Esperanto', 'Jupiter', 'Vezhen', 'Obzor Beach Resort', 'Palma', 'Victoria Palace', 'Chaika Beach', 'Fenix Beach', 'Globus', 'Erma', 'Sunset Resort', 'Palace', 'Trakia Garden', 'Perla Sun', 'Lilia', 'Poseidon', 'Garden of Eden', 'Park Hotel Continental', 'Hotel Karolina', 'Santa Marina Holiday Village', 'Semeli Hotel', 'Delfin', 'Lion Sunny Beach', 'Selena Beach', 'Mercury']

好像我的输出在一个列表中。如何每#offerPage更改循环?

1 个答案:

答案 0 :(得分:0)

Scrapy selector docs。您使用的是CSS,因此我们会坚持下去。

reponse.css()选择产生一个元素列表,因为只有一个#offerPage(id是唯一的)。因此,for中的parse()循环仅执行一次,但是其中的选择器将产生一个包含许多元素的列表,因为您的第一个选择中有许多h3 > a元素。 / p>

您应该再深入一层元素,以便response.css()为您的parse()循环产生多个元素。然后遍历。

def parse(self, response):

  # get list
  list = response.css('div#offerPage h3')

  #iterate over list
  for item in list:
    print(item.css('a::text').extract())