业余PHP选手上线了


昨夜2020年3月19日 抛弃我上网课的时间,帮了一个正在学js的人做东西
起初真的只是js,但是他想要通过js修改iframe内的内容,但是iframe的内容不是自己网站
找我想要实现,虽然我知道跨域修改不可能实现,但是我还是帮他试了水 但是在他一再请求+我的百度之下
思路

网站内容
酷安网
酷安网

我想到可以用php抓取网站代码 因为他最初目的就是去除 iframe内的广告,但是js跨域无法操作
php直接抓取网站代码又没有了css样式,包括他想要的点击图片后 图片放大到幻灯片模式 和下载图片的功能都没有了
但是后期给他补上(我凭啥啊)又麻烦 我就选择了用仿站小工具,下载了网页,删除了广告代码,用php抓取了中间的内容
替换掉了原本的内容,通过url get url进行显示 从而去除广告 以下是代码记录
[scode type="yellow"]以下为不全面代码[/scode]
[hide]

 <?php 
function getWebDiv($div_id, $url = false, $data = false)
{
    if ($url !== false) {
        $data = file_get_contents($url);
    }
    preg_match_all('/<div/i', $data, $pre_matches, PREG_OFFSET_CAPTURE);
    preg_match_all('/<\\/div/i', $data, $suf_matches, PREG_OFFSET_CAPTURE);
    $hit = strpos($data, $div_id);
    if ($hit == -1) {
        return false;
    }
    $divs = array();
    foreach ($pre_matches[0] as $index => $pre_div) {
        $divs[(int) $pre_div[1]] = 'p';
        $divs[(int) $suf_matches[0][$index][2]] = 's';
    }
    $sort = array_keys($divs);
    asort($sort);
    $count = count($pre_matches[0]);
    foreach ($pre_matches[0] as $index => $pre_div) {
        if ($pre_matches[0][$index][3] < $hit && $hit < $pre_matches[0][$index + 1][4]) {
            $deeper = 0;
            while (array_shift($sort) != $pre_matches[0][$index][5] && $count--) {
                continue;
            }
            foreach ($sort as $key) {
                if ($divs[$key] == 'p') {
                    $deeper++;
                } else {
                    if ($deeper == 0) {
                        $length = $key - $pre_matches[0][$index][6];
                        break;
                    } else {
                        $deeper--;
                    }
                }
            }
            $hitDivString = substr($data, $pre_matches[0][$index][7], $length) . '</div>';
            break;
        }
    }
    return $hitDivString;
}
if (isset($_GET['url'])) {
    echo getWebDiv('id="feed-detail"', $_GET['url']);
}

[/hide]

最终实现效果

上方的php代码只是抓取网页部分内容用的,实际运用上需要补上网站css js等
包括一些抓取过多的东西 也需要 display:none; 来实现
getWebDiv('id="feed-detail"',$_GET['url']);
中id="xxxx"是获取网页中div块的id 你也可以改成 class=""
这点类似于Jq的获取元素,实际上php有个PHP Simple HTML DOM Parser,但是年代久远,作者网站已经打不开了
上述代码也是大佬简化出来的

结尾

多百度,多百度啊!

对比

[tabs]
[tab name="修改前" active="true"]

前

[/tab]
[tab name="修改后"]
后

[/tab]
[/tabs]

标签: php, iframe, 代码, url, 用仿站

2 条评论

  1. KKMC

    美女小姐姐 /色o(*////▽////*)q

  2. kim

添加新评论

文章目录