1
tension OP 用正则获取到相关内容...
|
2
whuhacker 2013-07-28 22:59:38 +08:00
如果是 DOM 中的元素,可以试下 PHP Simple HTML DOM Parser
看了下 warrantyPage.warrantycheck.displayProductInfo 是段 JS 里的代码,貌似只能自己手写正则表达式了。 |
3
bakac 2013-07-28 23:00:28 +08:00
用 pyquery库 你就能向jquery一样操作
|
4
bakac 2013-07-28 23:00:48 +08:00
修正 是phpquery
|
5
bakac 2013-07-28 23:02:30 +08:00
你那张似乎只能用正则
|
6
shiny 2013-07-28 23:03:00 +08:00
你想要哪一段代码?
|
7
tension OP @shiny 我想要这一段
<script type="text/javascript"> var warrantyPage; //instantiate warranty checker var warrantyChecker = new WarrantyChecker(); var hasErrors = false; Event.observe(window, 'load', function() { warrantyPage = new WCPage(); warrantyPage.warrantycheck.initialize(399994); warrantyPage.warrantycheck.hidePanel(); $('cookieSpinner').hide(); warrantyPage.warrantycheck.hideRow(' iPhone notactivated'); $('results').show(); warrantyPage.warrantycheck.showTitle('status'); var regTextKeyLong = '借助已验证的购买日期,Apple 可以快速找到您的产品并为您提供所需帮助。'; $('registration-text').update(regTextKeyLong); warrantyPage.setClassAndShow('registration', 'green', 'registration-true'); warrantyPage.warrantycheck.displayProductInfo('https://km.support.apple.com.edgekey.net/kb/securedImage.jsp?configcode=DWYL&size=72x72', 'Mac mini (Late 2012)', false,'C07KK317DWYL', false, '', 'C07KK317DWYL'); warrantyPage.warrantycheck.displayPHSupportInfo( true, '电话技术支持:有效', '在最初 90 天内,您的产品可享受免费的电话技术支持服务。<br/>预计到期日:20 September 2013<br/><a href="http://www.apple.com/support/country/index.html?dest=complimentary">关于免费支持服务的更多信息</a>', 'https://expresslane.apple.com/GetproductgroupList.do?serialno=C07KK317DWYL'); warrantyPage.warrantycheck.displayHWSupportInfo(true, '维修和服务保修情况:有效', '您的产品可享受 Apple 有限保修中的硬件维修和服务。<br/>预计到期日:21 June 2014<br/>注:在中国购买的 Mac 和 iPad 电脑产品中的所有主要部件均可享受中国相关法律规定的 2 年保修。在浙江省,消费者权益保护法赋予了消费者自购买台式电脑之日起 3 年的质量问题保修服务。<a href="http://www.apple.com.cn/support/warranties/">点按此处了解更多详细信息.</a><br/><a href="http://support.apple.com/kb/he44?viewlocale=zh_CN">了解 Apple 针对您产品的保修信息。</a>', 'https://selfsolve.apple.com/GetWarranty.do?sn=C07KK317DWYL'); warrantyPage.warrantycheck.displayEligibilityInfo('LI', true, '符合 AppleCare Protection Plan 条件', 'C07KK317DWYL', '获取 AppleCare Protection Plan,以将硬件产品的技术支持和硬件维修保修期限延长至 3 年(自购买之日算起)。', '/AgrOfferFlow.do','CHN','APP','I6l5YAkMK1j6vTnAm70jYg==', false); warrantyPage.warrantycheck.displayDisputeInfo('<div class="sosumi">如果您认为针对您的产品所显示的信息不正确,可<a href="https://selfsolve.apple.com/Dispute.do?transType=Warranty_Checker&sn=C07KK317DWYL" id="hardware-epop" target="_blank">在线提交购买凭证</a>或通过传真提交。验证保修时,需要您提供销售收据,因此请务必妥善保管该收据。无论注册与否,您的保修是一样的。</div>'); warrantyChecker.trackOmnitureResults(); }); </script> 并且把里面的部分内容 输出成函数 |
8
someFork 2013-07-28 23:22:23 +08:00
@tension 测试了
<?php $url = "https://selfsolve.apple.com/wcResults.do?num=0&sn=C07KK317DWYL"; $html = file_get_contents($url); $pattern = '/warrantyPage.warrantycheck.displayProductInfo\(\'.*\'\);/'; preg_match($pattern, $html, $matches); print_r($matches); ?> |
9
shiny 2013-07-28 23:28:28 +08:00
这种情况我更愿意使用 DOM 来含关键词的 script 标签。
https://gist.github.com/shiny/6098962 |
13
tension OP @shiny 例如
warrantyPage.setClassAndShow warrantyPage.warrantycheck.displayProductInfo warrantyPage.warrantycheck.displayPHSupportInfo warrantyPage.warrantycheck.displayHWSupportInfo warrantyPage.warrantycheck.displayEligibilityInfo warrantyPage.warrantycheck.displayDisputeInfo 这几组里的数据 都有用 |
14
shiny 2013-07-28 23:52:31 +08:00
@tension 那还是正则吧,更新了下gist,输出上面几组函数调用里的参数…… 还可以更精准地捕捉里面的HTML什么的…… 看自己的需要。
|
15
pubby 2013-07-28 23:56:14 +08:00
|
17
tension OP @shiny 其实我想最终得到的东西是
$registration-true = "registration-true"; $model = "Mac mini (Late 2012)"; $warranty = "true"; $warranty_status = "电话技术支持:有效"; $warranty_data = "September 20, 2013"; $tel_support = "true"; $tel_support_status = "维修和服务保修情况:有效"; $tel_support_data = "June 21, 2014"; 其实最终我想要的是这样... |
18
vigoss 2013-07-29 00:44:49 +08:00
明晚有空可以帮你整下,如果那时候还没解决的话.其实就是正则吧.
实在不行多正则两次就行了0 0.以前抓数据的时候我深刻感觉到如果写个牛逼的正则一次性所有数据都找到了. 自己还是分了两次..第一次把所有<li>拿到..第二次再分离里面的数据.. |
20
DKR 2013-07-29 10:57:38 +08:00
|