Scrapy爬虫框架(十) ------ 爬取js动态网页
程序员文章站
2022-04-25 23:09:38
...
一.安装Docker
MacOS Docker 安装
菜鸟教程中也有其他系统的安装教程,很详细
配置加速器 : https://blog.51cto.com/13673090/2092462
博主是从网上看的文章照扒了~
二.安装并运行splash
1. 拉取镜像
docker pull scrapinghub/splash
2.用docker运行scrapinghub/splash
docker run -p 8050:8050 scrapinghub/splash
3.查看效果
我们在8050端口上运行了Splash服务,打开 http://自己电脑的IP地址:8050/ 即可看到其Web页面
4.查看正在运行的服务
docker ps
执行可以看到刚刚开启的splash服务:
5.停止Splash服务
docker kill 4步骤中获取的服务ID
再次刷新网页会显示无法连接到服务器
三.splash与scrapy结合使用
- pip安装scrapy-splash库
pip install scrapy-splash
- scrapy-splash使用的是Splash HTTP API, 所以需要一个splash instance,一般采用docker运行splash,所以需要安装docker
- 安装docker, 安装好后运行docker
- 拉取镜像
docker pull scrapinghub/splash
- 用docker运行scrapinghub/splash
docker run -p 8050:8050 scrapinghub/splash
-
配置splash服务(以下操作全部在settings.py):
①. 使用splash解析,要在配置文件中设置splash服务器地址:
SPLASH_URL = 'http://192.168.99.100:8050/'
②. 将splash middleware添加到DOWNLOADER_MIDDLEWARE中
DOWNLOADER_MIDDLEWARES = { 'scrapy_splash.SplashCookiesMiddleware': 723, 'scrapy_splash.SplashMiddleware': 725, 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810, }
③. Enable SplashDeduplicateArgsMiddleware
SPIDER_MIDDLEWARES = { 'scrapy_splash.SplashDeduplicateArgsMiddleware': 100 }
这个中间件需要支持cache_args功能; 它允许通过不在磁盘请求队列中多次存储重复的Splash参数来节省磁盘空间。如果使用Splash 2.1+,则中间件也可以通过不将这些重复的参数多次发送到Splash服务器来节省网络流量
④. 配置消息队列所使用的过滤类
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
⑤. 配置消息队列需要使用的类
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
如果出现返回504,延长超时时间(注意先kill之前的服务) :
docker run -it -p 8050:8050 scrapinghub/splash --max-timeout 36000
scrapy splash 504错误解决以及若干建议
然而我的问题并没有解决,如果有哪位看官知道为啥麻烦指教一下,感谢
案例一 :
# -*- coding: utf-8 -*-
import scrapy
from scrapy_splash import SplashRequest
from selenium import webdriver
class GuaziSpider(scrapy.Spider):
name = 'guazi'
allowed_domains = ['guazi.com']
# start_urls = ['https://www.guazi.com/bj/buy/']
def start_requests(self):
yield SplashRequest("https://www.guazi.com/bj/buy/", callback=self.parse, args={'wait': 1})
def parse(self, response):
print(response.text)
案例二 :
# -*- coding: utf-8 -*-
import scrapy
from scrapy_splash import SplashRequest
class GuaziSpider(scrapy.Spider):
name = 'guazi2'
allowed_domains = ['guazi.com']
# start_urls = ['https://www.guazi.com/bj/buy/']
def start_requests(self):
lua = '''
function main(splash, args)
assert(splash:go(args.url))
assert(splash:wait(1))
return splash:html()
end
'''
yield SplashRequest("https://www.guazi.com/bj/buy/", callback=self.parse, endpoint='execute',
args={'lua_source': lua})
def parse(self, response):
print(response.text)
上一篇: 爬虫爬取动态网页下载美女图片
下一篇: python爬虫初学者1
推荐阅读
-
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
-
爬虫 Scrapy框架 爬取图虫图片并下载
-
爬虫(十七):Scrapy框架(四) 对接selenium爬取京东商品数据
-
爬虫(三)通过Selenium + Headless Chrome爬取动态网页
-
Python网络爬虫(selenium爬取动态网页、爬虫案例分析、哈希算法与RSA加密)
-
Python爬虫学习记录——8.使用自动化神器Selenium爬取动态网页
-
【Python Scrapy 爬虫框架】 5、利用 pipelines 和 settings 将爬取数据存储到 MongoDB
-
Scrapy框架结合Spynner采集需进行js,ajax动态加载的网页并提取网页信息(以采集微信公众号文章列表为例)
-
使用爬虫框架scrapy爬取网站妹子图
-
使用scrapy做爬虫遇到的一些坑:爬虫使用scrapy爬取网页返回403错误大全以及解决方案