投稿 资料上传 搜索
您现在的位置是: 首页 > 文章 > 正文

Splash抓取javaScript动态渲染页面

scrapy爬虫框架没有js渲染服务,所以我们采集不到数据,这时候我们就需要一个渲染引擎来为我们提供渲染服(Splash渲染引擎)

Splash渲染引擎:

Splash是一个Javascript渲染服务,Splash是为Scrapy爬虫框架提供渲染的

splash的作用:

1、返回渲染的html页面

2、支持渲染多个页面

3、渲染速度快

4、模拟浏览器加载js,并返回js运行后的数据

安装Splash:

1、安装scrapy-splash模块

2、安装docker

3、启动docker,拉取spash

Scrapy 中使用Splash渲染配置代理说明:

#! -*- encoding:utf-8 -*-
import base64
import sys
import random

PY3 = sys.version_info[0] >= 3

def base64ify(bytes_or_str):
if PY3 and isinstance(bytes_or_str, str):
input_bytes = bytes_or_str.encode('utf8')
else:
input_bytes = bytes_or_str

output_bytes = base64.urlsafe_b64encode(input_bytes)
if PY3:
return output_bytes.decode('ascii')
else:
return output_bytes

class ProxyMiddleware(object):
def process_request(self, request, spider):
# 代理服务器(产品官网 www.16yun.cn)
proxyHost = "t.16yun.cn"
proxyPort = "31111"

# 代理验证信息
proxyUser = "username"
proxyPass = "password"
request.meta['proxy'] = "http://{0}:{1}".format(proxyHost,proxyPort)

# 添加验证头
encoded_user_pass = base64ify(proxyUser + ":" + proxyPass)
request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass

# 设置IP切换头(根据需求)
tunnel = random.randint(1,10000)
request.headers['Proxy-Tunnel'] = str(tunnel)

class SplashProxyMiddleware(object):
def process_request(self, request, spider):
# 代理服务器(产品官网 www.16yun.cn)
proxyHost = "t.16yun.cn"
proxyPort = "31111"

# 代理验证信息
proxyUser = "username"
proxyPass = "password"

request.meta['splash']['args']['proxy'] = "http://{}:{}@{}:{}"
.format(proxyUser,proxyPass,proxyHost,proxyPort)


转载于:

文章标签:
阿里云服务器采购季
给作者打赏,鼓励TA抓紧创作!
评论

    友情提示

    你好!遇到什么技术难题了嘛?请点击我要提问,我们免费帮您解答!!!

    Linux中的Screen命令Linux之CentOS系统常用命令web前端开发面试题
    大家都在问