使用来自网站的数据,将其与表格匹配并提取数据

时间:2013-11-23 20:31:49

标签: python html mysql

经过几个小时的环顾四周和阅读文件后,我不得不寻求帮助和理智。我不是python专家,甚至不是HTML专家,所以我很感激能得到的每一点帮助。

如果需要,我可以付一点时间......

我要做的是:

两个网页。一个在我的服务器中,一个不在。不在我的服务器(order.asp)中的那个有这一行:

<FONT CLASS="fv">Estimated Weight of Order:</FONT></TD><TD ALIGN="RIGHT"><FONT CLASS="fv">XX.XXoz&nbsp;&nbsp;&nbsp;XX.XXg</FONT>

我需要一些我可以放入服务器的东西,从不在我服务器上的页面查询重量(order.asp页面),并将重量与我在页面上的运费相匹配(如一张桌子或者可能带有ifs。)

将有不同的订单页面(order1.asp order2.asp order3.asp)具有不同的权重。脚本或其他什么应该为ea做。 wpage。

这是我刚刚帮助理解的流程图:

http://www.gliffy.com/go/publish/image/5123674/L.png

一位非常有帮助的用户已经给了我这段代码:

html = open(“html.txt”)。read() out = open(“foundWeights.txt”,“w”)

#split html on order number
legoOrders = html.split("Order #")

for order in legoOrders[1:]:
  print order
  orderNumber = order.split("<")[0]

  weightString = order.split('Estimated Weight of Order:</FONT></TD><TD ALIGN="RIGHT"><FONT CLASS="fv">')[1]
  splitWeightString = weightString.split('&nbsp;&nbsp;&nbsp;')
  splitStringFinal = splitWeightString[1].split("<")

  grams = splitStringFinal[0]
  ozs = weightString.split('&nbsp')[0]

  out.write(str(orderNumber) + "\t" + str(grams) + "\t" + str(ozs) + "\n"

取出订单号,以盎司和克为单位的重量。

我不知道该怎么做,有一个运费价格和重量范围的表格,将该重量与运费相匹配,拉动运费和......好吧,用它来做一些事情。

理想情况下,如果我知道如何做到这一点(我在python中什么都不知道,但我知道编程基础知识和C),我也可以提取订单总数,总计订单总额和运费价格,以及最终获得总计。

我希望我说清楚。

一切顺利, 杰拉德


这就是页面order.asp的样子(改变权重和订单总数):

http://pastebin.com/uH18CF5k


缓慢到达那里。我将此添加到您的代码@duhaime

 #get Shipping Range
    test = "B"
    if ( 0 < grams < 100 ):
        test = "A"
    if ( 100 < grams < 500):
        test = "A"

与out.write中的str(test)一起。

然而,当我运行它时会打印出一张B,但它应该打印出来A.知道出了什么问题?

1 个答案:

答案 0 :(得分:0)

再次感谢您的反馈,@ Brick Top。此代码从html中下拉订单号,总计,订单总额,运输成本,克重和Oz中的权重,并将它们写入以制表符分隔的文本文件,您可以在Excel中打开并轻松查看。

编辑:该脚本还根据订单的重量(以克为单位)计算出货类别。装运等级在出口档案的最后一栏中显示:

from decimal import *

html = open("html.txt").read()
out = open("legoShipping.txt", "w")

out.write("Order Number" + "\t" +
          "Grand Total (currency)" + "\t" +
          "Order Total (currency)" + "\t" +
          "Shipping Cost (currency)" + "\t" +
          "Order Weight (grams)" + "\t" +
          "Order Weight (oz.)" + "\t" +
          "Shipping Class" + "\n")

#split html on order number
legoOrders = html.split("Order #")

for order in legoOrders[1:]:
  orderNumber = order.split("<")[0]

  #get Grand Total
  grand = order.split("<TD>Grand&nbsp;Total:</TD>")[1].split('<TD ALIGN="RIGHT"><B>')[1].split("<")[0].split('&nbsp;')
  grandCurrency = grand[0]
  grandTotal = grand[1]

  #get Order Total
  orderTotalAndCurrency = order.split('<TD>Order Total:</TD>')[1].split('<TD ALIGN="RIGHT">')[1].split("<")[0].split('&nbsp;')
  orderCurrency = orderTotalAndCurrency[0]
  orderTotal = orderTotalAndCurrency[1]

  #get Shipping Cost
  shipping = order.split("<TD>Shipping:</TD>")[1].split('<TD ALIGN="RIGHT">')[1].split("<")[0].split('&nbsp;')
  shippingCurrency = shipping[0]
  shippingCost = shipping[1]

  #get Weights
  weightString = order.split('Estimated Weight of Order:</FONT></TD><TD ALIGN="RIGHT"><FONT CLASS="fv">')[1]
  splitWeightString = weightString.split('&nbsp;&nbsp;&nbsp;')
  splitStringFinal = splitWeightString[1].split("<")
  grams = splitStringFinal[0]
  ozs = weightString.split('&nbsp')[0]

  #convert grams to mathematical value
  gramsValue = Decimal(grams[:-1])

  #create default shipping class value. Set it to ""
  shippingClass = ""

  if gramsValue > 0:
    if gramsValue < 100:
      shippingClass = "A"

  if gramsValue >= 100:
    if gramsValue < 200:
      shippingClass = "B"

  out.write(str(orderNumber) + "\t" +
            str(grandTotal) + " (" + str(grandCurrency) + ")" + "\t" +
            str(orderTotal) + " (" + str(orderCurrency) + ")" + "\t" +
            str(shippingCost) + " (" + str(shippingCurrency) + ")" + "\t" +
            str(grams) + "\t" +
            str(ozs) + "\t" +
            str(shippingClass) + "\n")

OpenOffice Calc中的输出:

enter image description here