求PHP抓取代码... 采集代码 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
tension

求PHP抓取代码... 采集代码

  •  
  •   tension Jul 28, 2013 5599 views
    This topic created in 4667 days ago, the information mentioned may be changed or developed.
    请问,我想抓取此页面
    https://selfsolve.apple.com/wcResults.do?num=0&sn=C07KK317DWYL

    源代码 内有一段

    warrantyPage.warrantycheck.displayProductInfo

    相关的东西,我想抓取,该如何写呢?

    再@joyqi的指点下,

    $url='https://selfsolve.apple.com/wcResults.do?num=0&sn=C07KK317DWYL';
    $lines_string=file_get_contents($url);
    echo htmlspecialchars($lines_string);

    我用这个,下一步 截取我想要的信息
    20 replies    1970-01-01 08:00:00 +08:00
    tension
        1
    tension  
    OP
       Jul 28, 2013
    用正则获取到相关内容...
    whuhacker
        2
    whuhacker  
       Jul 28, 2013
    如果是 DOM 中的元素,可以试下 PHP Simple HTML DOM Parser
    看了下 warrantyPage.warrantycheck.displayProductInfo 是段 JS 里的代码,貌似只能自己手写正则表达式了。
    bakac
        3
    bakac  
       Jul 28, 2013
    用 pyquery库 你就能向jquery一样操作
    bakac
        4
    bakac  
       Jul 28, 2013
    修正 是phpquery
    bakac
        5
    bakac  
       Jul 28, 2013
    你那张似乎只能用正则
    shiny
        6
    shiny  
    PRO
       Jul 28, 2013
    你想要哪一段代码?
    tension
        7
    tension  
    OP
       Jul 28, 2013
    @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>

    并且把里面的部分内容 输出成函数
    someFork
        8
    someFork  
       Jul 28, 2013
    @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);


    ?>
    shiny
        9
    shiny  
    PRO
       Jul 28, 2013
    这种情况我更愿意使用 DOM 来含关键词的 script 标签。
    https://gist.github.com/shiny/6098962
    tension
        10
    tension  
    OP
       Jul 28, 2013
    @shiny 其实我不止一行数据需要拿出来...
    shiny
        11
    shiny  
    PRO
       Jul 28, 2013
    @tension 拿出的就是整个目标 script 里标签里的内容。如果说要具体哪行数据可以说明。
    tension
        12
    tension  
    OP
       Jul 28, 2013
    @shiny 这个输出的东西,我还是需要 再 格式化一遍才能用的
    tension
        13
    tension  
    OP
       Jul 28, 2013
    @shiny 例如
    warrantyPage.setClassAndShow
    warrantyPage.warrantycheck.displayProductInfo
    warrantyPage.warrantycheck.displayPHSupportInfo
    warrantyPage.warrantycheck.displayHWSupportInfo
    warrantyPage.warrantycheck.displayEligibilityInfo
    warrantyPage.warrantycheck.displayDisputeInfo

    这几组里的数据 都有用
    shiny
        14
    shiny  
    PRO
       Jul 28, 2013
    @tension 那还是正则吧,更新了下gist,输出上面几组函数调用里的参数…… 还可以更精准地捕捉里面的HTML什么的…… 看自己的需要。
    pubby
        15
    pubby  
       Jul 28, 2013
    @tension 要那几个函数的输入参数?
    1. 内容不太复杂可以用增则
    2. 内容复杂就把整段js拿出来,去掉无关js语句加上伪造一些相关的函数功能,放入node.js中跑出结果来
    tension
        16
    tension  
    OP
       Jul 29, 2013
    @shiny 恩,谢谢 这个可以精准的抓取到内容了,接下来就是 格式化有用的东西
    tension
        17
    tension  
    OP
       Jul 29, 2013
    @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";


    其实最终我想要的是这样...
    leveraging
        18
    leveraging  
       Jul 29, 2013
    明晚有空可以帮你整下,如果那时候还没解决的话.其实就是正则吧.


    实在不行多正则两次就行了0 0.以前抓数据的时候我深刻感觉到如果写个牛逼的正则一次性所有数据都找到了.
    自己还是分了两次..第一次把所有<li>拿到..第二次再分离里面的数据..
    tension
        19
    tension  
    OP
       Jul 29, 2013
    @vigoss 谢谢了...
    DKR
        20
    DKR  
       Jul 29, 2013
    About     Help     Advertise     Blog     API     FAQ     Solana     5800 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 75ms UTC 01:46 PVG 09:46 LAX 18:46 JFK 21:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86