4 回答

TA貢獻2021條經驗 獲得超8個贊
解決方案1:
我們需要的是:
碼頭工人 安裝在我們的機器里。在此之前,這是一個優于其他解決方案的解決方案,因為它使用的是獨立于操作系統的平臺。 安裝飛濺 按照相應操作系統列出的指令執行。 引用飛濺文件的話: Splash是一個javascript呈現服務。它是一個帶有HTTPAPI的輕量級Web瀏覽器,使用Twisted和QT5在Python 3中實現。 本質上,我們將使用Splash來呈現Javascript生成的內容。 運行Splash服務器: sudo docker run -p 8050:8050 scrapinghub/splash
.安裝 刮濺 插件: pip install scrapy-splash
假設我們已經創建了一個Scrapy項目(如果沒有, 我們來做一個 ),我們將按照指南更新 settings.py
:那就去你的項目吧 settings.py
并設置這些中間工具: DOWNLOADER_MIDDLEWARES = { 'scrapy_splash.SplashCookiesMiddleware': 723, 'scrapy_splash.SplashMiddleware': 725, 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,}
Splash服務器的URL(如果使用Win或OSX),這應該是停靠計算機的URL: 如何從主機獲取碼頭集裝箱的IP地址? ):SPLASH_URL = 'http://localhost:8050'
最后,還需要設置這些值: DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
最后,我們可以使用 SplashRequest
:在普通的蜘蛛中,您可以使用請求對象來打開URL。如果要打開的頁面包含JS生成的數據,則必須使用SplashRequest(或SplashFormRequest)來呈現頁面。下面是一個簡單的例子: class MySpider(scrapy.Spider): name = "jsscraper" start_urls = ["http://quotes.toscrape.com/js/"] def start_requests(self): for url in self.start_urls: yield SplashRequest( url=url, callback=self.parse, endpoint='render.html' ) def parse(self, response): for q in response.css("div.quote"): quote = QuoteItem() quote["author"] = q.css(".author::text").extract_first() quote["quote"] = q.css(".text::text").extract_first() yield quote
SplashRequest將URL呈現為html,并返回您可以在回調(解析)方法中使用的響應。
解決方案2:
此解決方案適用于Python版本3.6
這個庫旨在使解析HTML(例如,抓取Web)盡可能簡單和直觀。
安裝請求-html: pipenv install requests-html
向頁面的網址發出請求: from requests_html import HTMLSessionsession = HTMLSession()r = session.get(a_page_url)
呈現響應以獲取Javascript生成的比特: r.html.render()
r.html
添加回答
舉報