从网页中提取数据以供使用

时间:2013-11-23 18:02:05

标签: php python html

为了给出一些背景知识,我在网上出售乐高配件。下订单时的订单总额取决于您购买的零件的价格和运费。

运费根据订单的重量和运输国家而有所不同。

我不是技术爱好者,这就是为什么我需要一些帮助。我知道基本知识,但不是很多,虽然我很乐意学习,并且在来到这里之前我已经尝试了几天。

订单页面的源代码,唯一可以看到权重的地方是:

<FONT CLASS="fv">Estimated Weight of Order:</FONT></TD><TD ALIGN="RIGHT"><FONT CLASS="fv">2.17oz&nbsp;&nbsp;&nbsp;61.44g</FONT>

每个订单都是一样的。

所以,我知道我想要的数据在哪里。

我需要帮助的是,编写一些从这个网页中提取数据的东西(比如说它位于一个名为order.com/order.asp的网页内,而且该文档包含除了权重之外的一堆其他数据)和导出基于其输入的重量的运费价格。我不知道你是否可以用PHP或Python等来做到这一点。

我会在我的服务器上...说一张基于重量的运费的表格。现在,我需要的是将order.com网站上的那些数据带入我自己的服务器。 (在我自己的服务器上处理我拍摄的重量数据,将其与运费相匹配,提取发票等)。重量数据在订单页面中,总是在我在问题上发布的那一行上。我刚看过网络抓取。也许有些PHP会查看订单页面,直到找到具有权重的行,然后拉出重量?

很多,很多,非常感谢你的帮助,如果我听起来太不知情,我会事先道歉,我就是这样。我真的需要一个详细的解释。

杰拉德

* TL; DR *两个网页。一个在我的服务器中,一个不在。不在我的服务器(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。

感谢。


这将是我需要承担权重的示例页面的源代码。删除了一些敏感信息。

<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">



function killImage(imgName){

   if (document.images){

    document.images[imgName].src="/images/noImage.gif"

   }

}



function killImageM(imgName){

   if (document.images){

    document.images[imgName].src="/images/noImageM.gif"

   }

}



</SCRIPT>

<HTML>

<HEAD>

 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">

 <META HTTP-EQUIV="IMAGETOOLBAR" CONTENT="NO">

 <LINK REL="STYLESHEET" TYPE="text/css" HREF="/stylesheet.css?13">

 <STYLE TYPE="text/css">body { margin: 15 auto; }</STYLE>

 <SCRIPT TYPE="text/javascript" LANGUAGE="javascript" SRC="/js/getAjax.js"></SCRIPT>

 <SCRIPT TYPE="text/javascript" LANGUAGE="javascript" SRC="/lytebox/lytebox.js?10"></SCRIPT>

 <LINK REL="STYLESHEET" HREF="/lytebox/lytebox.css?13" TYPE="text/css" MEDIA="screen" />

</HEAD>

<BODY BGCOLOR="#666666">

<CENTER>

<TABLE WIDTH="680" CELLPADDING="10" CELLSPACING="0"><TR><TD BGCOLOR="#FFFFFF">

<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0"><TR>

 <TD><A HREF="/index.asp"><IMG SRC="/images/logowhite.gif" WIDTH="200" HEIGHT="60" ALIGN="ABSMIDDLE" BORDER="0"></A>&nbsp;</TD>

 <TD> <FONT SIZE="+3">Order #3953198</FONT></TD></TR></TABLE><P><FONT FACE="Tahoma,Arial" SIZE="2">

<HR NOSHADE SIZE="1" COLOR="#000000"><B>Order Summary</B><HR NOSHADE SIZE="1" COLOR="#000000">



<TABLE WIDTH="100%" CELLPADDING="5" CELLSPACING="0" BORDER="0" BGCOLOR="#EEEEEE"><TR><TD WIDTH="60%" VALIGN="TOP">

<TABLE WIDTH="100%" BORDER="0" CELLPADDING="1" CELLSPACING="0" CLASS="ta">

 <TR>

  <TD WIDTH="125">Order Date:</TD>

  <TD>Nov 20, 2013 17:12</TD>

 </TR>



 <TR>

  <TD>Payment By:</TD>

  <TD>PayPal.com</TD>

 </TR>



 <TR>

  <TD>Payment In:</TD>

  <TD>Euro</TD>

 </TR>



 <TR VALIGN="TOP">

  <TD>Order Status:</TD>

  <TD>Shipped</TD>

 </TR>

 <TR>

  <TD>Changed:</TD>

  <TD>Nov 22, 2013 14:15</TD>

 </TR>

 <TR>

  <TD NOWRAP>Total Items:</TD>

  <TD>24</TD>

 </TR>

 <TR>

  <TD NOWRAP>Unique Items (Lots):</TD>

  <TD>2</TD>

 </TR>

 <TR>

  <TD NOWRAP>Invoiced:</TD>

  <TD>Nov 21, 2013 08:56</TD>

 </TR>



  <TR VALIGN="TOP">

  <TD NOWRAP>Shipping Method:</TD>

  <TD>Registered<BR><FONT CLASS="fv">By default, with tracking number and insured up to 30 euros only.</FONT></TD>

  </TR>





</TABLE>



</TD><TD WIDTH="40%" VALIGN="TOP">



<TABLE WIDTH="100%" BORDER="0" CELLPADDING="1" CELLSPACING="0" CLASS="ta">

 <TR>

  <TD>Order Total:</TD>

  <TD ALIGN="RIGHT">EUR&nbsp;8.92</TD>



 </TR>

 <TR>

  <TD>Shipping:</TD>

  <TD ALIGN="RIGHT">EUR&nbsp;4.85</TD>



 </TR>

 <TR>

  <TD>Insurance:</TD>

  <TD ALIGN="RIGHT">EUR&nbsp;0.00</TD>



 </TR>

 <TR>

  <TD>Additional&nbsp;Charges&nbsp;1:</TD>

  <TD ALIGN="RIGHT">EUR&nbsp;0.00</TD>



 </TR>

 <TR>

  <TD>Additional&nbsp;Charges&nbsp;2:</TD>

  <TD ALIGN="RIGHT">EUR&nbsp;0.00</TD>



 </TR>

 <TR>

  <TD>Credit:</TD>

  <TD ALIGN="RIGHT">EUR&nbsp;0.00</TD>



 </TR>



 <TR>

  <TD>Grand&nbsp;Total:</TD>

  <TD ALIGN="RIGHT"><B>EUR&nbsp;13.77</TD>



 </TR>



 <TR>

  <TD>Orders&nbsp;in&nbsp;this&nbsp;Store:</TD>

  <TD ALIGN="RIGHT">1</TD>

 </TR>



</TABLE>



</TD></TR>

</TABLE><HR NOSHADE SIZE="1" COLOR="#000000"><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%" CLASS="ta"><TR><TD><B>Items in Order</B></TD></TR></TABLE><HR NOSHADE SIZE="1" COLOR="#000000"><TABLE WIDTH="100%" BORDER="0" CELLSPACING="1" CELLPADDING="3" CLASS="ta"><TR BGCOLOR="#C0C0C0"><TD><B>Image</B></TD><TD ALIGN="CENTER"><B>Condition</B></TD><TD><B>Item Description</B></TD><TD ALIGN="RIGHT"><B>Lots</B></TD><TD ALIGN="RIGHT"><B>Qty</B></TD><TD ALIGN="RIGHT"><B>Left</B></TD><TD ALIGN="RIGHT"><B>Price</B></TD><TD ALIGN="RIGHT"><B>Total</B></TD><TD ALIGN="RIGHT"><B>Weight</B></TD></TR><TR><TD COLSPAN="2" BGCOLOR="#C0C0C0"><B>Batch #1</B></TD><TD COLSPAN="7" BGCOLOR="#C0C0C0"><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%"><TR><TD><FONT CLASS="fv">Submitted on Nov 20, 2013 17:12</TD><TD ALIGN="RIGHT"><A HREF="/orderDetail.asp?ID=3953198&viewItems=Y&orderBatchID=1"><IMG SRC="/images/printer16.png" WIDTH="16" HEIGHT="16" BORDER="0" ALT="Print Batch" TITLE="Print Batch"></A><IMG SRC="/images/dot.gif" WIDTH="5" HEIGHT="1"><IMG SRC="/images/invoice16YC.gif" WIDTH="16" HEIGHT="16" ALT="Batch Invoiced" TITLE="Batch Invoiced"></TD></TR></TABLE></TD></TR><TR BGCOLOR="FFFFFF"><TD HEIGHT="60"><CENTER><A ID='imgLink0' HREF='/catalogItemPic.asp?P=60208' REL='blcatimg'><IMG ALT="Lot ID: 48295541  Part No: 60208  Name: Wheel 31mm D. x 15mm Technic" TITLE="Lot ID: 48295541 Part No: 60208  Name: Wheel 31mm D. x 15mm Technic"  BORDER='0'  WIDTH='80' HEIGHT='60' SRC='http://img.bricklink.com/P/86/60208.gif' NAME='img0' ID='img0' onError="killImage('img0');"></A><BR><FONT FACE='Tahoma,Arial' SIZE='1'>*</FONT></TD><TD ALIGN="CENTER"><B>New</B></TD><TD><SPAN CLASS="u"><A HREF="/catalogItem.asp?P=60208"><FONT COLOR="#000000">Light Bluish Gray Wheel 31mm D. x 15mm Technic </FONT></A></SPAN><BR><FONT CLASS="fv">AB4</FONT></TD><TD ALIGN="RIGHT">&nbsp;</TD><TD ALIGN="RIGHT">12</TD><TD ALIGN="RIGHT">X</TD><TD ALIGN="RIGHT">EUR&nbsp;0.11</TD><TD ALIGN="RIGHT">EUR&nbsp;1.32</TD><TD ALIGN="RIGHT"><FONT CLASS="fv">38.16g</TD></TR><TR BGCOLOR="EEEEEE"><TD HEIGHT="60"><CENTER><A ID='imgLink1' HREF='/catalogItemPic.asp?P=6179' REL='blcatimg'><IMG ALT="Lot ID: 49014568  Part No: 6179  Name: Tile, Modified 4 x 4 with Studs on Edge" TITLE="Lot ID: 49014568 Part No: 6179  Name: Tile, Modified 4 x 4 with Studs on Edge"  BORDER='0'  WIDTH='80' HEIGHT='60' SRC='http://img.bricklink.com/P/86/6179.gif' NAME='img1' ID='img1' onError="killImage('img1');"></A><BR><FONT FACE='Tahoma,Arial' SIZE='1'>*</FONT></TD><TD ALIGN="CENTER"><B>New</B></TD><TD><SPAN CLASS="u"><A HREF="/catalogItem.asp?P=6179"><FONT COLOR="#000000">Light Bluish Gray Tile, Modified 4 x 4 with Studs on Edge </FONT></A></SPAN><BR><FONT CLASS="fv">AJ2</FONT></TD><TD ALIGN="RIGHT">&nbsp;</TD><TD ALIGN="RIGHT">12</TD><TD ALIGN="RIGHT">X</TD><TD ALIGN="RIGHT">EUR&nbsp;0.633</TD><TD ALIGN="RIGHT">EUR&nbsp;7.596</TD><TD ALIGN="RIGHT"><FONT CLASS="fv">23.28g</TD></TR><TR BGCOLOR="#DDDDDD"><TD COLSPAN="3"><B>Batch Total:</B></TD><TD ALIGN="RIGHT">2</TD><TD ALIGN="RIGHT">24</TD><TD></TD><TD>&nbsp;</TD><TD ALIGN="RIGHT">EUR&nbsp;8.92</TD><TD ALIGN="RIGHT"><FONT CLASS="fv">61.44g</TD></TR><TR BGCOLOR="#C0C0C0"><TD COLSPAN="3"><B>Order Total:</B></TD><TD ALIGN="RIGHT">2</TD><TD ALIGN="RIGHT">24</TD><TD></TD><TD>&nbsp;</TD><TD ALIGN="RIGHT">EUR&nbsp;8.92</TD><TD ALIGN="RIGHT"></TD></TR><TR><TD COLSPAN="10" ALIGN="RIGHT" BGCOLOR="#EEEEEE"><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%"><TR><TD><FONT CLASS="fv">Estimated Weight of Order:</FONT></TD><TD ALIGN="RIGHT"><FONT CLASS="fv">2.17oz&nbsp;&nbsp;&nbsp;61.44g</FONT></TD></TR></TABLE></TD></TR></TABLE><TABLE WIDTH="100%" BORDER="0" CELLPADDING="1" CELLSPACING="0" CLASS="ta"><TR><TD COLSPAN="2" CLASS="fv" ALIGN="RIGHT"><A HREF="/contact.asp?orderID=3953198">Contact your buyer about this order</A><BR>&nbsp;</TD></TR></TABLE><HR NOSHADE SIZE="1" COLOR="#000000"><FONT CLASS="fv"><CENTER>This order will be purged from the BrickLink website on May 20, 2014.</CENTER></FONT></TABLE><FONT CLASS="fv"><P><CENTER><A HREF="Javascript:window.history.go(-1)"><FONT COLOR="#FFFFFF">Back to Orders</FONT></A> | <A HREF="/orderDetail.asp?ID=3953198&viewChk=Y"><FONT COLOR="#FFFFFF">Show Temporary Checkboxes</FONT></A> | <A HREF="/orderDetail.asp?ID=3953198&viewCategory=Y"><FONT COLOR="#FFFFFF">Show Categories</FONT></A> | <A HREF="/orderDetail.asp?ID=3953198&viewGB=N"><FONT COLOR="#FFFFFF">Consolidate Batches</FONT></A> | <A HREF="/orderSettings.asp"><FONT COLOR="#FFFFFF">My Settings</FONT></A><P><A HREF="orderDetail.asp?ID=3953198&viewRemain=N"><FONT COLOR="#FFFFFF">Hide Qty Left in My Inventory</FONT></A> | <A HREF="orderDetail.asp?ID=3953198&viewWeight=N"><FONT COLOR="#FFFFFF">Hide Item Weight</FONT></A> | <A HREF="orderDetail.asp?ID=3953198&viewCost=Y"><FONT COLOR="#FFFFFF">Show My Cost</FONT></A> | <A HREF="orderDetail.asp?ID=3953198&viewItems=Y"><FONT COLOR="#FFFFFF">Show Only Items in Order</FONT></A> | <A HREF="orderEdit.asp?ID=3953198"><FONT COLOR="#FFFFFF">Edit Order</FONT></A>

1 个答案:

答案 0 :(得分:1)

在不查看您想要抓取的页面的情况下编写完整的代码有点困难,但您应该能够使用以下代码来获得您想要的内容。下面的代码读入名为“html.txt”的文件,查找该文本文件中的所有订单,找到以oz和克为单位的总权重值,并将该数据写入名为foundWeights.txt的输出文件。要运行代码,只需将html保存在名为“html.txt”的文本文件中,将下面的代码保存在名为“findweights.py”的文件中,然后将这两个文件放在同一个文件夹中。然后,打开一个shell或终端窗口,导航到该文件夹​​,然后键入“python findweights.py”,文本文件会立即显示在同一文件夹中,其中包含您的数据。

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"

Outfile以制表符分隔(订单号,克,盎司):

3953198 61.44g  2.17oz