现在工作方向已经越来越倾向于项目产品运营相关的东西。对线上运营也有了一定程度的了解。

配合一些技术性的操作,能极大的便利工作中的各种高难度任务,快速提升自我,积累丰富的经验和资源。

以近期制作LP为例,在没有任何经验的情况下,需要快速和设计沟通制作着陆页,中间遇到了一些经验上不足,于是到处找各种别人家的着陆页研究别人的思路和做法,积累一些活动着陆页,对工作是有比较大益处的。参考别人的东西越多,才能做出更厉害的东西出来,凡事尽量往极致上靠近。

于是花了一整天的时间,基于浏览器,制作了一个扒站工具,把看到的一些好一点的着陆页全部down到本地,快速浏览和研究学习。

市面上已经有很多扒站的工具,包括最原始的teleport,后来的都客扒站工具、模板小偷、网页小偷、网页提取助手什么的。基本上都使用过,基本上都不能完整的把CSS、脚本、图片有效下载回来,按我要的格式存放。

以我在新浪上发现的一个懒财网的着陆页为例:

我想要的是这样的结果。

着陆页名称为index.html,CSS,图片和JS分别给我归类存到指定的目录,再到根目录下面标记一个txt文档,告诉我当时这个着陆页我是哪个网址下载回来的。

最后做出来的程度的界面是这样的

做的非常粗糙,只有一个分析并抓取和一个C#的WebBrowser可以用。

程序会自动下载相关的数据,并存到相关的目录,生成需要的文件。

为什么不用普通的直接获取源代码的方式直接下载HTML呢。

1、是HTML里面解析相对路径和绝对路径非常 非常 非常麻烦,需要正则表达式一个个匹配,并替换成本地路径。

2、是一些情况下,浏览器匹配出来的结果或许会更精确一点,实现上应该是更简单的。

代码流程:

1、浏览器载入着陆页,等待载入完成。

2、遍历所有节点

图片,就下载,保存,并替换为本地路径,脚本同样,CSS同样。最后处理着陆页内嵌入的style格式的源码。

最后,打开CSS文件,用正则匹配图片连接并下载远程图片,替换CSS里面的图片地址。

贴上解析CSS里面的图片并下载到本地的代码。其余都是比较简单的。

        /// <summary>
/// 解析CSS源码里面的图片,下载,并转换为本地格式的链接
/// </summary>
/// <param name="content">CSS文件内容</param>
/// <param name="cssUrl">CSS文件路径,用于转换为图片绝对地址下载</param>
/// <returns></returns>
public string ParseImgInCSS(string content, string cssUrl = "")
{
Regex reg = new Regex(@"url\((.*?)\)", RegexOptions.IgnoreCase); content = reg.Replace(content, (match) =>
{
string imgUrl = match.Groups[1].Value;
imgUrl = imgUrl.Replace("'", "").Replace("\"", "");//替换'和双引号,因为URL匹配是可能带引号的
imgUrl = HtmlHelper.GetUrlRelative(cssUrl, imgUrl);//修复路径为绝对地址
if (!string.IsNullOrEmpty(imgUrl))
{
//远程图片下载保存到本地
var localImage = Path.Combine("images", HtmlHelper.GetFileNameInUrl(imgUrl));
DownloadHelper.DownloadFile(imgUrl, Path.Combine(SaveFolder, SiteFolder, localImage));//下载到本地
if (cssUrl.ToLower().IndexOf(".css") > -1)
{//代表是CSS文件,会存到CSS目录,需要使用相对地址
return @"url('../" + localImage.Replace("\\", "/") + @"')";
}
else
{//代表是页面内部的CSS,不需要切换为相对路径
return @"url('" + localImage.Replace("\\", "/") + @"')"; ;
}
}
return match.Value;
});
return content;
}

最后加上注释用了100行代码完成了整个扒站工具。

还有很多地方可以完善,不过已经可以投入使用。1分钟扒个几个站的着陆页是没问题了,准备抽空去各家p2p网站的百度推广扒他们的页了。。。

扒了10个LP,目录还没发现问题。要是有机会再包装一下出售。

会搞的人,可以自己玩玩,思路已经有了。

更多精彩内容,访问小五博客http://www.lingdonge.com

C#通过WebBrowser快速扒站思路积累大量着陆页列表的更多相关文章

  1. 【linux】扒站命令之利用wget快速扒站利用wget快速扒站

    在Linux下,通过一个命令就可以把整个站相关的文件全部下载下来. wget -r -p -k -np 参数说明: -r : 递归下载 -p : 下载所有用于显示 HTML 页面的图片之类的元素 -k ...

  2. PHPCMS快速建站系列之添加单页模版

    单页模板命名:page_xxx.html 以page_开头 在模版所在目录的config.php中添加配置项 'page_xxx.html' => '单网页', 也可以不在config中配置,不 ...

  3. 4种常用扒站工具(webzip、ha_TeleportPro、Offline Explorer、wget)

    许多开始做lead,EMU的新手,需要一个英文网站,找人定制费用太贵自己又不会技术的话,可以通过扒站来获得英文站,今天给大家介绍几种扒站工具: 1.HA_TeleportPro: Teleport P ...

  4. 用wget扒站时遇到电信劫持

    今天用wget扒下来一个html template的站. 挂在自己机器上后随便点什么,都出电信广告.仔细检查,我勒个去... 扒站过程中,刚好被电信打了劫,看看它给我下载下来的bootstrap.mi ...

  5. Python快速建站系列-Part.Three-注册和登录

    |版权声明:本文为博主原创文章,未经博主允许不得转载. 上一个Part已经给TSSS编好了一个简单的Web服务,网页的基础模版也写好了,那从这个Part开始就慢慢增加编写功能. 先写基础功能:注册和登 ...

  6. Python快速建站系列-Part.One-组装开发环境

    |版权声明:本文为博主原创文章,未经博主允许不得转载. 源代码都在github上:SmallStudyStation 现在是个demo,但回来会租个服务器,等功能完善了放到服务器上挂着,域名jusot ...

  7. @font-face扒站的步骤

    今天模仿百度首页手机版的时候遇到的@font-face的问题,现在整理一下. 问题:图中红色区域,在拷贝F12样式的时候,并没有出现这些小图标.        图1:百度的效果             ...

  8. 阿里云Ubuntu快速建站

    阿里云Ubuntu快速建站 有一个小笑话: 从前有个程序员遇到了一个问题.他想,没事,我懂,用线程就好了.现他有两个问题了. 本人小白,对网站部署什么都不懂,只是申请个阿里云服务器,把我的站点放上去. ...

  9. Uix Kit 快速建站前端开发套件-工具箱

    这个产品维护已经有一年了(由于业务需求不同,目前没有做中文版,产品本身是针对国外网站),自己本身是做UI出生,开发只是业余爱好,仅仅作为平时工作的需要.杂七杂八会一些前后端开发.并非职业码农! 我是一 ...

随机推荐

  1. configure mount nfs

    qemu-img convert -f raw -O qcow2 nix.img ruiynix.qcow2 1,yum createrepo

  2. C#深复制和浅复制

    本文在于巩固基础 我们来看看什么是深复制.浅复制: C#中对于数据的复制机制虽然简单但是容易让人误解.C#数据类型大体分为值类型(value type)与引用类型(reference type).对于 ...

  3. js中的数组和字符串的一些方法

    数组的一些方法: 1.join()和split()方法 <script type="text/javascript">var x;var a=new Array();a ...

  4. SQlSERVER生成唯一编号

    基数表-用来存储编号前缀和类型 建表如下 CREATE TABLE [dbo].[SerialNo]( [sCode] [varchar](50) NOT NULL, [sName] [varchar ...

  5. MSSQL 当前会话设置隔离级别与查询

    之前因为MySQL没有with(nolock)这种写法,于是想设置隔离级别,结果被坑. 直觉以为和MSSQL一样只要打set transaction isolation level xxx 就能搞定 ...

  6. java 获取本机ip及mac地址

    package com.achun.test; import java.net.Inet4Address;import java.net.Inet6Address;import java.net.In ...

  7. WCF契约之---服务契约 、数据契约、 消息契约

    本篇博文只是简单说下WCF中的契约的种类.作用以及一些简单的代码示例.在WCF中契约分为服务契约.数据契约和消息契约.下面对这几种契约进行简单的介绍. 服务契约 服务契约描述了暴露给外部的类型(接口或 ...

  8. vs 中 vim vax 快捷键

    高效率移动 在插入模式之外 基本上来说,你应该尽可能少的呆在插入模式里面,因为在插入模式里面VIM就像一个“哑巴”编辑器一样.很多新手都会一直呆在插入模式里面,因为这样易于使用.但VIM的强大之处在于 ...

  9. SQL Server 储存过程的output 参数

    要做的参数的回传一方面要做到有储存过程的配合,再一方面也要有调用方法的配合,也就是说错误的调用方法是没有办法把值回传的. 下面是例子 --1.储存过程方面的配合 create procedure db ...

  10. Noip2013心态调整

    决定成绩的,很多时候可能不是实力,而是心态,一年走来,承受着一次次失败,怀疑,背负着希望与压力,突然发现,只有拥有过,失去过,才可以真正去超越,我希望完成我的梦想,但是唯有放下梦想,才可以走向它. 心 ...