抓取表格分页数据
Scraping tabulated paginated data
包含我需要的数据的页面已将其结构更改为新的分页格式。我正在为该页面更新我的抓取工具。
我不明白如何从所有不同的页面收集数据。
要抓取的页面是:http://eserver.goutsi.com:8080/DPW230.cgi
我知道如何收集表格中的数据,但我不知道如何处理分页。
这是我的原创剧本:
scrape_actor = Mechanize.new
page = scrape_actor.get("http://loads.goutsi.com:8080/wntv5/BKLoad")
rows = page.body.to_s.split("</tr>")
rows.each do |row|
if row.include? "bgcolor='#f5f5f5'"
columns = row.split("</td>")
i = 0
while i < columns.count
columns[i] = columns[i].gsub(%r{</?[^>]+?>},'').gsub(/[\n\t\r ]+/,'').gsub(" ",'')
i+=1
end
username = "UTSI"
origin = columns[0].gsub(" ","")
pickup = Chronic.parse(columns[1]+"/"+Time.now.strftime("%Y"))
dest = columns[3]
comments = "miles: #{columns[4]}, phone: #{columns[9]}, other: #{columns[11]}"
equipment = columns[6]
ltl = false
ltl = true if columns[7] == "LTL"
Scrape.post_load(username,origin,dest,pickup,'',ltl,equipment,comments,'','','')
end
end
当您单击页面上的其中一个页面链接 javascript 时,会触发一个 post 请求 使用新页码到同一路径 。
这可以在他们位于 http://eserver.goutsi.com:8080/js/LoadBoard.js
的 js 文件中找到
function gotoPage(pageNumber)
{
document.getElementById("PageNbr").value= pageNumber; // Set new page number
document.getElementById("PageDir").value="R"; // Refresh
document.getElementById("theForm").submit();
}
该代码提交此表单:
<form action="/DPW230.cgi" method="post" id="theForm">...
其中有字段:
<input type="hidden" id="PageDir" name="PageDir" value=" "><input type="hidden" id="PageNbr" name="PageNbr" value="1">
此 value
在同一 javascript 中更新。
这意味着您需要向此 URL 发出 post 请求,其中连续的页码是参数 - 然后依次解析每个页面并汇总结果。
包含我需要的数据的页面已将其结构更改为新的分页格式。我正在为该页面更新我的抓取工具。
我不明白如何从所有不同的页面收集数据。
要抓取的页面是:http://eserver.goutsi.com:8080/DPW230.cgi
我知道如何收集表格中的数据,但我不知道如何处理分页。
这是我的原创剧本:
scrape_actor = Mechanize.new
page = scrape_actor.get("http://loads.goutsi.com:8080/wntv5/BKLoad")
rows = page.body.to_s.split("</tr>")
rows.each do |row|
if row.include? "bgcolor='#f5f5f5'"
columns = row.split("</td>")
i = 0
while i < columns.count
columns[i] = columns[i].gsub(%r{</?[^>]+?>},'').gsub(/[\n\t\r ]+/,'').gsub(" ",'')
i+=1
end
username = "UTSI"
origin = columns[0].gsub(" ","")
pickup = Chronic.parse(columns[1]+"/"+Time.now.strftime("%Y"))
dest = columns[3]
comments = "miles: #{columns[4]}, phone: #{columns[9]}, other: #{columns[11]}"
equipment = columns[6]
ltl = false
ltl = true if columns[7] == "LTL"
Scrape.post_load(username,origin,dest,pickup,'',ltl,equipment,comments,'','','')
end
end
当您单击页面上的其中一个页面链接 javascript 时,会触发一个 post 请求 使用新页码到同一路径 。
这可以在他们位于 http://eserver.goutsi.com:8080/js/LoadBoard.js
的 js 文件中找到function gotoPage(pageNumber)
{
document.getElementById("PageNbr").value= pageNumber; // Set new page number
document.getElementById("PageDir").value="R"; // Refresh
document.getElementById("theForm").submit();
}
该代码提交此表单:
<form action="/DPW230.cgi" method="post" id="theForm">...
其中有字段:
<input type="hidden" id="PageDir" name="PageDir" value=" "><input type="hidden" id="PageNbr" name="PageNbr" value="1">
此 value
在同一 javascript 中更新。
这意味着您需要向此 URL 发出 post 请求,其中连续的页码是参数 - 然后依次解析每个页面并汇总结果。