scrapy-splash不会返回所有数据

dsf9zpds  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(198)

我试图创建一个可以从某个网站刮数据的刮刀,例如:
https://www.spicejet.com/search?from=BOM&to=BLR&tripType=1&departure=2022-04-20&adult=1&child=0&infant=0&currency=USD&redirectTo=/
问题是,它只收集了一些数据,但我真正需要的(航班的详细信息)并没有返回。
我需要这个div元素:其中包含了许多div,其中包含了航班的详细信息,但是当我使用scrapy-splash时,我只得到了这个div元素,而没有他的children元素--这些元素存储了数据。
我知道有几个类似的问题,但没有一个解决方案有帮助。
这就是代码:

  1. class SpiceJetSpider(scrapy.Spider):
  2. name = "spiceJet"
  3. flight_search_results = []
  4. custom_settings = {
  5. 'BOT_NAME' : 'flightsCadgerScrapy',
  6. 'SPIDER_MODULES' : ['flightsCadgerScrapy.spiders'],
  7. 'NEWSPIDER_MODULE' : 'flightsCadgerScrapy.spiders',
  8. 'SPLASH_URL' : 'http://localhost:8050',
  9. 'DOWNLOADER_MIDDLEWARES' : {
  10. 'scrapy_splash.SplashCookiesMiddleware': 723,
  11. 'scrapy_splash.SplashMiddleware': 725,
  12. 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
  13. },
  14. 'SPIDER_MIDDLEWARES' : {
  15. 'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
  16. },
  17. 'DUPEFILTER_CLASS' : 'scrapy_splash.SplashAwareDupeFilter',
  18. 'HTTPCACHE_STORAGE' : 'scrapy_splash.SplashAwareFSCacheStorage'
  19. }
  20. def __init__(self, flight_search_request):
  21. self.url = 'https://www.spicejet.com/search?from=BOM&to=BLR&tripType=1&departure=2022-04-20&adult=1&child=0&infant=0&currency=USD&redirectTo=/'
  22. def start_requests(self):
  23. yield SplashRequest(self.url, self.parse, args={'wait': 6})
  24. def parse(self, response):
  25. flight_obj = response.css('div').getall()
  26. self.flight_search_results.append(flight_obj)
  27. return self.flight_search_results

我得到的响应包含一个div列表,但我需要的那个是空的。
谢谢你!

qxgroojn

qxgroojn1#

加载大量javascript的网站的首选方法是使用scrapy-playwright。它比scrapy-splash更简单,更容易设置。请从here阅读更多关于它的使用。
下面的示例代码显示了如何使用它来获取页面的呈现html,然后可以解析该页面以获取所需的数据。

  1. import scrapy
  2. class SpiceJetSpider(scrapy.Spider):
  3. name = "spiceJet"
  4. custom_settings = dict(
  5. DOWNLOAD_HANDLERS={
  6. "https": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
  7. },
  8. TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
  9. )
  10. def start_requests(self):
  11. url = 'https://www.spicejet.com/search?from=BOM&to=BLR&tripType=1&departure=2022-04-20&adult=1&child=0&infant=0&currency=USD&redirectTo=/'
  12. yield scrapy.Request(url, meta={'playwright': True})
  13. def parse(self, response):
  14. # do all the parsing you need of the response here
  15. yield {
  16. "html": response.text
  17. }
展开查看全部

相关问题