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

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

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

下面,直接开始吧

目标网站

JD 某商品

环境需求

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

3. 安装 scrapy_splash

步骤

  1. 与往常一样使用 scrapy 创建爬虫
  2. 修改 settings 文件
# splash 地址
SPLASH_URL = 'http://192.168.0.100:8050'
# 去重这里应该是可以修改的,可以不使用 scrapy_splash 配套的,譬如 Redis
DUPEFILTER_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 SplashRequest

class TestSpider(scrapy.Spider):
    name = 'test'
    # allowed_domains = ['www.baidu.com']
    url = 'https://item.jd.com/100000177760.html'

    # start request
    def start_requests(self):
        # yield SplashRequest(self.url, callback=self.parse, endpoint='execute', args={'lua_source': script})
        yield SplashRequest(self.url, callback=self.parse)

效果展示

f9bca9fccc6cb72334732103b7800563.png
目标爬取字段

ef779b345719b029b9850fb23f6b30c2.png
查看网页源码,找不到目标数据

7c1cacc4852ac99246992835412acbd0.png
发现数据来源于 js 加载

1ebab0ce5c855613e25561b1ac555e47.png
通过浏览器插件写的 xpath 匹配规则

7b5623a6b8546dacba3d9f12232c14e4.png
在 pycharm 下使用 debug 模式查看,成功获取到目标数据

文章解释

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

推荐阅读

  1. 霾大:scrapy_splash 设置随机请求头

代码传送门

LZC6244/scrapy_splash_test​github.com
6de5bb81be7f884cc7c7895f3b8a3d2f.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值