Mechanize Rails - Web Scraping - 服务器使用JSON进行响应 - 如何将URL解析为下载CSV

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mechanize Rails - Web Scraping - 服务器使用JSON进行响应 - 如何将URL解析为下载CSV相关的知识,希望对你有一定的参考价值。

我是Mechanize的新手并试图克服这个非常明显的答案。

我将一个简短的脚本放在外部站点上进行身份验证,然后单击一个动态生成CSV文件的链接。

我终于得到它点击导出按钮,但是,它返回一个AWS URL。

我正在尝试让脚本从这个JSON响应中下载所述CSV(见下文)。

Myscript.rb

require 'mechanize'
require 'logger'
require 'rubygems'
require 'nokogiri'
require 'open-uri'
require 'zlib'    
USERNAME = "myemail"
    PASSWORD = "mysecret"
    USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/50.0.2661.102 Safari/537.36"

    mechanize = Mechanize.new do |a|
      a.user_agent = USER_AGENT
    end

    form_page = mechanize.get('https://XXXX.XXXXX.com/signin')
    form = form_page.form_with(:id =>'login')
    form.field_with(:id => 'user_email').value=USERNAME
    form.field_with(:id => 'user_password').value=PASSWORD
    page = form.click_button

    donations = mechanize.get('https://XXXXX.XXXXXX.com/pages/ACCOUNT/statistics')
    puts donations.body

    donations = mechanize.get('https://xxx.siteimscraping.com/pages/myaccount/statistics')
    bs_csv_download = page.link_with(:text => 'Download CSV')

来自包含CSV链接的网站的JSON响应我需要通过Mechanize和/或nokogiri进行解析和下载。

{"message":"Find your report at https://s3.amazonaws.com/reports.XXXXXXX.com/XXXXXXX.csv?X-Amz-Algorithm=AWS4-HMAC-SHA256u0026X-Amz-Credential=AKIAIKW4BJKQUNOJ6D2A%2F20190228%2Fus-east-1%2Fs3%2Faws4_requestu0026X-Amz-Date=20190228T025844Zu0026X-Amz-Expires=86400u0026X-Amz-SignedHeaders=hostu0026X-Amz-Signature=b19b6f1d5120398c850fc03c474889570820d33f5ede5ff3446b7b8ecbaf706e"}

我非常感谢任何帮助。

答案

您可以将其解析为JSON,然后从响应中检索子字符串(假设它始终以相同的格式响应):

require 'json'

...

bs_csv_download = page.link_with(:text => 'Download CSV')
json_response = JSON.parse(bs_csv_download)
direct_link = json_response["message"][20..-1]
mechanize.get(direct_link).save('file.csv')

我们使用[20..-1]获取“message”值中的第20个字符(-1表示直到字符串结尾)。

以上是关于Mechanize Rails - Web Scraping - 服务器使用JSON进行响应 - 如何将URL解析为下载CSV的主要内容,如果未能解决你的问题,请参考以下文章

Python Web 性能和压力测试 multi-mechanize

如何配置 Ruby Mechanize 代理以通过 Charles Web 代理工作?

性能测试框架Multi-Mechanize安装与使用

Python使用mechanize模拟浏览器

Ruby登录使用mechanize进行spotify

如何使用 Mechanize 处理 JavaScript?