最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

28. Scrapy 框架-爬取JS生成的動(dòng)態(tài)頁(yè)面

2020-07-04 09:58 作者:自學(xué)Python的小姐姐呀  | 我要投稿

問(wèn)題

有的頁(yè)面的很多部分都是用JS生成的,而對(duì)于用scrapy爬蟲來(lái)說(shuō)就是一個(gè)很大的問(wèn)題,因?yàn)閟crapy沒(méi)有JS engine,所以爬取的都是靜態(tài)頁(yè)面,對(duì)于JS生成的動(dòng)態(tài)頁(yè)面都無(wú)法獲得

官網(wǎng)http://splash.readthedocs.io/en/stable/

解決方案

  • 利用第三方中間件來(lái)提供JS渲染服務(wù): scrapy-splash 等

  • 利用webkit或者基于webkit庫(kù)

Splash是一個(gè)Javascript渲染服務(wù)。它是一個(gè)實(shí)現(xiàn)了HTTP API的輕量級(jí)瀏覽器,Splash是用Python實(shí)現(xiàn)的,同時(shí)使用Twisted和QT。Twisted(QT)用來(lái)讓服務(wù)具有異步處理能力,以發(fā)揮webkit的并發(fā)能力

安裝

  1. pip安裝scrapy-splash庫(kù)

pip install scrapy-splash

  1. scrapy-splash使用的是Splash HTTP API, 所以需要一個(gè)splash instance,一般采用docker運(yùn)行splash,所以需要安裝docker

  2. 安裝docker, 安裝好后運(yùn)行docker

  3. 拉取鏡像

docker pull scrapinghub/splash

  1. 用docker運(yùn)行scrapinghub/splash

docker run -p 8050:8050 scrapinghub/splash

  1. 配置splash服務(wù)(以下操作全部在settings.py):

    SPLASH_URL = 'http://192.168.99.100:8050/' DOWNLOADER_MIDDLEWARES = {
    'scrapy_splash.SplashCookiesMiddleware': 723,
    'scrapy_splash.SplashMiddleware': 725,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
    }SPIDER_MIDDLEWARES = {
    ?'scrapy_splash.SplashDeduplicateArgsMiddleware': 100
    }

    這個(gè)中間件需要支持cache_args功能; 它允許通過(guò)不在磁盤請(qǐng)求隊(duì)列中多次存儲(chǔ)重復(fù)的Splash參數(shù)來(lái)節(jié)省磁盤空間。如果使用Splash 2.1+,則中間件也可以通過(guò)不將這些重復(fù)的參數(shù)多次發(fā)送到Splash服務(wù)器來(lái)節(jié)省網(wǎng)絡(luò)流量

    DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
    1. 配置消息隊(duì)列需要使用的類

    2. 配置消息隊(duì)列所使用的過(guò)濾類

    3. Enable SplashDeduplicateArgsMiddleware

    1. 將splash middleware添加到DOWNLOADER_MIDDLEWARE中

    2. 使用splash解析,要在配置文件中設(shè)置splash服務(wù)器地址:

    樣例

    import scrapy
    from scrapy_splash import SplashRequest


    class DoubanSpider(scrapy.Spider):
    ? ?name = 'douban'

    ? ?allowed_domains = ['douban.com']


    def start_requests(self):
    ? ?yield SplashRequest('https://movie.douban.com/typerank?type_name=劇情&type=11&interval_id=100:90', args={'wait': 0.5})


    def parse(self, response):
    ? ?print(response.text)



    28. Scrapy 框架-爬取JS生成的動(dòng)態(tài)頁(yè)面的評(píng)論 (共 條)

    分享到微博請(qǐng)遵守國(guó)家法律
    扶沟县| 丽江市| 绍兴县| 武穴市| 金湖县| 七台河市| 鄱阳县| 齐河县| 静海县| 曲水县| 大田县| 陈巴尔虎旗| 科技| 松潘县| 竹北市| 郑州市| 安塞县| 桦南县| 西乌珠穆沁旗| 吴忠市| 孙吴县| 定西市| 东城区| 丹阳市| 时尚| 龙江县| 南澳县| 柳江县| 资源县| 嘉祥县| 锦州市| 正安县| 绥江县| 华坪县| 绍兴市| 噶尔县| 鹤庆县| 福贡县| 扶绥县| 菏泽市| 唐山市|