使用ruby mechanize下载使用href链接的pdf文件

时间:2016-08-19 06:06:15

标签: ruby web-scraping mechanize

使用Ruby Mechanize我已成功将输入值提交给表单,并且能够根据搜索条件获取结果页面。结果页面有pdf文件作为我需要下载的ahref链接。 属性href具有值:

href =' xxx.do?FILENAME = path / abc.pdf& SEARCHTEXT = aaa& ID = 123_4

其中SEARCHTEXT是最初作为输入输入的文本。当我手动点击链接时,pdf会在新窗口中打开 url为http://someip:8080/xxx/temp/123_4,与href属性中显示的ID相同。但实际的文件名是不同的,格式为xxx.123_2_.doc。我的下面代码返回0字节文件 -

scraper.pluggable_parser.pdf = Mechanize::FileSaver
File.open('n1pdf.pdf', 'wb'){|f| f << scraper.get(alink).body}

alink = http://someip:8080/xxx/temp/123_4 如果我使用

    File.open("new.pdf", "w") do |f|
    uri = URI(alink)
    f << Net::HTTP.get(uri)
    end 

我发现HTTP未找到错误。 我不确定我这样做是否正确。 ID是动态生成的会话ID,因为结果页面上的所有pdf文件都具有此ID,其中_1 / 2/3为文件名(或url)。

请注意,每当我手动点击并打开一个pdf文件,然后在我的代码中硬核那个文件下载,但是当我的代码动态提取ID值并分配到alink时不会。不确定这是否与cookie有关。请帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

确保它是正确的绝对网址:

uri = scraper.page.uri.merge(a[:href])
puts uri # just check to be sure
File.open('n1pdf.pdf', 'wb'){|f| f << scraper.get(uri).body}