Python爬虫:splash+requests简单示例

说明:
render是get方式
execute是post方式

render

import requests

def splash_render(url):
    splash_url = "http://localhost:8050/render.html"
    
    args = {
        "url": url,
        "timeout": 5,
        "image": 0,
        "proxy": "http://222.95.21.28:8888"
    }

    response = requests.get(splash_url, params=args)
    return response.text


if __name__ == '__main__':

    url = "http://quotes.toscrape.com/js/"

    html = splash_render(url)

args参数说明:
url: 需要渲染的页面地址
timeout: 超时时间
proxy:代理
wait:等待渲染时间
images: 是否下载,默认1(下载)
js_source: 渲染页面前执行的js代码

execute


import json
import requests

def splash_execute(url):
    splash_url = "http://localhost:8050/execute"

    script = """
    function main(splash)
        local url="{url}"
        splash:set_user_agent("Mozilla/5.0  Chrome/69.0.3497.100 Safari/537.36")
        splash:go(url)
        splash:wait(2)
        splash:go(url)
        return {
            html = splash:html()
        }
    end
    """
    script = script.replace("{url}", url)
    data = {
        "timeout": 5,
        "lua_source": script
    }

    response = requests.post(splash_url, json=data)

    return response.json().get("html")
    

if __name__ == '__main__':
    url = "http://quotes.toscrape.com/js/"

    html = splash_execute(url)

参数说明:
timeout 超时
lua_source lua脚本
proxy 代理

模拟登录

以下是lua脚本
splash提供的select选择器,使用方法和jQuery类似

function main(splash, args)
	-- jquery加载比较慢
	splash:autoload("https://code.jquery.com/jquery-3.3.1.min.js")
	splash:set_viewport_size(1366, 768)
	splash:set_user_agent("Mozilla/5.0  Chrome/69.0.3497.100 Safari/537.36")
	
	-- 从首页点击登录按钮
	splash:go(splash.args.url)
	splash:wait(3)
	splash:runjs("$('#login').click()")
	splash:wait(2)
	
	-- 登录页输入账号密码,并提交
	splash:select("#username"):send_text("username")
	splash:select("#password"):send_text("password")
	splash:wait(5)

	-- 可以使用splash自带的鼠标点击,并指定点击位置
	local button = splash:select("#button")
    local bounds = button:bounds()
    button:mouse_click{x=bounds.width/3, y=bounds.height/3}
	splash:wait(2)

	-- 返回
	return {
		html=splash:html(),
		png = splash:png(),
		cookie=splash:get_cookies()
	}
end

参考:
splash文档:https://splash.readthedocs.io/en/stable/scripting-ref.html

Python爬虫是一种用于自动化获取网数据的技术,而Splash是一个基于Webkit的JavaScript渲染服务,可以用于处理动态网页。结合Python爬虫Splash可以实现对动态数据的爬取。 使用Python爬虫Splash进行动态数据爬取的步骤如下: 1. 安装Splash:首先需要安装并运行Splash服务,可以通过Docker来安装和运行Splash。 2. 安装必要的库:使用Pythonrequests库发送请求,使用splashapi库与Splash进行交互。 3. 编写爬虫代码:在Python中编写爬虫代码,使用requests库发送请求到Splash服务,并通过splashapi库解析返回的结果。 4. 解析动态数据:根据网页的结构和需要获取的数据,使用相应的解析方法提取出所需的数据。 以下是一个简单示例代码,演示如何使用Python爬虫Splash获取动态数据: ```python import requests from splashapi import Splash # 创建Splash对象 splash = Splash() # 设置请求参数 url = 'http://example.com' # 目标网页的URL script = """ function main(splash) splash:go(splash.args.url) splash:wait(5) # 等待页面加载完成 return splash:html() # 返回页面的HTML内容 end """ # 发送请求并获取结果 response = splash.run('execute', {'lua_source': script, 'url': url}) # 解析结果 html = response['result']['html'] # 在这里可以使用其他库(如BeautifulSoup)对HTML进行解析和提取数据 # 打印结果 print(html) # 关闭Splash服务 splash.close() ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值