分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

scrapy_splash模块解析动态js

发布时间:2023-09-06 02:20责任编辑:彭小芳关键词:js

一般遇到动态加载的网页就比较棘手,一般采用scrapy_splash和selenium这两种方式来解决。貌似scrapy_splash更强大,因为就从爬取美团这个网站而言,scrapy_splash可以实现,selenium没有实现。可能selenium没有设置对吧,按理说都应该可以的。

首先需要你安装scrapy_splash,需要用到docker。教程在网上自己找。很简单。两个命令的事,前提是你在linux环境下。安装好之后访问:http://127.0.0.1:8050/

安装模块 pip3 install scrapy-splash

scrapy-splash需要些lua脚本。比如加一些参数,请求头之类的。具体语法百度吧,我也不太清楚。

创建好项目之后。需要在setting中设置几个参数:

DOWNLOADER_MIDDLEWARES = { ???#scrapy_splash相关的中间件 ???‘scrapy_splash.SplashCookiesMiddleware‘: 723, ???‘scrapy_splash.SplashMiddleware‘: 725, ???‘scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware‘: 810,}#‘scrapy_splash的去重的类DUPEFILTER_CLASS = ‘scrapy_splash.SplashAwareDupeFilter‘# 最后配置一个Cache存储HTTPCACHE_STORAGEHTTPCACHE_STORAGE = ‘scrapy_splash.SplashAwareFSCacheStorage‘

然后开始写爬虫程序,也很简单,就是SplashRequest请求。然后指定需要执行的脚本。就会返回动态加载完成的页面。

# -*- coding: utf-8 -*-import scrapyfrom selenium import webdriverimport ?timefrom scrapy_splash import SplashRequestscript = """function main(splash, args) ?assert(splash:wait(0.5)) ?splash:set_custom_headers({ ???[‘Accept‘] = ‘*/*‘, ???[‘Accept-Language‘] = ‘zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2‘, ???[‘Cache-Control‘] = ‘max-age=0‘, ???[‘Connection‘] = ‘keep-alive‘, ???[‘User-Agent‘] = ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36‘ ?}) ?splash.private_mode_enabled = false ?assert(splash:go(args.url)) ?assert(splash:wait(10)) ?return { ???html = splash:html(), ???png = splash:png(), ???har = splash:har(), ?}end"""class MeituanspiderSpider(scrapy.Spider): ???name = ‘meituanSpider‘ ???# allowed_domains = [‘zz.meituan.com‘] ???start_urls = [‘http://zz.meituan.com/meishi/pn/‘] ???def start_requests(self): ???????yield SplashRequest(self.start_urls[0], callback=self.parse, endpoint=‘execute‘, ???????????????????????????args={‘lua_source‘: script, ‘wait‘: 7}) ???def parse(self, response): ???????# 店铺名字 ???????list=response.xpath(‘//*[@id="app"]/section/div/div[2]/div[2]/div[1]/ul/li/div[2]/a/h4/text()‘).extract() ???????for i in list : ???????????print(i)

如果不写脚本的话,是不会成功的,可能美团那边做了限制,脚本也很简单,就是加一些请求头。

scrapy_splash模块解析动态js

原文地址:https://www.cnblogs.com/coder-lzh/p/9869278.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved