700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > scrapy爬取动态网页_scrapy_splash 爬取 js 加载网页初体验

scrapy爬取动态网页_scrapy_splash 爬取 js 加载网页初体验

时间:2022-04-14 09:11:18

相关推荐

scrapy爬取动态网页_scrapy_splash 爬取 js 加载网页初体验

最近打算学习 scrapy_splash 来爬取 js 加载的动态网页

selenium 实在太慢了,不在迫不得已的情况下并不推荐使用

下面,直接开始吧

目标网站

JD 某商品

环境需求

已安装 docker 并能正常运行。( 使用 docker 我们可以直接使用别人安装好的 splash 环境,splash 官方也是使用的 docker )通过 docker 安装 splash 环境。( 安装在本地通过访问 127.0.0.1:8050 测试,远程则是 ip:8050 )

docker run -p 8050:8050 scrapinghub/splash

3. 安装 scrapy_splash

步骤

与往常一样使用 scrapy 创建爬虫修改 settings 文件

# splash 地址SPLASH_URL = 'http://192.168.0.100:8050'# 去重这里应该是可以修改的,可以不使用 scrapy_splash 配套的,譬如 RedisDUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'# 这里不建议修改,建议使用原生HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'# 这个是按照官方配置的# scrapy 中间件是按照权重数字从小到大加载执行的# 不清楚 scrapy 内置顺序的情况下请勿修改SPIDER_MIDDLEWARES = {# 'scrapy_test.middlewares.ScrapyTestSpiderMiddleware': 543,'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,}DOWNLOADER_MIDDLEWARES = {# 'scrapy_test.middlewares.ScrapyTestDownloaderMiddleware': 543,'scrapy_splash.SplashCookiesMiddleware': 723,'scrapy_splash.SplashMiddleware': 725,'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,}

3. 修改 spider 文件

from scrapy_splash import SplashRequestclass TestSpider(scrapy.Spider):name = 'test'# allowed_domains = ['']url = '/100000177760.html'# start requestdef start_requests(self):# yield SplashRequest(self.url, callback=self.parse, endpoint='execute', args={'lua_source': script})yield SplashRequest(self.url, callback=self.parse)

效果展示

目标爬取字段
查看网页源码,找不到目标数据
发现数据来源于 js 加载
通过浏览器插件写的 xpath 匹配规则
在 pycharm 下使用 debug 模式查看,成功获取到目标数据

文章解释

代码中含较多注释是因为本人先前在调试,调试成功后并没有去删除其 若想使用我未删除的注释进行调试,请注意 lua 语言中 '--' 代表注释行

推荐阅读

霾大:scrapy_splash 设置随机请求头

代码传送门

LZC6244/scrapy_splash_test​

原创文章,转载请保留或注明出处!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。