我试图创建一个可以从某个网站刮数据的刮刀,例如:
https://www.spicejet.com/search?from=BOM&to=BLR&tripType=1&departure=2022-04-20&adult=1&child=0&infant=0¤cy=USD&redirectTo=/
问题是,它只收集了一些数据,但我真正需要的(航班的详细信息)并没有返回。
我需要这个div元素:其中包含了许多div,其中包含了航班的详细信息,但是当我使用scrapy-splash时,我只得到了这个div元素,而没有他的children元素--这些元素存储了数据。
我知道有几个类似的问题,但没有一个解决方案有帮助。
这就是代码:
class SpiceJetSpider(scrapy.Spider):
name = "spiceJet"
flight_search_results = []
custom_settings = {
'BOT_NAME' : 'flightsCadgerScrapy',
'SPIDER_MODULES' : ['flightsCadgerScrapy.spiders'],
'NEWSPIDER_MODULE' : 'flightsCadgerScrapy.spiders',
'SPLASH_URL' : 'http://localhost:8050',
'DOWNLOADER_MIDDLEWARES' : {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
},
'SPIDER_MIDDLEWARES' : {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
},
'DUPEFILTER_CLASS' : 'scrapy_splash.SplashAwareDupeFilter',
'HTTPCACHE_STORAGE' : 'scrapy_splash.SplashAwareFSCacheStorage'
}
def __init__(self, flight_search_request):
self.url = 'https://www.spicejet.com/search?from=BOM&to=BLR&tripType=1&departure=2022-04-20&adult=1&child=0&infant=0¤cy=USD&redirectTo=/'
def start_requests(self):
yield SplashRequest(self.url, self.parse, args={'wait': 6})
def parse(self, response):
flight_obj = response.css('div').getall()
self.flight_search_results.append(flight_obj)
return self.flight_search_results
我得到的响应包含一个div列表,但我需要的那个是空的。
谢谢你!
1条答案
按热度按时间qxgroojn1#
加载大量javascript的网站的首选方法是使用
scrapy-playwright
。它比scrapy-splash
更简单,更容易设置。请从here阅读更多关于它的使用。下面的示例代码显示了如何使用它来获取页面的呈现html,然后可以解析该页面以获取所需的数据。