
htmlunit抓取动态网页
操作方法:java爬虫工具htmlunit爬取静动态示例(附带亲测可用所有jar包)
网站优化 • 优采云 发表了文章 • 0 个评论 • 113 次浏览 • 2022-09-23 19:12
本文提供的所有jar包均非maven导入。您需要自己了解如何导入 pom。
抓取静态页面
爬取静态页面的基础包:htmlunit基础jar包
有些人可能还需要这两个包:
jetty-websocket.jar
jsoup.jar
以上所有jar包都导入后,来hello word。
public static void main(String[] args) throws IOException {
// 实例化Web客户端
WebClient webClient = new WebClient();
// 爬取https网站需要设置为true
webClient.getOptions().setUseInsecureSSL(true);
// 解析获取页面
HtmlPage page = webClient.getPage("https://www.baidu.com");
// 获取Html
System.out.println("网页html:" + page.asXml());
System.out.println("====================");
// 获取文本
System.out.println("网页文本:" + page.asText());
}
到目前为止,以上功能可以抓取静态页面。绝对没问题。
抓取动态页面
爬取动态页面基础包:htmlunit爬取动态页面jar包
爬取动态界面示例演示
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;
import java.util.logging.Level;
public class GetSongDemo {
@Test
public void show() throws Exception {
readHtml("https://y.qq.com/n/yqq/song/00 ... 6quot;);
}
public static void readHtml(String url) throws Exception {
// 不显示异常日志
LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log",
"org.apache.commons.logging.impl.NoOpLog");
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit")
.setLevel(Level.OFF);
java.util.logging.Logger.getLogger("org.apache.commons.httpclient")
.setLevel(Level.OFF);
WebClient wc = new WebClient(BrowserVersion.BEST_SUPPORTED);
<p>
wc.setJavaScriptTimeout(10000);
//接受任何主机连接 无论是否有有效证书
wc.getOptions().setUseInsecureSSL(true);
//设置支持javascript脚本
wc.getOptions().setJavaScriptEnabled(true);
//js运行错误时不抛出异常
wc.getOptions().setThrowExceptionOnScriptError(false);
//设置连接超时时间
wc.getOptions().setTimeout(100000);
wc.getOptions().setDoNotTrackEnabled(false);
//当HTTP的状态非200时是否抛出异常
wc.getOptions().setThrowExceptionOnFailingStatusCode(false);
wc.getOptions().setActiveXNative(false);
//是否启用CSS
wc.getOptions().setCssEnabled(false);
//很重要,设置支持AJAX
wc.setAjaxController(new NicelyResynchronizingAjaxController());
HtmlPage page = wc.getPage(url);
Thread.sleep(10000);
System.out.println(page.asXml());
System.out.println(page.asText());
}
}</p>
技巧:如何爬取动态网页的数据?Python实战案例(python爬虫动态数据获取)
如何从动态网页抓取数据? Python实战案例(python爬虫动态数据获取)
前言
一、什么是动态网页
所谓动态网页是指相对于静态网页的一种网页编程技术。对于静态网页,随着html代码的生成,页面的内容和显示效果基本不会改变——除非你修改了页面代码。动态网页并非如此。虽然页面代码没有改变,但是显示的内容会随着时间、环境或数据库操作的结果而改变。 ——来源百度百科
动态网页具有工作量减少、内容更新快、可完成功能多等特点。
二、什么是 AJAX
随着人们对动态网页加载速度的要求越来越高,AJAX 技术应运而生,并成为许多网站的首选。 AJAX 是一种用于创建快速和动态网页的技术,它通过在后台与服务器交换少量数据来实现网页的异步更新。这意味着无需重新加载整个网页即可更新网页的某些部分。
三、如何爬取AJAX动态加载网页
1.解析接口
只要有数据发送,就一定有请求发送到服务器。我们只需要找出它悄悄加载的页面的真实请求。特点:爬取速度快,爬取数据干净,部分网站解析困难。
2.硒
什么是硒?它最初是一个自动化测试工具,但已经被广泛的用户爬取。是一个可以用代码操作浏览器的工具,比如控制浏览器的下滑,模拟鼠标点击等。特点:代码比较简单,爬取速度慢,ip容易被封.
项目实践
一、分析界面
既然如此,我们来启动爬虫的正确姿势,先用解析接口的方法来写爬虫。 查看全部
操作方法:java爬虫工具htmlunit爬取静动态示例(附带亲测可用所有jar包)
本文提供的所有jar包均非maven导入。您需要自己了解如何导入 pom。
抓取静态页面
爬取静态页面的基础包:htmlunit基础jar包
有些人可能还需要这两个包:
jetty-websocket.jar
jsoup.jar
以上所有jar包都导入后,来hello word。
public static void main(String[] args) throws IOException {
// 实例化Web客户端
WebClient webClient = new WebClient();
// 爬取https网站需要设置为true
webClient.getOptions().setUseInsecureSSL(true);
// 解析获取页面
HtmlPage page = webClient.getPage("https://www.baidu.com");
// 获取Html
System.out.println("网页html:" + page.asXml());
System.out.println("====================");
// 获取文本
System.out.println("网页文本:" + page.asText());
}
到目前为止,以上功能可以抓取静态页面。绝对没问题。
抓取动态页面
爬取动态页面基础包:htmlunit爬取动态页面jar包
爬取动态界面示例演示

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;
import java.util.logging.Level;
public class GetSongDemo {
@Test
public void show() throws Exception {
readHtml("https://y.qq.com/n/yqq/song/00 ... 6quot;);
}
public static void readHtml(String url) throws Exception {
// 不显示异常日志
LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log",
"org.apache.commons.logging.impl.NoOpLog");
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit")
.setLevel(Level.OFF);
java.util.logging.Logger.getLogger("org.apache.commons.httpclient")
.setLevel(Level.OFF);
WebClient wc = new WebClient(BrowserVersion.BEST_SUPPORTED);
<p>

wc.setJavaScriptTimeout(10000);
//接受任何主机连接 无论是否有有效证书
wc.getOptions().setUseInsecureSSL(true);
//设置支持javascript脚本
wc.getOptions().setJavaScriptEnabled(true);
//js运行错误时不抛出异常
wc.getOptions().setThrowExceptionOnScriptError(false);
//设置连接超时时间
wc.getOptions().setTimeout(100000);
wc.getOptions().setDoNotTrackEnabled(false);
//当HTTP的状态非200时是否抛出异常
wc.getOptions().setThrowExceptionOnFailingStatusCode(false);
wc.getOptions().setActiveXNative(false);
//是否启用CSS
wc.getOptions().setCssEnabled(false);
//很重要,设置支持AJAX
wc.setAjaxController(new NicelyResynchronizingAjaxController());
HtmlPage page = wc.getPage(url);
Thread.sleep(10000);
System.out.println(page.asXml());
System.out.println(page.asText());
}
}</p>
技巧:如何爬取动态网页的数据?Python实战案例(python爬虫动态数据获取)
如何从动态网页抓取数据? Python实战案例(python爬虫动态数据获取)
前言
一、什么是动态网页
所谓动态网页是指相对于静态网页的一种网页编程技术。对于静态网页,随着html代码的生成,页面的内容和显示效果基本不会改变——除非你修改了页面代码。动态网页并非如此。虽然页面代码没有改变,但是显示的内容会随着时间、环境或数据库操作的结果而改变。 ——来源百度百科

动态网页具有工作量减少、内容更新快、可完成功能多等特点。
二、什么是 AJAX
随着人们对动态网页加载速度的要求越来越高,AJAX 技术应运而生,并成为许多网站的首选。 AJAX 是一种用于创建快速和动态网页的技术,它通过在后台与服务器交换少量数据来实现网页的异步更新。这意味着无需重新加载整个网页即可更新网页的某些部分。
三、如何爬取AJAX动态加载网页
1.解析接口
只要有数据发送,就一定有请求发送到服务器。我们只需要找出它悄悄加载的页面的真实请求。特点:爬取速度快,爬取数据干净,部分网站解析困难。

2.硒
什么是硒?它最初是一个自动化测试工具,但已经被广泛的用户爬取。是一个可以用代码操作浏览器的工具,比如控制浏览器的下滑,模拟鼠标点击等。特点:代码比较简单,爬取速度慢,ip容易被封.
项目实践
一、分析界面
既然如此,我们来启动爬虫的正确姿势,先用解析接口的方法来写爬虫。
聚焦爬虫原理及其金融风控运用
网站优化 • 优采云 发表了文章 • 0 个评论 • 275 次浏览 • 2022-05-06 21:01
导读
马云说,大数据时代来了。现在太多互联网公司都在做大数据,每个公司的数据来源都不止一个,其中占比重较大的一个数据源非网络爬虫莫属。然而不同的公司格局业务背景不同,所需要的数据类型也就不同。不同于搜索网站所用的通用爬虫,聚焦爬虫开始越来越多的被人们提起。
目录
1. 聚焦爬虫的原理
2. 聚焦爬虫的发展
3. 爬虫在互联网金融领域应用
4. 结语
1.聚焦爬虫的原理
1.1概念
聚焦爬虫,又称主题爬虫(或专业爬虫),是“面向特定主题”的一种网络爬虫程序。它与我们通常所说的爬虫(通用爬虫)的区别之处就在于,聚焦爬虫在实施网页抓取时要进行主题筛选。它尽量保证只抓取与主题相关的网页信息。
1.2 聚焦爬虫的分类
聚焦爬虫主要分为两大类。一类是浅聚焦爬虫,所谓浅聚焦爬虫是指,爬虫程序抓取特定网站的的所有信息。其工作方式和通用爬虫几乎一样,唯一的区别是种子URL的选定确定了抓取内容的一致,其核心是种子URL的选择。另一类是深聚焦爬虫,深聚焦爬虫是指在海量的不同内容网页中,通过主题相关度算法选择主题相近的URL和内容进行爬取。其核心是如何判断所爬取的URL和页面内容是与主题相关的。
关系如下:
由图可见,浅聚焦爬虫可以看成是将通用爬虫局限在了一个单一主题的网站上,因此我们通常所说的聚焦爬虫大多是指深聚焦爬虫。
1.2.1 浅聚焦爬虫
浅聚焦爬虫从一个或若干初始网页的URL开始,(例如分类信息网)获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
其工作流程如图:
可见浅聚焦爬虫的基本原理跟通用爬虫的基本原理是一样的,其特点是选定种子URL,例如,要抓取招聘信息,可以将招聘网站的URL作为种子URL。用主题网站保证了抓取内容的主题一致。
1.2.2 深聚焦爬虫
深聚焦爬虫最主要的特点是主题一致性。然而在浩如烟海的互联网大数据中要保证所抓取的数据主题一致并不是一件简单的事情。针对不同的数据需求,这其中需要的策略和方式并没有统一的解答。在这里不说具体的解决方法,只讨论一下常见的解决思路。
一、针对页面内容
这种解决方法是不管页面的主题是什么,先将页面爬取下来。对页面进行简单的去噪后,利用主题提取策略对处理后的页面内容进行主题提取,最后对比设定好的主题,如果主题一致,或在一定的阀值内,则保存页面进一步进行数据清洗。若主题偏差超过一点阀值,则直接丢弃页面。
这种方式的优点是链接页面全覆盖,不会出现数据遗漏。但是缺点也十分致命,那就是全覆盖的页面,很大一部分是与主题无关的废弃页面,这极大的拖慢了爬虫爬取数据的速度。到后期,爬取数据的速度将是无法接受的。
二、针对URL
上面介绍了浅聚焦爬虫的核心是选定合适的种子URL,这些种子URL主要是主题网站的入口URL。
互联网上的网站一般都是有固定主题的,并且同一网站中同一主题的页面URL,都有一定的规律可循。由此,通过URL预测页面主题的思路也就自然而生了。此外,页面中绝大部分超链接都是带有锚文本的,而锚文本基本可以看做是对目标页面的概括描述。结合对URL的分析和对锚文本的分析,对目标页面进行主题预测的正确率也就相当可观了。
然而,这种预测结果并不能完全保证丢弃的URL都是与主题无关的,因此会有一些遗漏。同时,这种方式也无法确保通过预测的页面都是与主题相关的,因此需要对通过的预测的URL页面进行页面内容主题提取,再对比与设定的主题做出取舍。
通过上面的分析,得出一般的解决方法。就是先通过URL分析,丢弃部分URL。下载页面后,对页面内容进行主题提取,对比预设定的主题做取舍。最后进行数据清洗。
1.3架构
深聚焦爬虫的一般结构如下图:
六个主要的组成部分【控制中心】【下载模块】【抽取模块】【清洗模块】【消重模块】【资源模块】
控制模块:控制模块由程序出入口、下载调度策略、抽取调度策略、清洗调度策略和URL消重调度策略组成。
下载模块:根据控制中心传过来的URL,IP,COOKIE等下载资源下载页面,并将下载结果返回给控制中心。
抽取模块:接受控制中心下发的页面源代码和抽取指标,根据抽取指标对源代码进行抽取,并将抽取结果返回控制中心。
清洗模块分为文本清洗和URL清洗,文本清洗根据预设的主题以及相对应的主题相关度算法,决定是舍弃文本,还是将文本保存入库。URL清洗是根据URL分析结果,预测当前URL所链接的页面是否与主题相关,若相关则将URL返回控制中心,反之丢弃此URL。
URL消重模块:针对有些主题突出的页面被许多页面链接,从而导致大量重复下载此页面造成资源浪费和数据质量低下的情况,调用消重模块将重复的URL丢弃,将不重复的URL返回到下载资源模块的URL队列中。
资源模块:保存有下载所需要的所有资源,包括代理IP,COOKIE,URL等信息。
2. 聚焦爬虫的发展
大数据时代,对数据的多样性和针对性要求越来越高。随之爬虫的架构方式也更加灵活多变。比较常见的开源爬虫框架有Crawler4j、WebMagic、WebCollector、scrapy等。另一方面,针对爬虫的抓取,被抓取网站也制定了相应的防爬虫措施。常见的防爬虫方式有如下几种:
一、针对频繁访问网站的IP设定访问限制。这是最常见的一种放爬虫方式,具体体现是,在一个单位时间内,同一个IP的请求数量达到了网站设计的阀值,这个IP就被限制访问。面对这种情况,可以制定适当的IP访问策略。
二、使用js和ajax技术的动态页面。这样的网页源代码中并没有包含所需的数据,数据包裹存在于二次请求的返回文档中。针对这样的页面,可以分析请求过程,提取二次请求的URL,进而得到想要的数据。
三、其他情况:随着互联网的不断发展,出现了各种各样的防爬虫方式。这就需要人们根据实际情况,针对性的解决问题。比如使用模拟浏览器(htmlunit,selenium)技术等。
总之,没有一成不变的互联网,就没有一成不变的爬虫,拥抱变化,才能让爬虫爬的更远。
3.爬虫在互联网金融领域的应用
聚焦爬虫作为数据的主要来源之一,下面就说说聚焦爬虫的应用场景,以我所就职的普惠金融信息服务(上海)有限公司(后面简称普惠)为例。
3.1、网贷行业的数据驱动策略
数据驱动,就是得到前来贷款的客户的指定数据,根据这些数据以及相应的一套算法策略,给客户定义一个标签。借贷部门根据客户的标签决定是否贷款给该客户以及贷多少给该客户。通过这种定义标签的方式,有效阻止大部分骗贷的发生,从而规避风险。
那么,网贷平台如何运用大数据判断客户的信用的呢?粗略的分为两个方面:
1、查看这个人的购物习惯,客户提供的账单流水信息等。这种方法相信一个人若是经常在网上购物、有详细的银行账单并且有正常的通话记录,那么这个人是一个正常的且有一定的经济能力的人。也就是说,这样的人是有能力还贷款的。相对于发达国家健全的征信系统,在中国这种评价方式在一定时间内,是可行有效的。
2、另一方面,我们相信绝大多数的骗子并不是贷完款后才变成骗子的。骗子来 贷款之前就已经是骗子。那么在骗子的行骗生涯中,或多或少地会在互联网上留下痕迹。比如,有许多专门曝光骗子老赖的网站,也有许多骗子在一些社交网站上有人针对曝光。针对这些曝光的数据,平台大数据中心使用聚焦爬虫进行爬取,然后将爬取到的数据保存到黑名单中。
有上面两点可以看出来,不管是爬取交易账单等信息,还是抓取曝光的骗子等数据,都离不开聚焦爬虫的应用。
然而,随着互联网的不断发展变化,数据风控官们发现,通过传统方式做风险控制越来越困难。通过传统方式爬取的数据,基本都是属于一个人的点状数据,并且是片面的点状数据。何为点状数据?若是把所有人看成一个整体数据,那么最形象的结构就是一张人物关系数据网。每个人都是网中的一个节点,即每个人的数据就是一个点状的数据。由于个人隐私的原因,我们无法也不可能得到一个人的全方位数据,只能截取其中的一个或几个片面 。
通过这些数据来判断一个人的信用等级有两个弊端,一是数据的不全面会导致判断的失准,这个弊端无法避免,只能尽可能多的得到数据,并制定更优化的算法模型;二是点状的数据随着互联网的发展有了更多造假的可能性。比如说电商的交易记录,若是有心造假,很容易就可以制造一批完全符合高信用等级的交易记录。因此,点状数据在未来的风控系统中所占的比重会逐渐减少。
相对应于点状数据的不足,爬虫界有人提出了建立网状数据的可能性。基本想法是,通过聚焦爬虫爬取各大社交网站,根据这些数据建立人物关系网络,在关系网络的结构中,给每个人添加补充各个维度的数据。其理想的数据集合是每个来平台贷款的人都存在于平台大数据中心的人物关系网络中。并且我们知道其关系密切的人的标签(画像)。
例如张三来贷款,大数据中心不但要知道张三的信用评价,还要知道与张三关系紧密的若干人的信用评价。这有什么用呢?假设张三贷款的场景如下:张三通过大数据中心的传统信用评价方式,得到了信用良好的评价。但是,我们通过关系网络发现与张三关系密切的人中,有多个人在信用评价中得到了信用低下的评价,甚至在黑名单中。这个时候我们就要怀疑张三的数据是否是精心假造的。根据物以类聚,人以群分的道理,我们相信这种怀疑是很有必要的。
张三的人物关系网络图:
由上张图可以发现,张三信用良好的评价并不可靠,贷款给张三会带来很大的风险。传统的风控方式显然并不能规避这种风险,且这种风险会随着骗贷人越来越了解贷款公司的信用评价方式而增多。试想,在未来的时间里,由于骗贷人对公司的风控有了大致方向的了解,从而在某一方面伪造了良好的记录。大数据中心爬取了这些数据从而错误地判断了信用等级,那贷款公司所承受的风险将会急剧扩大。
针对未来这种风险,人物关系数据网络给出了解决的可能性。若是没有完善且可靠的官方征信系统的出现,人物关系数据网络将是未来无抵押贷款公司风险控制的主流方式。然而建立人物关系数据网络并不是一朝一夕的事情。
4.结语
每一个社交网站都有海量的数据,和海量数据成正比的是社交网站的防爬虫策略。这就对爬虫提出了更高更严格的要求,也更细化了不同爬虫之间的差异。然而一成不变不是互联网的主调,依存互联网生存的公司,更要学会拥抱变化,甚至预测变化,方能在未来乘风破浪,越行越远。 查看全部
聚焦爬虫原理及其金融风控运用
导读
马云说,大数据时代来了。现在太多互联网公司都在做大数据,每个公司的数据来源都不止一个,其中占比重较大的一个数据源非网络爬虫莫属。然而不同的公司格局业务背景不同,所需要的数据类型也就不同。不同于搜索网站所用的通用爬虫,聚焦爬虫开始越来越多的被人们提起。
目录
1. 聚焦爬虫的原理
2. 聚焦爬虫的发展
3. 爬虫在互联网金融领域应用
4. 结语
1.聚焦爬虫的原理
1.1概念
聚焦爬虫,又称主题爬虫(或专业爬虫),是“面向特定主题”的一种网络爬虫程序。它与我们通常所说的爬虫(通用爬虫)的区别之处就在于,聚焦爬虫在实施网页抓取时要进行主题筛选。它尽量保证只抓取与主题相关的网页信息。
1.2 聚焦爬虫的分类
聚焦爬虫主要分为两大类。一类是浅聚焦爬虫,所谓浅聚焦爬虫是指,爬虫程序抓取特定网站的的所有信息。其工作方式和通用爬虫几乎一样,唯一的区别是种子URL的选定确定了抓取内容的一致,其核心是种子URL的选择。另一类是深聚焦爬虫,深聚焦爬虫是指在海量的不同内容网页中,通过主题相关度算法选择主题相近的URL和内容进行爬取。其核心是如何判断所爬取的URL和页面内容是与主题相关的。
关系如下:
由图可见,浅聚焦爬虫可以看成是将通用爬虫局限在了一个单一主题的网站上,因此我们通常所说的聚焦爬虫大多是指深聚焦爬虫。
1.2.1 浅聚焦爬虫
浅聚焦爬虫从一个或若干初始网页的URL开始,(例如分类信息网)获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
其工作流程如图:
可见浅聚焦爬虫的基本原理跟通用爬虫的基本原理是一样的,其特点是选定种子URL,例如,要抓取招聘信息,可以将招聘网站的URL作为种子URL。用主题网站保证了抓取内容的主题一致。
1.2.2 深聚焦爬虫
深聚焦爬虫最主要的特点是主题一致性。然而在浩如烟海的互联网大数据中要保证所抓取的数据主题一致并不是一件简单的事情。针对不同的数据需求,这其中需要的策略和方式并没有统一的解答。在这里不说具体的解决方法,只讨论一下常见的解决思路。
一、针对页面内容
这种解决方法是不管页面的主题是什么,先将页面爬取下来。对页面进行简单的去噪后,利用主题提取策略对处理后的页面内容进行主题提取,最后对比设定好的主题,如果主题一致,或在一定的阀值内,则保存页面进一步进行数据清洗。若主题偏差超过一点阀值,则直接丢弃页面。
这种方式的优点是链接页面全覆盖,不会出现数据遗漏。但是缺点也十分致命,那就是全覆盖的页面,很大一部分是与主题无关的废弃页面,这极大的拖慢了爬虫爬取数据的速度。到后期,爬取数据的速度将是无法接受的。
二、针对URL
上面介绍了浅聚焦爬虫的核心是选定合适的种子URL,这些种子URL主要是主题网站的入口URL。
互联网上的网站一般都是有固定主题的,并且同一网站中同一主题的页面URL,都有一定的规律可循。由此,通过URL预测页面主题的思路也就自然而生了。此外,页面中绝大部分超链接都是带有锚文本的,而锚文本基本可以看做是对目标页面的概括描述。结合对URL的分析和对锚文本的分析,对目标页面进行主题预测的正确率也就相当可观了。
然而,这种预测结果并不能完全保证丢弃的URL都是与主题无关的,因此会有一些遗漏。同时,这种方式也无法确保通过预测的页面都是与主题相关的,因此需要对通过的预测的URL页面进行页面内容主题提取,再对比与设定的主题做出取舍。
通过上面的分析,得出一般的解决方法。就是先通过URL分析,丢弃部分URL。下载页面后,对页面内容进行主题提取,对比预设定的主题做取舍。最后进行数据清洗。
1.3架构
深聚焦爬虫的一般结构如下图:
六个主要的组成部分【控制中心】【下载模块】【抽取模块】【清洗模块】【消重模块】【资源模块】
控制模块:控制模块由程序出入口、下载调度策略、抽取调度策略、清洗调度策略和URL消重调度策略组成。
下载模块:根据控制中心传过来的URL,IP,COOKIE等下载资源下载页面,并将下载结果返回给控制中心。
抽取模块:接受控制中心下发的页面源代码和抽取指标,根据抽取指标对源代码进行抽取,并将抽取结果返回控制中心。
清洗模块分为文本清洗和URL清洗,文本清洗根据预设的主题以及相对应的主题相关度算法,决定是舍弃文本,还是将文本保存入库。URL清洗是根据URL分析结果,预测当前URL所链接的页面是否与主题相关,若相关则将URL返回控制中心,反之丢弃此URL。
URL消重模块:针对有些主题突出的页面被许多页面链接,从而导致大量重复下载此页面造成资源浪费和数据质量低下的情况,调用消重模块将重复的URL丢弃,将不重复的URL返回到下载资源模块的URL队列中。
资源模块:保存有下载所需要的所有资源,包括代理IP,COOKIE,URL等信息。
2. 聚焦爬虫的发展
大数据时代,对数据的多样性和针对性要求越来越高。随之爬虫的架构方式也更加灵活多变。比较常见的开源爬虫框架有Crawler4j、WebMagic、WebCollector、scrapy等。另一方面,针对爬虫的抓取,被抓取网站也制定了相应的防爬虫措施。常见的防爬虫方式有如下几种:
一、针对频繁访问网站的IP设定访问限制。这是最常见的一种放爬虫方式,具体体现是,在一个单位时间内,同一个IP的请求数量达到了网站设计的阀值,这个IP就被限制访问。面对这种情况,可以制定适当的IP访问策略。
二、使用js和ajax技术的动态页面。这样的网页源代码中并没有包含所需的数据,数据包裹存在于二次请求的返回文档中。针对这样的页面,可以分析请求过程,提取二次请求的URL,进而得到想要的数据。
三、其他情况:随着互联网的不断发展,出现了各种各样的防爬虫方式。这就需要人们根据实际情况,针对性的解决问题。比如使用模拟浏览器(htmlunit,selenium)技术等。
总之,没有一成不变的互联网,就没有一成不变的爬虫,拥抱变化,才能让爬虫爬的更远。
3.爬虫在互联网金融领域的应用
聚焦爬虫作为数据的主要来源之一,下面就说说聚焦爬虫的应用场景,以我所就职的普惠金融信息服务(上海)有限公司(后面简称普惠)为例。
3.1、网贷行业的数据驱动策略
数据驱动,就是得到前来贷款的客户的指定数据,根据这些数据以及相应的一套算法策略,给客户定义一个标签。借贷部门根据客户的标签决定是否贷款给该客户以及贷多少给该客户。通过这种定义标签的方式,有效阻止大部分骗贷的发生,从而规避风险。
那么,网贷平台如何运用大数据判断客户的信用的呢?粗略的分为两个方面:
1、查看这个人的购物习惯,客户提供的账单流水信息等。这种方法相信一个人若是经常在网上购物、有详细的银行账单并且有正常的通话记录,那么这个人是一个正常的且有一定的经济能力的人。也就是说,这样的人是有能力还贷款的。相对于发达国家健全的征信系统,在中国这种评价方式在一定时间内,是可行有效的。
2、另一方面,我们相信绝大多数的骗子并不是贷完款后才变成骗子的。骗子来 贷款之前就已经是骗子。那么在骗子的行骗生涯中,或多或少地会在互联网上留下痕迹。比如,有许多专门曝光骗子老赖的网站,也有许多骗子在一些社交网站上有人针对曝光。针对这些曝光的数据,平台大数据中心使用聚焦爬虫进行爬取,然后将爬取到的数据保存到黑名单中。
有上面两点可以看出来,不管是爬取交易账单等信息,还是抓取曝光的骗子等数据,都离不开聚焦爬虫的应用。
然而,随着互联网的不断发展变化,数据风控官们发现,通过传统方式做风险控制越来越困难。通过传统方式爬取的数据,基本都是属于一个人的点状数据,并且是片面的点状数据。何为点状数据?若是把所有人看成一个整体数据,那么最形象的结构就是一张人物关系数据网。每个人都是网中的一个节点,即每个人的数据就是一个点状的数据。由于个人隐私的原因,我们无法也不可能得到一个人的全方位数据,只能截取其中的一个或几个片面 。
通过这些数据来判断一个人的信用等级有两个弊端,一是数据的不全面会导致判断的失准,这个弊端无法避免,只能尽可能多的得到数据,并制定更优化的算法模型;二是点状的数据随着互联网的发展有了更多造假的可能性。比如说电商的交易记录,若是有心造假,很容易就可以制造一批完全符合高信用等级的交易记录。因此,点状数据在未来的风控系统中所占的比重会逐渐减少。
相对应于点状数据的不足,爬虫界有人提出了建立网状数据的可能性。基本想法是,通过聚焦爬虫爬取各大社交网站,根据这些数据建立人物关系网络,在关系网络的结构中,给每个人添加补充各个维度的数据。其理想的数据集合是每个来平台贷款的人都存在于平台大数据中心的人物关系网络中。并且我们知道其关系密切的人的标签(画像)。
例如张三来贷款,大数据中心不但要知道张三的信用评价,还要知道与张三关系紧密的若干人的信用评价。这有什么用呢?假设张三贷款的场景如下:张三通过大数据中心的传统信用评价方式,得到了信用良好的评价。但是,我们通过关系网络发现与张三关系密切的人中,有多个人在信用评价中得到了信用低下的评价,甚至在黑名单中。这个时候我们就要怀疑张三的数据是否是精心假造的。根据物以类聚,人以群分的道理,我们相信这种怀疑是很有必要的。
张三的人物关系网络图:
由上张图可以发现,张三信用良好的评价并不可靠,贷款给张三会带来很大的风险。传统的风控方式显然并不能规避这种风险,且这种风险会随着骗贷人越来越了解贷款公司的信用评价方式而增多。试想,在未来的时间里,由于骗贷人对公司的风控有了大致方向的了解,从而在某一方面伪造了良好的记录。大数据中心爬取了这些数据从而错误地判断了信用等级,那贷款公司所承受的风险将会急剧扩大。
针对未来这种风险,人物关系数据网络给出了解决的可能性。若是没有完善且可靠的官方征信系统的出现,人物关系数据网络将是未来无抵押贷款公司风险控制的主流方式。然而建立人物关系数据网络并不是一朝一夕的事情。
4.结语
每一个社交网站都有海量的数据,和海量数据成正比的是社交网站的防爬虫策略。这就对爬虫提出了更高更严格的要求,也更细化了不同爬虫之间的差异。然而一成不变不是互联网的主调,依存互联网生存的公司,更要学会拥抱变化,甚至预测变化,方能在未来乘风破浪,越行越远。
[聚焦爬虫]聚焦爬虫原理及其金融风控运用
网站优化 • 优采云 发表了文章 • 0 个评论 • 236 次浏览 • 2022-05-06 21:01
导读
马云说,大数据时代来了。现在太多互联网公司都在做大数据,每个公司的数据来源都不止一个,其中占比重较大的一个数据源非网络爬虫莫属。然而不同的公司格局业务背景不同,所需要的数据类型也就不同。不同于搜索网站所用的通用爬虫,聚焦爬虫开始越来越多的被人们提起。
目录
1. 聚焦爬虫的原理
2. 聚焦爬虫的发展
3. 爬虫在互联网金融领域应用
4. 结语
1.聚焦爬虫的原理
1.1概念
聚焦爬虫,又称主题爬虫(或专业爬虫),是“面向特定主题”的一种网络爬虫程序。它与我们通常所说的爬虫(通用爬虫)的区别之处就在于,聚焦爬虫在实施网页抓取时要进行主题筛选。它尽量保证只抓取与主题相关的网页信息。
1.2 聚焦爬虫的分类
聚焦爬虫主要分为两大类。一类是浅聚焦爬虫,所谓浅聚焦爬虫是指,爬虫程序抓取特定网站的的所有信息。其工作方式和通用爬虫几乎一样,唯一的区别是种子URL的选定确定了抓取内容的一致,其核心是种子URL的选择。另一类是深聚焦爬虫,深聚焦爬虫是指在海量的不同内容网页中,通过主题相关度算法选择主题相近的URL和内容进行爬取。其核心是如何判断所爬取的URL和页面内容是与主题相关的。
关系如下:
由图可见,浅聚焦爬虫可以看成是将通用爬虫局限在了一个单一主题的网站上,因此我们通常所说的聚焦爬虫大多是指深聚焦爬虫。
1.2.1 浅聚焦爬虫
浅聚焦爬虫从一个或若干初始网页的URL开始,(例如分类信息网)获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
其工作流程如图:
可见浅聚焦爬虫的基本原理跟通用爬虫的基本原理是一样的,其特点是选定种子URL,例如,要抓取招聘信息,可以将招聘网站的URL作为种子URL。用主题网站保证了抓取内容的主题一致。
1.2.2 深聚焦爬虫
深聚焦爬虫最主要的特点是主题一致性。然而在浩如烟海的互联网大数据中要保证所抓取的数据主题一致并不是一件简单的事情。针对不同的数据需求,这其中需要的策略和方式并没有统一的解答。在这里不说具体的解决方法,只讨论一下常见的解决思路。
一、针对页面内容
这种解决方法是不管页面的主题是什么,先将页面爬取下来。对页面进行简单的去噪后,利用主题提取策略对处理后的页面内容进行主题提取,最后对比设定好的主题,如果主题一致,或在一定的阀值内,则保存页面进一步进行数据清洗。若主题偏差超过一点阀值,则直接丢弃页面。
这种方式的优点是链接页面全覆盖,不会出现数据遗漏。但是缺点也十分致命,那就是全覆盖的页面,很大一部分是与主题无关的废弃页面,这极大的拖慢了爬虫爬取数据的速度。到后期,爬取数据的速度将是无法接受的。
二、针对URL
上面介绍了浅聚焦爬虫的核心是选定合适的种子URL,这些种子URL主要是主题网站的入口URL。
互联网上的网站一般都是有固定主题的,并且同一网站中同一主题的页面URL,都有一定的规律可循。由此,通过URL预测页面主题的思路也就自然而生了。此外,页面中绝大部分超链接都是带有锚文本的,而锚文本基本可以看做是对目标页面的概括描述。结合对URL的分析和对锚文本的分析,对目标页面进行主题预测的正确率也就相当可观了。
然而,这种预测结果并不能完全保证丢弃的URL都是与主题无关的,因此会有一些遗漏。同时,这种方式也无法确保通过预测的页面都是与主题相关的,因此需要对通过的预测的URL页面进行页面内容主题提取,再对比与设定的主题做出取舍。
通过上面的分析,得出一般的解决方法。就是先通过URL分析,丢弃部分URL。下载页面后,对页面内容进行主题提取,对比预设定的主题做取舍。最后进行数据清洗。
1.3架构
深聚焦爬虫的一般结构如下图:
六个主要的组成部分【控制中心】【下载模块】【抽取模块】【清洗模块】【消重模块】【资源模块】
控制模块:控制模块由程序出入口、下载调度策略、抽取调度策略、清洗调度策略和URL消重调度策略组成。
下载模块:根据控制中心传过来的URL,IP,COOKIE等下载资源下载页面,并将下载结果返回给控制中心。
抽取模块:接受控制中心下发的页面源代码和抽取指标,根据抽取指标对源代码进行抽取,并将抽取结果返回控制中心。
清洗模块分为文本清洗和URL清洗,文本清洗根据预设的主题以及相对应的主题相关度算法,决定是舍弃文本,还是将文本保存入库。URL清洗是根据URL分析结果,预测当前URL所链接的页面是否与主题相关,若相关则将URL返回控制中心,反之丢弃此URL。
URL消重模块:针对有些主题突出的页面被许多页面链接,从而导致大量重复下载此页面造成资源浪费和数据质量低下的情况,调用消重模块将重复的URL丢弃,将不重复的URL返回到下载资源模块的URL队列中。
资源模块:保存有下载所需要的所有资源,包括代理IP,COOKIE,URL等信息。
2. 聚焦爬虫的发展
大数据时代,对数据的多样性和针对性要求越来越高。随之爬虫的架构方式也更加灵活多变。比较常见的开源爬虫框架有Crawler4j、WebMagic、WebCollector、scrapy等。另一方面,针对爬虫的抓取,被抓取网站也制定了相应的防爬虫措施。常见的防爬虫方式有如下几种:
一、针对频繁访问网站的IP设定访问限制。这是最常见的一种放爬虫方式,具体体现是,在一个单位时间内,同一个IP的请求数量达到了网站设计的阀值,这个IP就被限制访问。面对这种情况,可以制定适当的IP访问策略。
二、使用js和ajax技术的动态页面。这样的网页源代码中并没有包含所需的数据,数据包裹存在于二次请求的返回文档中。针对这样的页面,可以分析请求过程,提取二次请求的URL,进而得到想要的数据。
三、其他情况:随着互联网的不断发展,出现了各种各样的防爬虫方式。这就需要人们根据实际情况,针对性的解决问题。比如使用模拟浏览器(htmlunit,selenium)技术等。
总之,没有一成不变的互联网,就没有一成不变的爬虫,拥抱变化,才能让爬虫爬的更远。
3.爬虫在互联网金融领域的应用
聚焦爬虫作为数据的主要来源之一,下面就说说聚焦爬虫的应用场景,以我所就职的普惠金融信息服务(上海)有限公司(后面简称普惠)为例。
3.1、网贷行业的数据驱动策略
数据驱动,就是得到前来贷款的客户的指定数据,根据这些数据以及相应的一套算法策略,给客户定义一个标签。借贷部门根据客户的标签决定是否贷款给该客户以及贷多少给该客户。通过这种定义标签的方式,有效阻止大部分骗贷的发生,从而规避风险。
那么,网贷平台如何运用大数据判断客户的信用的呢?粗略的分为两个方面:
1、查看这个人的购物习惯,客户提供的账单流水信息等。这种方法相信一个人若是经常在网上购物、有详细的银行账单并且有正常的通话记录,那么这个人是一个正常的且有一定的经济能力的人。也就是说,这样的人是有能力还贷款的。相对于发达国家健全的征信系统,在中国这种评价方式在一定时间内,是可行有效的。
2、另一方面,我们相信绝大多数的骗子并不是贷完款后才变成骗子的。骗子来 贷款之前就已经是骗子。那么在骗子的行骗生涯中,或多或少地会在互联网上留下痕迹。比如,有许多专门曝光骗子老赖的网站,也有许多骗子在一些社交网站上有人针对曝光。针对这些曝光的数据,平台大数据中心使用聚焦爬虫进行爬取,然后将爬取到的数据保存到黑名单中。
有上面两点可以看出来,不管是爬取交易账单等信息,还是抓取曝光的骗子等数据,都离不开聚焦爬虫的应用。
然而,随着互联网的不断发展变化,数据风控官们发现,通过传统方式做风险控制越来越困难。通过传统方式爬取的数据,基本都是属于一个人的点状数据,并且是片面的点状数据。何为点状数据?若是把所有人看成一个整体数据,那么最形象的结构就是一张人物关系数据网。每个人都是网中的一个节点,即每个人的数据就是一个点状的数据。由于个人隐私的原因,我们无法也不可能得到一个人的全方位数据,只能截取其中的一个或几个片面 。
通过这些数据来判断一个人的信用等级有两个弊端,一是数据的不全面会导致判断的失准,这个弊端无法避免,只能尽可能多的得到数据,并制定更优化的算法模型;二是点状的数据随着互联网的发展有了更多造假的可能性。比如说电商的交易记录,若是有心造假,很容易就可以制造一批完全符合高信用等级的交易记录。因此,点状数据在未来的风控系统中所占的比重会逐渐减少。
相对应于点状数据的不足,爬虫界有人提出了建立网状数据的可能性。基本想法是,通过聚焦爬虫爬取各大社交网站,根据这些数据建立人物关系网络,在关系网络的结构中,给每个人添加补充各个维度的数据。其理想的数据集合是每个来平台贷款的人都存在于平台大数据中心的人物关系网络中。并且我们知道其关系密切的人的标签(画像)。
例如张三来贷款,大数据中心不但要知道张三的信用评价,还要知道与张三关系紧密的若干人的信用评价。这有什么用呢?假设张三贷款的场景如下:张三通过大数据中心的传统信用评价方式,得到了信用良好的评价。但是,我们通过关系网络发现与张三关系密切的人中,有多个人在信用评价中得到了信用低下的评价,甚至在黑名单中。这个时候我们就要怀疑张三的数据是否是精心假造的。根据物以类聚,人以群分的道理,我们相信这种怀疑是很有必要的。
张三的人物关系网络图:
由上张图可以发现,张三信用良好的评价并不可靠,贷款给张三会带来很大的风险。传统的风控方式显然并不能规避这种风险,且这种风险会随着骗贷人越来越了解贷款公司的信用评价方式而增多。试想,在未来的时间里,由于骗贷人对公司的风控有了大致方向的了解,从而在某一方面伪造了良好的记录。大数据中心爬取了这些数据从而错误地判断了信用等级,那贷款公司所承受的风险将会急剧扩大。
针对未来这种风险,人物关系数据网络给出了解决的可能性。若是没有完善且可靠的官方征信系统的出现,人物关系数据网络将是未来无抵押贷款公司风险控制的主流方式。然而建立人物关系数据网络并不是一朝一夕的事情。
4.结语
每一个社交网站都有海量的数据,和海量数据成正比的是社交网站的防爬虫策略。这就对爬虫提出了更高更严格的要求,也更细化了不同爬虫之间的差异。然而一成不变不是互联网的主调,依存互联网生存的公司,更要学会拥抱变化,甚至预测变化,方能在未来乘风破浪,越行越远。 查看全部
[聚焦爬虫]聚焦爬虫原理及其金融风控运用
导读
马云说,大数据时代来了。现在太多互联网公司都在做大数据,每个公司的数据来源都不止一个,其中占比重较大的一个数据源非网络爬虫莫属。然而不同的公司格局业务背景不同,所需要的数据类型也就不同。不同于搜索网站所用的通用爬虫,聚焦爬虫开始越来越多的被人们提起。
目录
1. 聚焦爬虫的原理
2. 聚焦爬虫的发展
3. 爬虫在互联网金融领域应用
4. 结语
1.聚焦爬虫的原理
1.1概念
聚焦爬虫,又称主题爬虫(或专业爬虫),是“面向特定主题”的一种网络爬虫程序。它与我们通常所说的爬虫(通用爬虫)的区别之处就在于,聚焦爬虫在实施网页抓取时要进行主题筛选。它尽量保证只抓取与主题相关的网页信息。
1.2 聚焦爬虫的分类
聚焦爬虫主要分为两大类。一类是浅聚焦爬虫,所谓浅聚焦爬虫是指,爬虫程序抓取特定网站的的所有信息。其工作方式和通用爬虫几乎一样,唯一的区别是种子URL的选定确定了抓取内容的一致,其核心是种子URL的选择。另一类是深聚焦爬虫,深聚焦爬虫是指在海量的不同内容网页中,通过主题相关度算法选择主题相近的URL和内容进行爬取。其核心是如何判断所爬取的URL和页面内容是与主题相关的。
关系如下:
由图可见,浅聚焦爬虫可以看成是将通用爬虫局限在了一个单一主题的网站上,因此我们通常所说的聚焦爬虫大多是指深聚焦爬虫。
1.2.1 浅聚焦爬虫
浅聚焦爬虫从一个或若干初始网页的URL开始,(例如分类信息网)获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
其工作流程如图:
可见浅聚焦爬虫的基本原理跟通用爬虫的基本原理是一样的,其特点是选定种子URL,例如,要抓取招聘信息,可以将招聘网站的URL作为种子URL。用主题网站保证了抓取内容的主题一致。
1.2.2 深聚焦爬虫
深聚焦爬虫最主要的特点是主题一致性。然而在浩如烟海的互联网大数据中要保证所抓取的数据主题一致并不是一件简单的事情。针对不同的数据需求,这其中需要的策略和方式并没有统一的解答。在这里不说具体的解决方法,只讨论一下常见的解决思路。
一、针对页面内容
这种解决方法是不管页面的主题是什么,先将页面爬取下来。对页面进行简单的去噪后,利用主题提取策略对处理后的页面内容进行主题提取,最后对比设定好的主题,如果主题一致,或在一定的阀值内,则保存页面进一步进行数据清洗。若主题偏差超过一点阀值,则直接丢弃页面。
这种方式的优点是链接页面全覆盖,不会出现数据遗漏。但是缺点也十分致命,那就是全覆盖的页面,很大一部分是与主题无关的废弃页面,这极大的拖慢了爬虫爬取数据的速度。到后期,爬取数据的速度将是无法接受的。
二、针对URL
上面介绍了浅聚焦爬虫的核心是选定合适的种子URL,这些种子URL主要是主题网站的入口URL。
互联网上的网站一般都是有固定主题的,并且同一网站中同一主题的页面URL,都有一定的规律可循。由此,通过URL预测页面主题的思路也就自然而生了。此外,页面中绝大部分超链接都是带有锚文本的,而锚文本基本可以看做是对目标页面的概括描述。结合对URL的分析和对锚文本的分析,对目标页面进行主题预测的正确率也就相当可观了。
然而,这种预测结果并不能完全保证丢弃的URL都是与主题无关的,因此会有一些遗漏。同时,这种方式也无法确保通过预测的页面都是与主题相关的,因此需要对通过的预测的URL页面进行页面内容主题提取,再对比与设定的主题做出取舍。
通过上面的分析,得出一般的解决方法。就是先通过URL分析,丢弃部分URL。下载页面后,对页面内容进行主题提取,对比预设定的主题做取舍。最后进行数据清洗。
1.3架构
深聚焦爬虫的一般结构如下图:
六个主要的组成部分【控制中心】【下载模块】【抽取模块】【清洗模块】【消重模块】【资源模块】
控制模块:控制模块由程序出入口、下载调度策略、抽取调度策略、清洗调度策略和URL消重调度策略组成。
下载模块:根据控制中心传过来的URL,IP,COOKIE等下载资源下载页面,并将下载结果返回给控制中心。
抽取模块:接受控制中心下发的页面源代码和抽取指标,根据抽取指标对源代码进行抽取,并将抽取结果返回控制中心。
清洗模块分为文本清洗和URL清洗,文本清洗根据预设的主题以及相对应的主题相关度算法,决定是舍弃文本,还是将文本保存入库。URL清洗是根据URL分析结果,预测当前URL所链接的页面是否与主题相关,若相关则将URL返回控制中心,反之丢弃此URL。
URL消重模块:针对有些主题突出的页面被许多页面链接,从而导致大量重复下载此页面造成资源浪费和数据质量低下的情况,调用消重模块将重复的URL丢弃,将不重复的URL返回到下载资源模块的URL队列中。
资源模块:保存有下载所需要的所有资源,包括代理IP,COOKIE,URL等信息。
2. 聚焦爬虫的发展
大数据时代,对数据的多样性和针对性要求越来越高。随之爬虫的架构方式也更加灵活多变。比较常见的开源爬虫框架有Crawler4j、WebMagic、WebCollector、scrapy等。另一方面,针对爬虫的抓取,被抓取网站也制定了相应的防爬虫措施。常见的防爬虫方式有如下几种:
一、针对频繁访问网站的IP设定访问限制。这是最常见的一种放爬虫方式,具体体现是,在一个单位时间内,同一个IP的请求数量达到了网站设计的阀值,这个IP就被限制访问。面对这种情况,可以制定适当的IP访问策略。
二、使用js和ajax技术的动态页面。这样的网页源代码中并没有包含所需的数据,数据包裹存在于二次请求的返回文档中。针对这样的页面,可以分析请求过程,提取二次请求的URL,进而得到想要的数据。
三、其他情况:随着互联网的不断发展,出现了各种各样的防爬虫方式。这就需要人们根据实际情况,针对性的解决问题。比如使用模拟浏览器(htmlunit,selenium)技术等。
总之,没有一成不变的互联网,就没有一成不变的爬虫,拥抱变化,才能让爬虫爬的更远。
3.爬虫在互联网金融领域的应用
聚焦爬虫作为数据的主要来源之一,下面就说说聚焦爬虫的应用场景,以我所就职的普惠金融信息服务(上海)有限公司(后面简称普惠)为例。
3.1、网贷行业的数据驱动策略
数据驱动,就是得到前来贷款的客户的指定数据,根据这些数据以及相应的一套算法策略,给客户定义一个标签。借贷部门根据客户的标签决定是否贷款给该客户以及贷多少给该客户。通过这种定义标签的方式,有效阻止大部分骗贷的发生,从而规避风险。
那么,网贷平台如何运用大数据判断客户的信用的呢?粗略的分为两个方面:
1、查看这个人的购物习惯,客户提供的账单流水信息等。这种方法相信一个人若是经常在网上购物、有详细的银行账单并且有正常的通话记录,那么这个人是一个正常的且有一定的经济能力的人。也就是说,这样的人是有能力还贷款的。相对于发达国家健全的征信系统,在中国这种评价方式在一定时间内,是可行有效的。
2、另一方面,我们相信绝大多数的骗子并不是贷完款后才变成骗子的。骗子来 贷款之前就已经是骗子。那么在骗子的行骗生涯中,或多或少地会在互联网上留下痕迹。比如,有许多专门曝光骗子老赖的网站,也有许多骗子在一些社交网站上有人针对曝光。针对这些曝光的数据,平台大数据中心使用聚焦爬虫进行爬取,然后将爬取到的数据保存到黑名单中。
有上面两点可以看出来,不管是爬取交易账单等信息,还是抓取曝光的骗子等数据,都离不开聚焦爬虫的应用。
然而,随着互联网的不断发展变化,数据风控官们发现,通过传统方式做风险控制越来越困难。通过传统方式爬取的数据,基本都是属于一个人的点状数据,并且是片面的点状数据。何为点状数据?若是把所有人看成一个整体数据,那么最形象的结构就是一张人物关系数据网。每个人都是网中的一个节点,即每个人的数据就是一个点状的数据。由于个人隐私的原因,我们无法也不可能得到一个人的全方位数据,只能截取其中的一个或几个片面 。
通过这些数据来判断一个人的信用等级有两个弊端,一是数据的不全面会导致判断的失准,这个弊端无法避免,只能尽可能多的得到数据,并制定更优化的算法模型;二是点状的数据随着互联网的发展有了更多造假的可能性。比如说电商的交易记录,若是有心造假,很容易就可以制造一批完全符合高信用等级的交易记录。因此,点状数据在未来的风控系统中所占的比重会逐渐减少。
相对应于点状数据的不足,爬虫界有人提出了建立网状数据的可能性。基本想法是,通过聚焦爬虫爬取各大社交网站,根据这些数据建立人物关系网络,在关系网络的结构中,给每个人添加补充各个维度的数据。其理想的数据集合是每个来平台贷款的人都存在于平台大数据中心的人物关系网络中。并且我们知道其关系密切的人的标签(画像)。
例如张三来贷款,大数据中心不但要知道张三的信用评价,还要知道与张三关系紧密的若干人的信用评价。这有什么用呢?假设张三贷款的场景如下:张三通过大数据中心的传统信用评价方式,得到了信用良好的评价。但是,我们通过关系网络发现与张三关系密切的人中,有多个人在信用评价中得到了信用低下的评价,甚至在黑名单中。这个时候我们就要怀疑张三的数据是否是精心假造的。根据物以类聚,人以群分的道理,我们相信这种怀疑是很有必要的。
张三的人物关系网络图:
由上张图可以发现,张三信用良好的评价并不可靠,贷款给张三会带来很大的风险。传统的风控方式显然并不能规避这种风险,且这种风险会随着骗贷人越来越了解贷款公司的信用评价方式而增多。试想,在未来的时间里,由于骗贷人对公司的风控有了大致方向的了解,从而在某一方面伪造了良好的记录。大数据中心爬取了这些数据从而错误地判断了信用等级,那贷款公司所承受的风险将会急剧扩大。
针对未来这种风险,人物关系数据网络给出了解决的可能性。若是没有完善且可靠的官方征信系统的出现,人物关系数据网络将是未来无抵押贷款公司风险控制的主流方式。然而建立人物关系数据网络并不是一朝一夕的事情。
4.结语
每一个社交网站都有海量的数据,和海量数据成正比的是社交网站的防爬虫策略。这就对爬虫提出了更高更严格的要求,也更细化了不同爬虫之间的差异。然而一成不变不是互联网的主调,依存互联网生存的公司,更要学会拥抱变化,甚至预测变化,方能在未来乘风破浪,越行越远。
聚焦爬虫原理及其在互联网金融领域应用前景浅析
网站优化 • 优采云 发表了文章 • 0 个评论 • 102 次浏览 • 2022-05-06 20:18
导读
马云说,大数据时代来了。现在太多互联网公司都在做大数据,每个公司的数据来源都不止一个,其中占比重较大的一个数据源非网络爬虫莫属。然而不同的公司格局业务背景不同,所需要的数据类型也就不同。不同于搜索网站所用的通用爬虫,聚焦爬虫开始越来越多的被人们提起。
目录
1. 聚焦爬虫的原理
2. 聚焦爬虫的发展
3. 爬虫在互联网金融领域应用
4. 结语
1聚焦爬虫的原理
1.1概念
聚焦爬虫,又称主题爬虫(或专业爬虫),是“面向特定主题”的一种网络爬虫程序。它与我们通常所说的爬虫(通用爬虫)的区别之处就在于,聚焦爬虫在实施网页抓取时要进行主题筛选。它尽量保证只抓取与主题相关的网页信息。
1.2聚焦爬虫的分类
聚焦爬虫主要分为两大类。一类是浅聚焦爬虫,所谓浅聚焦爬虫是指,爬虫程序抓取特定网站的的所有信息。其工作方式和通用爬虫几乎一样,唯一的区别是种子URL的选定确定了抓取内容的一致,其核心是种子URL的选择。另一类是深聚焦爬虫,深聚焦爬虫是指在海量的不同内容网页中,通过主题相关度算法选择主题相近的URL和内容进行爬取。其核心是如何判断所爬取的URL和页面内容是与主题相关的。
关系如下:
由图可见,浅聚焦爬虫可以看成是将通用爬虫局限在了一个单一主题的网站上,因此我们通常所说的聚焦爬虫大多是指深聚焦爬虫。
1.2.1浅聚焦爬虫
浅聚焦爬虫从一个或若干初始网页的URL开始,(例如分类信息网)获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
其工作流程如图:
可见浅聚焦爬虫的基本原理跟通用爬虫的基本原理是一样的,其特点是选定种子URL,例如,要抓取招聘信息,可以将招聘网站的URL作为种子URL。用主题网站保证了抓取内容的主题一致。
1.2.2深聚焦爬虫
深聚焦爬虫最主要的特点是主题一致性。然而在浩如烟海的互联网大数据中要保证所抓取的数据主题一致并不是一件简单的事情。针对不同的数据需求,这其中需要的策略和方式并没有统一的解答。在这里不说具体的解决方法,只讨论一下常见的解决思路。
一、针对页面内容
这种解决方法是不管页面的主题是什么,先将页面爬取下来。对页面进行简单的去噪后,利用主题提取策略(关键字,分类聚类算法等)对处理后的页面内容进行主题提取,最后对比设定好的主题,如果主题一致,或在一定的阀值内,则保存页面进一步进行数据清洗。若主题偏差超过一点阀值,则直接丢弃页面。这种方式的优点是链接页面全覆盖,不会出现数据遗漏。但是缺点也十分致命,那就是全覆盖的页面,很大一部分是与主题无关的废弃页面,这极大的拖慢了爬虫爬取数据的速度。到后期,爬取数据的速度将是无法接受的。
二、针对URL
上面介绍了浅聚焦爬虫的核心是选定合适的种子URL,这些种子URL主要是主题网站的入口URL。比如北京赶集网担保贷款频道的入口URL:,这个URL透漏给我们很多信息,根据这些信息,我们可以初步预测到这个URL所链接的页面的主题就是担保保险,其地域在北京,其平台是赶集网。由此我们发现,互联网上的网站或者网站的一个模块大部分都是有固定主题的,并且同一网站中同一主题的页面URL,都有一定的规律可循。针对这种情况,通过URL预测页面主题的思路也就自然而生了。除此之外,页面中绝大部分超链接都是带有锚文本的,而锚文本基本可以看做是对目标页面的概括描述。结合对URL的分析和对锚文本的分析,对目标页面进行主题预测的正确率也就相当可观了。显而易见,针对URL的主题预测策略,可以有效的减少不必要的页面下载,节约下载资源,加快下载速度。然而,这种预测结果并不能完全保证丢弃的URL都是与主题无关的,因此会有一些遗漏。同时,这种方式也无法确保通过预测的页面都是与主题相关的,因此需要对通过的预测的URL页面进行页面内容主题提取,再对比与设定的主题做出取舍。
通过上面的分析,得出一般的解决方法。就是先通过URL分析,丢弃部分URL。下载页面后,对页面内容进行主题提取,对比预设定的主题做取舍。最后进行数据清洗。
1.3架构
深聚焦爬虫的一般结构如下图:
六个主要的组成部分【控制中心】【下载模块】【抽取模块】【清洗模块】【消重模块】【资源模块】
控制模块:控制模块由程序出入口、下载调度策略、抽取调度策略、清洗调度策略和URL消重调度策略组成。程序出入口是程序开始、初始化和结束地方。下载调度策略根据当前需要下载的网页,分配IP,COOKIE等下载资源,并根据页面下载器的反馈(失败或成功),决定程序下一步的走向。抽取调度策略根据当前已经下载的页面队列情况,来决定调用抽取模块对某一部分页面进行抽取以及调用抽取模块中的哪一种抽取模式。清洗调度策略根据抽取的文本和URL队列情况,决定其被清洗的优先度,从而有序的清洗数据。URL消重策略根据URL队列情况决定何时调用URL消重器,避免内存中存储过多的URL。
下载模块:根据控制中心传过来的URL,IP,COOKIE等下载资源下载页面,并将下载结果返回给控制中心。
抽取模块:接受控制中心下发的页面源代码和抽取指标,根据抽取指标对源代码进行抽取,并将抽取结果返回控制中心。
清洗模块分为文本清洗和URL清洗,文本清洗根据预设的主题以及相对应的主题相关度算法,决定是舍弃文本,还是将文本保存入库。URL清洗是根据URL分析结果,预测当前URL所链接的页面是否与主题相关,若相关则将URL返回控制中心,反之丢弃此URL。
URL消重模块:针对有些主题突出的页面被许多页面链接,从而导致大量重复下载此页面造成资源浪费和数据质量低下的情况,调用消重模块将重复的URL丢弃,将不重复的URL返回到下载资源模块的URL队列中。
资源模块:保存有下载所需要的所有资源,包括代理IP,COOKIE,URL等信息。
2聚焦爬虫的发展
大数据时代,对数据的多样性和针对性要求越来越高。随之爬虫的架构方式也更加灵活多变。比较常见的开源爬虫框架有Crawler4j、WebMagic、WebCollector、scrapy等。另一方面,针对爬虫的抓取,被抓取网站也制定了相应的防爬虫措施。常见的防爬虫方式有如下几种:
一、针对频繁访问网站的IP设定访问限制。这是最常见的一种放爬虫方式,具体体现是,在一个单位时间内,同一个IP的请求数量达到了网站设计的阀值,这个IP就被限制访问。面对这种情况,可以制定适当的IP访问策略。
二、使用js和ajax技术的动态页面。这样的网页源代码中并没有包含所需的数据,数据包裹存在于二次请求的返回文档中。针对这样的页面,可以分析请求过程,提取二次请求的URL,进而得到想要的数据。
三、其他情况:随着互联网的不断发展,出现了各种各样的防爬虫方式。这就需要人们根据实际情况,针对性的解决问题。比如使用模拟浏览器(htmlunit,selenium)技术等。
总之,没有一成不变的互联网,就没有一成不变的爬虫,拥抱变化,才能让爬虫爬的更远。
3爬虫在互联网金融领域的应用
聚焦爬虫作为数据的主要来源之一,下面就说说聚焦爬虫的应用场景,以我所就职的普惠金融信息服务(上海)有限公司(后面简称普惠)为例。
普惠金融是一家致力于让每一位普通人都享有更公平、更高效、更透明的金融信息服务的金融服务公司。公司的主要业务是微小型贷款。线上有爱钱进和借啊APP,线下各大城市有实体店。现如今的小额贷款公司基本上都是无抵押贷款,这对公司的风险控制提出了很高的要求。如何判定一个人是否有能力并且有意愿还款、如何将那些骗贷的没有信用的人拒之门外成了小额贷款公司生存的首要任务。响应大数据的时代潮流,普惠公司领导人提出了由数据驱动业务发展的先进理念,普惠大数据中心应运而生。
数据驱动,就是得到前来普惠贷款的客户的指定数据,根据这些数据以及相应的一套算法策略,给客户定义一个标签。借贷部门根据客户的标签决定是否贷款给该客户以及贷多少给该客户。通过这种定义标签的方式,普惠大数据中心有效阻止大部分骗贷的发生,从而规避风险。
那么普惠大数据中心是如何判断客户的信用的呢?粗略的分为两个方面:
1、微贷行业中判断一个人是否有能力还贷款有一套传统的方法。那就是查看这个人的购物习惯,客户提供的账单流水信息等。这种方法相信一个人若是经常在网上购物、有详细的银行账单并且有正常的通话记录,那么这个人是一个正常的且有一定的经济能力的人。也就是说,这样的人是有能力还贷款的。相对于发达国家健全的征信系统,在中国这种评价方式在一定时间内,是可行有效的。
2、另一方面,我们相信绝大多数的骗子并不是来普惠贷完款后才变成骗子的。骗子来普惠贷款之前就已经是骗子。那么在骗子的行骗生涯中,或多或少的会在互联网上留下痕迹。比如,有许多专门曝光骗子老赖的网站,也有许多骗子在一些社交网站上有人针对曝光。针对这些曝光的数据,大数据中心使用聚焦爬虫进行爬取,然后将爬取到的数据保存到普惠的黑名单中。
有上面两点可以看出来,不管是爬取交易账单等信息,还是抓取曝光的骗子等数据,都离不开聚焦爬虫的应用。
普惠大数据中心现有百多人的团队在开发和维护风控系统,从成立至今,普惠大数据中心的数据来源由单一的几个网站增长到了现在上百个网站,信用评价指标达到上千个维度。在不断完善,发现和创新中,大数据中心传统方式的风控水平已经到达行业领先水平。
然而,随着互联网的不断发展变化,人们对微贷行业的逐渐了解。一些置身大数据风控的人逐渐发现,通过传统方式做风险控制越来越困难。通过传统方式爬取的数据,基本都是属于一个人的点状数据,并且是片面的点状数据。何为点状数据?若是把所有人看成一个整体数据,那么最形象的结构就是一张人物关系数据网。每个人都是网中的一个节点,即每个人的数据就是一个点状的数据。由于个人隐私的原因,我们无法也不可能得到一个人的全方位数据,只能截取其中的一个或几个片面(交易纪录,信用卡信息等)。通过这些数据来判断一个人的信用等级有两个弊端,一是数据的不全面会导致判断的失准,这个弊端无法避免,只能尽可能多的得到数据,并制定更优化的算法模型;二是点状的数据随着互联网的发展有了更多造假的可能性。比如说电商的交易记录,若是有心造假,很容易就可以制造一批完全符合高信用等级的交易记录。因此,点状数据在未来的风控系统中所占的比重会逐渐减少。
相对应于点状数据的不足,爬虫界有人提出了建立网状数据的可能性。基本想法是,通过聚焦爬虫爬取各大社交网站,根据这些数据建立人物关系网络,在关系网络的结构中,给每个人添加补充各个维度的数据。其理想的数据集合是每个来普惠贷款的人都存在于普惠大数据中心的人物关系网络中。并且我们知道其关系密切的人的标签(画像)。例如张三来普惠贷款,大数据中心不但要知道张三的信用评价,还要知道与张三关系紧密的若干人的信用评价。这有什么用呢?假设张三贷款的场景如下:张三通过大数据中心的传统信用评价方式,得到了信用良好的评价。但是,我们通过关系网络发现与张三关系密切的人中,有多个人在信用评价中得到了信用低下的评价,甚至在普惠的黑名单中。这个时候我们就要怀疑张三的数据是否是精心假造的。根据物以类聚,人以群分的道理,我们相信这种怀疑是很有必要的。
张三的人物关系网络图:
由上张图可以发现,张三信用良好的评价并不可靠。恰恰相反,贷款给张三的风险反而会很大。传统的风控方式显然并不能规避这种风险,但是这种风险会随着骗贷人越来越了解贷款公司的信用评价方式而越来越多。试想,在未来的时间里,由于骗贷人对公司的风控有了大致方向的了解,从而在某一方面或很多方面伪造了良好的记录。大数据中心爬取了这些数据从而错误的判断了信用等级,那贷款公司所承受的风险将会急剧扩大。
针对未来这种风险,人物关系数据网络给出了解决的可能性。若是没有完善且可靠的官方征信系统的出现,人物关系数据网络将是未来无抵押贷款公司风险控制的主流方式。然而建立人物关系数据网络并不是一朝一夕的事情。
4结语
每一个社交网站都有海量的数据,和海量数据成正比的是社交网站的防爬虫策略。这就对爬虫提出了更高更严格的要求,也更细化了不同爬虫之间的差异。然而一成不变不是互联网的主调,依存互联网生存的公司,更要学会拥抱变化,甚至预测变化,方能在未来乘风破浪,越行越远。
(本文系作者原创,如需转载,请注明作者与公共号名称,并附本公共号二维码,非常感谢。)
万翔普惠大数据中心-垂直抓取
主要负责普惠大数据互联网基础数据建设、日常运营,我们不生产数据,我们是数据的搬运工。
查看全部
聚焦爬虫原理及其在互联网金融领域应用前景浅析
导读
马云说,大数据时代来了。现在太多互联网公司都在做大数据,每个公司的数据来源都不止一个,其中占比重较大的一个数据源非网络爬虫莫属。然而不同的公司格局业务背景不同,所需要的数据类型也就不同。不同于搜索网站所用的通用爬虫,聚焦爬虫开始越来越多的被人们提起。
目录
1. 聚焦爬虫的原理
2. 聚焦爬虫的发展
3. 爬虫在互联网金融领域应用
4. 结语
1聚焦爬虫的原理
1.1概念
聚焦爬虫,又称主题爬虫(或专业爬虫),是“面向特定主题”的一种网络爬虫程序。它与我们通常所说的爬虫(通用爬虫)的区别之处就在于,聚焦爬虫在实施网页抓取时要进行主题筛选。它尽量保证只抓取与主题相关的网页信息。
1.2聚焦爬虫的分类
聚焦爬虫主要分为两大类。一类是浅聚焦爬虫,所谓浅聚焦爬虫是指,爬虫程序抓取特定网站的的所有信息。其工作方式和通用爬虫几乎一样,唯一的区别是种子URL的选定确定了抓取内容的一致,其核心是种子URL的选择。另一类是深聚焦爬虫,深聚焦爬虫是指在海量的不同内容网页中,通过主题相关度算法选择主题相近的URL和内容进行爬取。其核心是如何判断所爬取的URL和页面内容是与主题相关的。
关系如下:
由图可见,浅聚焦爬虫可以看成是将通用爬虫局限在了一个单一主题的网站上,因此我们通常所说的聚焦爬虫大多是指深聚焦爬虫。
1.2.1浅聚焦爬虫
浅聚焦爬虫从一个或若干初始网页的URL开始,(例如分类信息网)获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
其工作流程如图:
可见浅聚焦爬虫的基本原理跟通用爬虫的基本原理是一样的,其特点是选定种子URL,例如,要抓取招聘信息,可以将招聘网站的URL作为种子URL。用主题网站保证了抓取内容的主题一致。
1.2.2深聚焦爬虫
深聚焦爬虫最主要的特点是主题一致性。然而在浩如烟海的互联网大数据中要保证所抓取的数据主题一致并不是一件简单的事情。针对不同的数据需求,这其中需要的策略和方式并没有统一的解答。在这里不说具体的解决方法,只讨论一下常见的解决思路。
一、针对页面内容
这种解决方法是不管页面的主题是什么,先将页面爬取下来。对页面进行简单的去噪后,利用主题提取策略(关键字,分类聚类算法等)对处理后的页面内容进行主题提取,最后对比设定好的主题,如果主题一致,或在一定的阀值内,则保存页面进一步进行数据清洗。若主题偏差超过一点阀值,则直接丢弃页面。这种方式的优点是链接页面全覆盖,不会出现数据遗漏。但是缺点也十分致命,那就是全覆盖的页面,很大一部分是与主题无关的废弃页面,这极大的拖慢了爬虫爬取数据的速度。到后期,爬取数据的速度将是无法接受的。
二、针对URL
上面介绍了浅聚焦爬虫的核心是选定合适的种子URL,这些种子URL主要是主题网站的入口URL。比如北京赶集网担保贷款频道的入口URL:,这个URL透漏给我们很多信息,根据这些信息,我们可以初步预测到这个URL所链接的页面的主题就是担保保险,其地域在北京,其平台是赶集网。由此我们发现,互联网上的网站或者网站的一个模块大部分都是有固定主题的,并且同一网站中同一主题的页面URL,都有一定的规律可循。针对这种情况,通过URL预测页面主题的思路也就自然而生了。除此之外,页面中绝大部分超链接都是带有锚文本的,而锚文本基本可以看做是对目标页面的概括描述。结合对URL的分析和对锚文本的分析,对目标页面进行主题预测的正确率也就相当可观了。显而易见,针对URL的主题预测策略,可以有效的减少不必要的页面下载,节约下载资源,加快下载速度。然而,这种预测结果并不能完全保证丢弃的URL都是与主题无关的,因此会有一些遗漏。同时,这种方式也无法确保通过预测的页面都是与主题相关的,因此需要对通过的预测的URL页面进行页面内容主题提取,再对比与设定的主题做出取舍。
通过上面的分析,得出一般的解决方法。就是先通过URL分析,丢弃部分URL。下载页面后,对页面内容进行主题提取,对比预设定的主题做取舍。最后进行数据清洗。
1.3架构
深聚焦爬虫的一般结构如下图:
六个主要的组成部分【控制中心】【下载模块】【抽取模块】【清洗模块】【消重模块】【资源模块】
控制模块:控制模块由程序出入口、下载调度策略、抽取调度策略、清洗调度策略和URL消重调度策略组成。程序出入口是程序开始、初始化和结束地方。下载调度策略根据当前需要下载的网页,分配IP,COOKIE等下载资源,并根据页面下载器的反馈(失败或成功),决定程序下一步的走向。抽取调度策略根据当前已经下载的页面队列情况,来决定调用抽取模块对某一部分页面进行抽取以及调用抽取模块中的哪一种抽取模式。清洗调度策略根据抽取的文本和URL队列情况,决定其被清洗的优先度,从而有序的清洗数据。URL消重策略根据URL队列情况决定何时调用URL消重器,避免内存中存储过多的URL。
下载模块:根据控制中心传过来的URL,IP,COOKIE等下载资源下载页面,并将下载结果返回给控制中心。
抽取模块:接受控制中心下发的页面源代码和抽取指标,根据抽取指标对源代码进行抽取,并将抽取结果返回控制中心。
清洗模块分为文本清洗和URL清洗,文本清洗根据预设的主题以及相对应的主题相关度算法,决定是舍弃文本,还是将文本保存入库。URL清洗是根据URL分析结果,预测当前URL所链接的页面是否与主题相关,若相关则将URL返回控制中心,反之丢弃此URL。
URL消重模块:针对有些主题突出的页面被许多页面链接,从而导致大量重复下载此页面造成资源浪费和数据质量低下的情况,调用消重模块将重复的URL丢弃,将不重复的URL返回到下载资源模块的URL队列中。
资源模块:保存有下载所需要的所有资源,包括代理IP,COOKIE,URL等信息。
2聚焦爬虫的发展
大数据时代,对数据的多样性和针对性要求越来越高。随之爬虫的架构方式也更加灵活多变。比较常见的开源爬虫框架有Crawler4j、WebMagic、WebCollector、scrapy等。另一方面,针对爬虫的抓取,被抓取网站也制定了相应的防爬虫措施。常见的防爬虫方式有如下几种:
一、针对频繁访问网站的IP设定访问限制。这是最常见的一种放爬虫方式,具体体现是,在一个单位时间内,同一个IP的请求数量达到了网站设计的阀值,这个IP就被限制访问。面对这种情况,可以制定适当的IP访问策略。
二、使用js和ajax技术的动态页面。这样的网页源代码中并没有包含所需的数据,数据包裹存在于二次请求的返回文档中。针对这样的页面,可以分析请求过程,提取二次请求的URL,进而得到想要的数据。
三、其他情况:随着互联网的不断发展,出现了各种各样的防爬虫方式。这就需要人们根据实际情况,针对性的解决问题。比如使用模拟浏览器(htmlunit,selenium)技术等。
总之,没有一成不变的互联网,就没有一成不变的爬虫,拥抱变化,才能让爬虫爬的更远。
3爬虫在互联网金融领域的应用
聚焦爬虫作为数据的主要来源之一,下面就说说聚焦爬虫的应用场景,以我所就职的普惠金融信息服务(上海)有限公司(后面简称普惠)为例。
普惠金融是一家致力于让每一位普通人都享有更公平、更高效、更透明的金融信息服务的金融服务公司。公司的主要业务是微小型贷款。线上有爱钱进和借啊APP,线下各大城市有实体店。现如今的小额贷款公司基本上都是无抵押贷款,这对公司的风险控制提出了很高的要求。如何判定一个人是否有能力并且有意愿还款、如何将那些骗贷的没有信用的人拒之门外成了小额贷款公司生存的首要任务。响应大数据的时代潮流,普惠公司领导人提出了由数据驱动业务发展的先进理念,普惠大数据中心应运而生。
数据驱动,就是得到前来普惠贷款的客户的指定数据,根据这些数据以及相应的一套算法策略,给客户定义一个标签。借贷部门根据客户的标签决定是否贷款给该客户以及贷多少给该客户。通过这种定义标签的方式,普惠大数据中心有效阻止大部分骗贷的发生,从而规避风险。
那么普惠大数据中心是如何判断客户的信用的呢?粗略的分为两个方面:
1、微贷行业中判断一个人是否有能力还贷款有一套传统的方法。那就是查看这个人的购物习惯,客户提供的账单流水信息等。这种方法相信一个人若是经常在网上购物、有详细的银行账单并且有正常的通话记录,那么这个人是一个正常的且有一定的经济能力的人。也就是说,这样的人是有能力还贷款的。相对于发达国家健全的征信系统,在中国这种评价方式在一定时间内,是可行有效的。
2、另一方面,我们相信绝大多数的骗子并不是来普惠贷完款后才变成骗子的。骗子来普惠贷款之前就已经是骗子。那么在骗子的行骗生涯中,或多或少的会在互联网上留下痕迹。比如,有许多专门曝光骗子老赖的网站,也有许多骗子在一些社交网站上有人针对曝光。针对这些曝光的数据,大数据中心使用聚焦爬虫进行爬取,然后将爬取到的数据保存到普惠的黑名单中。
有上面两点可以看出来,不管是爬取交易账单等信息,还是抓取曝光的骗子等数据,都离不开聚焦爬虫的应用。
普惠大数据中心现有百多人的团队在开发和维护风控系统,从成立至今,普惠大数据中心的数据来源由单一的几个网站增长到了现在上百个网站,信用评价指标达到上千个维度。在不断完善,发现和创新中,大数据中心传统方式的风控水平已经到达行业领先水平。
然而,随着互联网的不断发展变化,人们对微贷行业的逐渐了解。一些置身大数据风控的人逐渐发现,通过传统方式做风险控制越来越困难。通过传统方式爬取的数据,基本都是属于一个人的点状数据,并且是片面的点状数据。何为点状数据?若是把所有人看成一个整体数据,那么最形象的结构就是一张人物关系数据网。每个人都是网中的一个节点,即每个人的数据就是一个点状的数据。由于个人隐私的原因,我们无法也不可能得到一个人的全方位数据,只能截取其中的一个或几个片面(交易纪录,信用卡信息等)。通过这些数据来判断一个人的信用等级有两个弊端,一是数据的不全面会导致判断的失准,这个弊端无法避免,只能尽可能多的得到数据,并制定更优化的算法模型;二是点状的数据随着互联网的发展有了更多造假的可能性。比如说电商的交易记录,若是有心造假,很容易就可以制造一批完全符合高信用等级的交易记录。因此,点状数据在未来的风控系统中所占的比重会逐渐减少。
相对应于点状数据的不足,爬虫界有人提出了建立网状数据的可能性。基本想法是,通过聚焦爬虫爬取各大社交网站,根据这些数据建立人物关系网络,在关系网络的结构中,给每个人添加补充各个维度的数据。其理想的数据集合是每个来普惠贷款的人都存在于普惠大数据中心的人物关系网络中。并且我们知道其关系密切的人的标签(画像)。例如张三来普惠贷款,大数据中心不但要知道张三的信用评价,还要知道与张三关系紧密的若干人的信用评价。这有什么用呢?假设张三贷款的场景如下:张三通过大数据中心的传统信用评价方式,得到了信用良好的评价。但是,我们通过关系网络发现与张三关系密切的人中,有多个人在信用评价中得到了信用低下的评价,甚至在普惠的黑名单中。这个时候我们就要怀疑张三的数据是否是精心假造的。根据物以类聚,人以群分的道理,我们相信这种怀疑是很有必要的。
张三的人物关系网络图:
由上张图可以发现,张三信用良好的评价并不可靠。恰恰相反,贷款给张三的风险反而会很大。传统的风控方式显然并不能规避这种风险,但是这种风险会随着骗贷人越来越了解贷款公司的信用评价方式而越来越多。试想,在未来的时间里,由于骗贷人对公司的风控有了大致方向的了解,从而在某一方面或很多方面伪造了良好的记录。大数据中心爬取了这些数据从而错误的判断了信用等级,那贷款公司所承受的风险将会急剧扩大。
针对未来这种风险,人物关系数据网络给出了解决的可能性。若是没有完善且可靠的官方征信系统的出现,人物关系数据网络将是未来无抵押贷款公司风险控制的主流方式。然而建立人物关系数据网络并不是一朝一夕的事情。
4结语
每一个社交网站都有海量的数据,和海量数据成正比的是社交网站的防爬虫策略。这就对爬虫提出了更高更严格的要求,也更细化了不同爬虫之间的差异。然而一成不变不是互联网的主调,依存互联网生存的公司,更要学会拥抱变化,甚至预测变化,方能在未来乘风破浪,越行越远。
(本文系作者原创,如需转载,请注明作者与公共号名称,并附本公共号二维码,非常感谢。)
万翔普惠大数据中心-垂直抓取
主要负责普惠大数据互联网基础数据建设、日常运营,我们不生产数据,我们是数据的搬运工。
htmlunit抓取动态网页(Web网络爬虫系统的原理及应用)
网站优化 • 优采云 发表了文章 • 0 个评论 • 68 次浏览 • 2022-04-18 16:35
1、爬虫技术概述
网络爬虫是根据一定的规则自动从万维网上爬取信息的程序或脚本。它们广泛用于互联网搜索引擎或其他类似的网站,它可以自动采集它可以访问的所有页面获取或更新这些网站的内容和检索方法。从功能上来说,爬虫一般分为数据采集、处理、存储三部分。传统爬虫从一个或多个初始网页的URL开始,获取初始网页上的URL。在抓取网页的过程中,它不断地从当前页面中提取新的 URL 并放入队列中,直到满足系统的某些停止条件。焦点爬虫的工作流程比较复杂。它需要按照一定的网页分析算法过滤掉与主题无关的链接,保留有用的链接,并放入等待抓取的URL队列中。然后,它会根据一定的搜索策略从队列中选择下一个要爬取的网页URL,并重复上述过程,直到达到系统的一定条件并停止。此外,爬虫爬取的所有网页都会被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。保留有用的链接并将它们放入等待抓取的 URL 队列中。然后,它会根据一定的搜索策略从队列中选择下一个要爬取的网页URL,并重复上述过程,直到达到系统的一定条件并停止。此外,爬虫爬取的所有网页都会被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。保留有用的链接并将它们放入等待抓取的 URL 队列中。然后,它会根据一定的搜索策略从队列中选择下一个要爬取的网页URL,并重复上述过程,直到达到系统的一定条件并停止。此外,爬虫爬取的所有网页都会被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。爬虫抓取到的所有网页都将被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。爬虫抓取到的所有网页都将被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。
与通用网络爬虫相比,聚焦爬虫还需要解决三个主要问题:
(1) 获取目标的描述或定义;
(2) 网页或数据的分析和过滤;
(3) URL 的搜索策略。
2、爬虫原理
2.1 网络爬虫原理
网络爬虫系统的功能是下载网页数据,为搜索引擎系统提供数据源。许多大型网络搜索引擎系统被称为基于Web数据的搜索引擎系统采集,如Google、百度等。这显示了网络爬虫系统在搜索引擎中的重要性。除了供用户阅读的文字信息外,网页还收录一些超链接信息。网络爬虫系统通过网页中的超链接信息不断获取网络上的其他网页。正是因为这个采集进程像爬虫或者蜘蛛一样在网络上漫游,所以才叫做网络爬虫系统或者网络蜘蛛系统,英文叫Spider或者Crawler。
2.2 网络爬虫系统的工作原理
在网络爬虫的系统框架中,主要流程由控制器、解析器和资源库三部分组成。控制器的主要工作是为多个线程中的每个爬虫线程分配工作任务。解析器的主要工作是下载网页和处理页面,主要是处理一些JS脚本标签、CSS代码内容、空格字符、HTML标签等。爬虫的基本工作是由解析器完成的。资源库用于存储下载的网络资源。通常使用大型数据库,例如 Oracle 数据库来存储和索引它。
控制器
控制器是网络爬虫的中央控制器。主要负责根据系统发送的URL链接分配一个线程,然后启动线程调用爬虫爬取网页。
解析器
解析器负责网络爬虫的主要部分。它的主要任务是:下载网页的功能,处理网页的文本,如过滤,提取特殊的HTML标签,分析数据。
资源库
它主要是一个容器,用于存储从网页下载的数据记录,并为索引生成提供目标源。大中型数据库产品包括:Oracle、Sql Server等。
网络爬虫系统一般会选择一些比较重要的出度(网页中超链接数)网站较大的URL作为种子URL集。网络爬虫系统使用这些种子集作为初始 URL 来开始数据爬取。因为网页中收录链接信息,所以会通过已有网页的URL获取一些新的URL。网页之间的指向结构可以看作是一片森林。每个种子 URL 对应的网页是森林中一棵树的根节点。. 这样,网络爬虫系统就可以按照广度优先算法或深度优先算法遍历所有网页。由于深度优先搜索算法可能导致爬虫系统陷入网站内部,不利于搜索距离网站首页比较近的网页信息,一般采用广度优先搜索算法采集网页。网络爬虫系统首先将种子 URL 放入下载队列,然后简单地从队列头部获取一个 URL 来下载其对应的网页。获取网页内容并存储后,通过解析网页中的链接信息可以得到一些新的URL,并将这些URL加入到下载队列中。然后取出一个URL,下载其对应的网页,然后解析,以此类推,直到遍历全网或者满足某个条件。网络爬虫系统首先将种子 URL 放入下载队列,然后简单地从队列头部获取一个 URL 来下载其对应的网页。获取网页内容并存储后,通过解析网页中的链接信息可以得到一些新的URL,并将这些URL加入到下载队列中。然后取出一个URL,下载其对应的网页,然后解析,以此类推,直到遍历全网或者满足某个条件。网络爬虫系统首先将种子 URL 放入下载队列,然后简单地从队列头部获取一个 URL 来下载其对应的网页。获取网页内容并存储后,通过解析网页中的链接信息可以得到一些新的URL,并将这些URL加入到下载队列中。然后取出一个URL,下载其对应的网页,然后解析,以此类推,直到遍历全网或者满足某个条件。
网络爬虫的基本工作流程如下:
1.首先选择一个精心挑选的种子 URL 的子集;
2.将这些网址放入待抓取的网址队列中;
3. 从待爬取URL队列中取出待爬取的URL,解析DNS,获取主机IP,下载该URL对应的网页,存入下载的网页库中。此外,将这些 URL 放入 Crawl URL 队列。
4.解析URL队列中已经爬取的URL,分析其中的其他URL,将URL放入待爬取的URL队列,从而进入下一个循环。
2.3 爬取策略
在爬虫系统中,待爬取的 URL 队列是一个重要的部分。待爬取的URL队列中的URL的排列顺序也是一个重要的问题,因为它涉及到先爬到哪个页面,再爬到哪个页面。确定这些 URL 排列顺序的方法称为爬取策略。下面重点介绍几种常见的爬取策略:
2.3.1 深度优先遍历策略
深度优先遍历策略是指网络爬虫会从起始页开始,每次一个链接跟踪每个链接,处理完该行后移动到下一个起始页,并继续跟踪该链接。我们以下图为例:
遍历的路径:AFG EHI BCD
2.3.2 广度优先遍历策略
广度优先遍历的基本思想是将新下载的网页中找到的链接直接插入待爬取URL队列的末尾。也就是说,网络爬虫会先爬取起始网页链接的所有网页,然后选择其中一个链接的网页,继续爬取该网页链接的所有网页。或者以上图为例:
遍历路径:ABCDEF GHI
2.3.3 反向链接策略
反向链接数是指从其他网页指向一个网页的链接数。反向链接的数量表示网页内容被他人推荐的程度。因此,在很多情况下,搜索引擎的爬取系统会使用这个指标来评估网页的重要性,从而确定不同网页的爬取顺序。
在真实的网络环境中,由于广告链接和作弊链接的存在,反向链接的数量并不能完全等同于他人的重要性。因此,搜索引擎倾向于考虑一些可靠的反向链接计数。
2.3.4部分PageRank策略
Partial PageRank算法借鉴了PageRank算法的思想:对于下载的网页,与待爬取的URL队列中的URL一起,形成一组网页,计算每个页面的PageRank值. URL 按 PageRank 值排序,并按该顺序抓取页面。
如果每次爬取一个页面都重新计算一次PageRank值,折中的解决方案是:每爬完K个页面,重新计算一次PageRank值。但是这种情况还是有一个问题:对于下载页面中分析的链接,也就是我们前面提到的那部分未知网页,暂时没有PageRank值。为了解决这个问题,给这些页面一个临时的PageRank值:把这个网页的所有传入链接传入的PageRank值聚合起来,从而形成未知页面的PageRank值,从而参与排序. 以下示例说明:
2.3.5OPICStrategy
该算法实际上为页面分配了一个重要性分数。在算法开始之前,所有页面都会获得相同的初始现金。当某个页面P被下载时,P的现金分配给从P分析的所有链接,P的现金被清空。根据现金数量对待爬取URL队列中的所有页面进行排序。
2.3.六大网站优先策略
所有待爬取的URL队列中的网页都按照它们所属的网站进行分类。网站需要下载的页面较多,请先下载。这种策略也称为大站点优先策略。
3、爬虫分类
我应该选择 Nutch、Crawler4j、WebMagic、scrapy、WebCollector 还是其他来开发网络爬虫?上面提到的爬虫类,基本上可以分为三类:
(1)分布式爬虫:Nutch
(2)JAVA 爬虫:Crawler4j、WebMagic、WebCollector
(3)非JAVA爬虫:scrapy(基于Python语言开发)
3.1 分布式爬虫
爬虫使用分布式,主要解决两个问题:
1)海量网址管理
2)网速
现在比较流行的分布式爬虫是Apache的Nutch。但是对于大多数用户来说,Nutch 是这些爬虫中最差的选择,原因如下:
1)Nutch 是为搜索引擎设计的爬虫。大多数用户需要一个爬虫来进行准确的数据爬取(精细提取)。Nutch 运行的三分之二的流程是为搜索引擎设计的。提取意义不大。换句话说,使用 Nutch 进行数据提取会在不必要的计算上浪费大量时间。而如果你试图通过二次开发使Nutch适合提取业务,那你基本上会破坏Nutch的框架,把Nutch改得面目全非,而且有能力修改Nutch,还不如自己写一个新的。分布式爬虫框架。
2)Nutch 依赖hadoop 运行,hadoop 本身消耗大量时间。如果集群机器数量少,爬取速度不如单机爬虫快。
3)虽然Nutch有一套插件机制,但还是作为亮点来宣传的。可以看到一些开源的Nutch插件,提供精准提取功能。但是任何开发过 Nutch 插件的人都知道 Nutch 的插件系统有多糟糕。使用反射机制加载和调用插件,使得程序的编写和调试变得异常困难,更不用说在其上开发复杂的提取系统了。并且 Nutch 没有提供对应的插件挂载点进行精细提取。Nutch的插件只有五六个挂载点,而这五六个挂载点都是给搜索引擎服务的,不提供细提取的挂载点。Nutch 的大部分精炼提取插件都挂载在“页面解析”(parser)挂载点上。这个挂载点其实是用来解析链接(为后续爬取提供URL)和提供一些搜索引擎的。易于提取的网页信息(元信息、网页文本)。
4)使用Nutch进行爬虫的二次开发,编写和调试爬虫所需的时间往往是单机爬虫所需时间的十倍以上。学习 Nutch 源码的成本非常高,更何况团队中的每个人都必须了解 Nutch 源码。在调试过程中,会出现程序本身以外的各种问题(hadoop问题、hbase问题)。
5)很多人说Nutch2有gora,可以将数据持久化到avro文件、hbase、mysql等,其实很多人都误解了。这里所说的持久化数据是指在avro、hbase、mysql中存储URL信息(URL管理所需的数据)。不是您要提取的结构化数据。事实上,对于大多数人来说,URL 信息存在于何处并不重要。
6)Nutch2 的版本目前不适合开发。Nutch的官方稳定版是nutch2.2.1,但是这个版本绑定了gora-0.3。如果要使用hbase和nutch(大多数人使用nutch2是为了使用hbase),只能使用版本0.90左右的hbase,相应地,将hadoop版本降低到hadoop 0.左右@>2。而且nutch2的官方教程也颇具误导性。Nutch2的教程有两个,分别是Nutch1.x和Nutch2.x。Nutch2.x官网是为了支持hbase0.94而写的。但其实这个Nutch2.x是指Nutch2.3之前和Nutch2.2.1之后的一个版本,在官方SVN中不断更新。而且它'
所以,如果你不是搜索引擎,尽量不要选择 Nutch 作为爬虫。一些团队喜欢跟风。他们坚持选择Nutch来开发精制履带。其实是针对Nutch的名声(Nutch的作者是Doug Cutting)。当然,最终的结果往往是项目延期。
如果你在做搜索引擎,Nutch1.x 是一个非常不错的选择。Nutch1.x 和 solr 或 es 可以组成一个非常强大的搜索引擎。如果必须使用 Nutch2,建议等到 Nutch2.3 发布。当前的 Nutch2 是一个非常不稳定的版本。
分布式爬虫平台架构图
3.2 JAVA爬虫
在这里,将JAVA爬虫划分为一个单独的类别,因为JAVA在网络爬虫的生态系统中非常完善。相关资料也是最全的。这里可能有争议,我只是随便说说。
其实开源网络爬虫(框架)的开发很简单,难点和复杂的问题已经被前人解决了(比如DOM树解析定位、字符集检测、海量URL去重),可以说没有技术含量。包括Nutch,其实Nutch的技术难点就是开发hadoop,代码本身也很简单。从某种意义上说,网络爬虫类似于遍历本机的文件以查找文件中的信息。没有任何困难。选择开源爬虫框架的原因是为了省事。比如爬虫的URL管理、线程池等模块,任何人都可以做,但是需要一段时间的调试和修改才能稳定下来。
对于爬虫的功能。用户比较关心的问题往往是:
1)爬虫是否支持多线程,爬虫可以使用代理,爬虫可以抓取重复数据,爬虫可以抓取JS生成的信息吗?
不支持多线程、不支持代理、不能过滤重复URL的不叫开源爬虫,叫循环执行http请求。
js生成的信息能否被爬取与爬虫本身关系不大。爬虫主要负责遍历网站和下载页面。爬取js产生的信息与网页信息提取模块有关,往往需要通过模拟浏览器(htmlunit、selenium)来完成。这些模拟浏览器通常需要花费大量时间来处理一个页面。因此,一种策略是利用这些爬虫遍历网站,当遇到需要解析的页面时,将网页的相关信息提交给模拟浏览器,完成对JS生成信息的提取。
2)爬虫可以抓取ajax信息吗?
网页上有一些异步加载的数据。爬取这个数据有两种方式:使用模拟浏览器(问题1中描述),或者分析ajax的http请求,自己生成ajax请求的url,获取返回的数据。如果你自己生成ajax请求,那么使用开源爬虫有什么意义呢?其实就是利用开源爬虫的线程池和URL管理功能(比如断点爬取)。
如果我已经可以生成我需要的ajax请求(列表),我该如何使用这些爬虫来爬取这些请求呢?
爬虫往往被设计成广度遍历或深度遍历的方式来遍历静态或动态页面。爬取ajax信息属于深网(deep web)的范畴,虽然大部分爬虫并不直接支持。但它也可以通过某些方式完成。例如,WebCollector 使用广度遍历来遍历 网站。爬虫的第一轮爬取就是爬取种子集(seeds)中的所有url。简单来说就是将生成的ajax请求作为种子,放入爬虫中。使用爬虫对这些种子进行深度为 1 的广度遍历(默认为广度遍历)。
3)爬虫如何爬取待登录的网站?
这些开源爬虫都支持在爬取时指定cookies,而模拟登录主要依赖cookies。至于如何获取cookies,就不是爬虫管理的问题了。您可以手动获取cookies,使用http请求模拟登录,或者使用模拟浏览器自动登录。
4)爬虫如何从网页中提取信息?
开源爬虫一般会集成网页提取工具。主要支持两种规范:CSS SELECTOR 和 XPATH。至于哪个更好,我这里就不评论了。
5)爬虫是如何保存网页信息的?
有一些爬虫带有一个负责持久性的模块。例如,webmagic 有一个名为 pipeline 的模块。通过简单的配置,爬虫提取的信息可以持久化到文件、数据库等。还有一些爬虫不直接为用户提供数据持久化模块。比如 crawler4j 和 webcollector。让用户在网页处理模块中添加提交数据库的操作。至于用管道模块好不好,就类似于用ORM操作数据库好不好的问题,看你的业务。
6)爬虫被网站拦截了怎么办?
爬虫被网站阻塞,可以通过使用多个代理(随机代理)来解决。但是这些开源爬虫一般不直接支持随机代理的切换。因此,用户经常需要将获取到的agent放入一个全局数组中,并编写一段代码让agent随机获取(从数组中)。
7)网页可以调用爬虫吗?
爬虫的调用是在Web的服务器端调用的。您可以按照平时使用的方式使用它。可以使用这些爬虫。
8)爬虫速度怎么样?
单机开源爬虫的速度基本可以用到本地网速的极限。爬虫速度慢往往是因为用户减少了线程数,网速慢,或者数据持久化时与数据库的交互慢。而这些东西往往是由用户的机器和二次开发的代码决定的。这些开源爬虫的速度非常好。
9) 明明代码写对了,但是数据爬不出来。爬虫有问题吗?不同的爬虫可以解决吗?
如果代码写得正确,无法爬取数据,其他爬虫也将无法爬取。在这种情况下,要么是 网站 阻止了您,要么您抓取的数据是由 javascript 生成的。如果无法爬取数据,则无法通过更改爬虫来解决。
10)哪个爬虫可以判断网站是否已经爬完,哪个爬虫可以根据主题爬取?
爬虫无法判断网站是否已经爬完,只能尽量覆盖。
至于根据主题爬,爬虫把内容爬下来后就知道主题是什么了。因此,通常是整体爬下来,然后对内容进行过滤。如果爬取的范围太广,可以通过限制 URL 正则化来缩小范围。
11)哪个爬虫的设计模式和架构比较好?
设计模式是胡说八道。都说软件设计模式不错,软件开发后总结了几种设计模式。设计模式对软件开发没有指导意义。使用设计模式设计爬虫只会让爬虫的设计更加臃肿。
至于架构,目前开源爬虫主要是设计详细的数据结构,比如爬取线程池、任务队列等,大家都可以控制。爬虫的业务太简单了,用任何框架都谈不上。
所以对于 JAVA 开源爬虫,我认为,只要找到一个运行良好的。如果业务复杂,使用哪个爬虫,只能通过复杂的二次开发来满足需求。
3.3 非JAVA爬虫
在非JAVA语言编写的爬虫中,不乏优秀的爬虫。这里提取为一个类别,不是为了讨论爬虫本身的好坏,而是为了讨论larbin、scrapy等爬虫对开发成本的影响。
先说python爬虫,python用30行代码就可以完成JAVA 50行代码的任务。Python写代码确实很快,但是在调试代码阶段,调试python代码所消耗的时间往往比编码阶段节省的时间要多得多。使用python开发,为了保证程序的正确性和稳定性,需要编写更多的测试模块。当然,如果爬取规模不大,爬取业务也不复杂,用scrapy还是不错的,可以轻松完成爬取任务。
上图是Scrapy的架构图。绿线是数据流。从初始 URL 开始,Scheduler 会将其交给 Downloader 进行下载。下载完成后交给 Spider 进行分析,将要保存的数据发送到 Item Pipeline ,也就是对数据进行后处理。此外,可以在数据流通道中安装各种中间件,进行必要的处理。因此,在开发爬虫时,最好先规划好各个模块。我的做法是分别规划下载模块、爬取模块、调度模块、数据存储模块。
对于C++爬虫来说,学习成本会比较大。而且不能只计算一个人的学习成本。如果软件需要一个团队来开发或者移交,那就是很多人的学习成本。软件调试不是那么容易。
还有一些ruby和php爬虫,这里就不多评价了。确实有一些非常小的data采集任务,在ruby或者php中都用得上。但是,要选择这些语言的开源爬虫,一方面需要调查相关的生态系统,另一方面,这些开源爬虫可能存在一些你找不到的bug(很少有人使用它们,而且信息也较少)
4、反爬虫技术
由于搜索引擎的普及,网络爬虫已经成为一种非常流行的网络技术。除了专注于搜索的谷歌、雅虎、微软和百度之外,几乎每个大型门户网站网站都有自己的搜索引擎,无论大小。可以叫的名字有几十种,不知道的种类有上万种。对于一个内容驱动的网站,难免会被网络爬虫光顾。
一些智能搜索引擎爬虫的爬取频率比较合理,资源消耗也比较小,但是很多不良网络爬虫对网页的爬取能力较差,经常会循环重复上百个请求。拿,这种爬虫对中小型网站来说往往是毁灭性的打击,尤其是一些缺乏爬虫编写经验的程序员编写的爬虫,破坏性极大,导致网站访问压力会很大非常大,这将导致 网站 访问缓慢甚至无法访问。
一般网站反爬虫从三个方面:用户请求的头文件、用户行为、网站目录和数据加载方式。前两种比较容易遇到,从这些角度来看,大部分网站都是反爬虫。会使用第三种使用ajax的网站,增加了爬取的难度。
4.1 反爬虫通过Headers
反爬取用户请求的头部是最常见的反爬取策略。很多网站会检测Headers的User-Agent,有的网站会检测Referer(有些资源的防盗链网站就是检测Referer)。如果遇到这种反爬虫机制,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值改为目标网站域名【注释:往往容易被Ignore,通过对请求的抓包分析,确定referer,在模拟访问请求的header中添加】在节目中。对于检测Headers的反爬虫,在爬虫中修改或添加Headers可以很好的绕过。
4.2 基于用户行为的反爬虫
网站的另一部分是检测用户行为,比如同一个IP在短时间内多次访问同一个页面,或者同一个账号在短时间内多次执行相同的操作。【这个反爬需要有足够的ip来处理】
大多数网站都是前一种情况,使用IP代理就可以了。可以专门写一个爬虫来爬取网上公开的代理ip,检测到后全部保存。这样的代理ip爬虫经常使用,最好自己准备一个。有大量代理IP,可以每隔几次更换一个IP,这在requests或者urllib2中很容易做到,这样就可以轻松绕过第一个反爬虫。[评论:动态拨号也是一种解决方案]
对于第二种情况,下一个请求可以在每个请求之后以几秒的随机间隔发出。一些有逻辑漏洞的网站可以通过多次请求、注销、重新登录、继续请求的方式绕过同一账号短时间内不能多次请求的限制。【点评:账号反爬限制一般比较难处理,随机几秒的请求可能经常被屏蔽。如果可以有多个账号,切换使用,效果会更好】
4.3 动态页面的反爬虫
以上情况大多出现在静态页面中,也有一些网站,我们需要爬取的数据是通过ajax请求获取的,或者通过Java生成的。一、使用Firebug或者HttpFox分析网络请求【点评:我感觉Google和IE的网络请求分析和使用也很不错】。如果我们能找到ajax请求并分析出具体参数和响应的具体含义,就可以使用上面的方法,直接使用requests或者urllib2来模拟ajax请求,分析响应json得到需要的数据。
能够直接模拟ajax请求获取数据是很棒的,但是有的网站把ajax请求的所有参数都加密了。我们根本无法构造对我们需要的数据的请求。我这几天爬的网站就是这样的。除了对ajax参数进行加密外,还封装了一些基础功能,都是调用自己的接口,接口参数是加密的。遇到这样的网站,我们就不能使用上面的方法了。我使用selenium+phantomJS框架调用浏览器内核,使用phantomJS执行js模拟人类操作,触发页面中的js脚本。从填表到点击按钮再到页面滚动,都可以模拟,不管具体的请求和响应过程,只是一个完整的模拟人们浏览页面获取数据的过程。[评论:支持phantomJS]
使用这个框架几乎可以绕过大部分反爬虫,因为它不是冒充浏览器获取数据(上面提到的添加header在一定程度上是冒充浏览器),它本身就是浏览器,而且phantomJS 是一个没有界面的浏览器,但控制浏览器的不是人。使用selenium+phantomJS可以做很多事情,比如识别touch-type(12306)或者滑动验证码,暴力破解页面表单等)。它还将在自动化渗透中发挥重要作用,并将在未来发挥作用。提到这一点。 查看全部
htmlunit抓取动态网页(Web网络爬虫系统的原理及应用)
1、爬虫技术概述
网络爬虫是根据一定的规则自动从万维网上爬取信息的程序或脚本。它们广泛用于互联网搜索引擎或其他类似的网站,它可以自动采集它可以访问的所有页面获取或更新这些网站的内容和检索方法。从功能上来说,爬虫一般分为数据采集、处理、存储三部分。传统爬虫从一个或多个初始网页的URL开始,获取初始网页上的URL。在抓取网页的过程中,它不断地从当前页面中提取新的 URL 并放入队列中,直到满足系统的某些停止条件。焦点爬虫的工作流程比较复杂。它需要按照一定的网页分析算法过滤掉与主题无关的链接,保留有用的链接,并放入等待抓取的URL队列中。然后,它会根据一定的搜索策略从队列中选择下一个要爬取的网页URL,并重复上述过程,直到达到系统的一定条件并停止。此外,爬虫爬取的所有网页都会被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。保留有用的链接并将它们放入等待抓取的 URL 队列中。然后,它会根据一定的搜索策略从队列中选择下一个要爬取的网页URL,并重复上述过程,直到达到系统的一定条件并停止。此外,爬虫爬取的所有网页都会被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。保留有用的链接并将它们放入等待抓取的 URL 队列中。然后,它会根据一定的搜索策略从队列中选择下一个要爬取的网页URL,并重复上述过程,直到达到系统的一定条件并停止。此外,爬虫爬取的所有网页都会被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。爬虫抓取到的所有网页都将被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。爬虫抓取到的所有网页都将被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。
与通用网络爬虫相比,聚焦爬虫还需要解决三个主要问题:
(1) 获取目标的描述或定义;
(2) 网页或数据的分析和过滤;
(3) URL 的搜索策略。
2、爬虫原理
2.1 网络爬虫原理
网络爬虫系统的功能是下载网页数据,为搜索引擎系统提供数据源。许多大型网络搜索引擎系统被称为基于Web数据的搜索引擎系统采集,如Google、百度等。这显示了网络爬虫系统在搜索引擎中的重要性。除了供用户阅读的文字信息外,网页还收录一些超链接信息。网络爬虫系统通过网页中的超链接信息不断获取网络上的其他网页。正是因为这个采集进程像爬虫或者蜘蛛一样在网络上漫游,所以才叫做网络爬虫系统或者网络蜘蛛系统,英文叫Spider或者Crawler。
2.2 网络爬虫系统的工作原理
在网络爬虫的系统框架中,主要流程由控制器、解析器和资源库三部分组成。控制器的主要工作是为多个线程中的每个爬虫线程分配工作任务。解析器的主要工作是下载网页和处理页面,主要是处理一些JS脚本标签、CSS代码内容、空格字符、HTML标签等。爬虫的基本工作是由解析器完成的。资源库用于存储下载的网络资源。通常使用大型数据库,例如 Oracle 数据库来存储和索引它。
控制器
控制器是网络爬虫的中央控制器。主要负责根据系统发送的URL链接分配一个线程,然后启动线程调用爬虫爬取网页。
解析器
解析器负责网络爬虫的主要部分。它的主要任务是:下载网页的功能,处理网页的文本,如过滤,提取特殊的HTML标签,分析数据。
资源库
它主要是一个容器,用于存储从网页下载的数据记录,并为索引生成提供目标源。大中型数据库产品包括:Oracle、Sql Server等。
网络爬虫系统一般会选择一些比较重要的出度(网页中超链接数)网站较大的URL作为种子URL集。网络爬虫系统使用这些种子集作为初始 URL 来开始数据爬取。因为网页中收录链接信息,所以会通过已有网页的URL获取一些新的URL。网页之间的指向结构可以看作是一片森林。每个种子 URL 对应的网页是森林中一棵树的根节点。. 这样,网络爬虫系统就可以按照广度优先算法或深度优先算法遍历所有网页。由于深度优先搜索算法可能导致爬虫系统陷入网站内部,不利于搜索距离网站首页比较近的网页信息,一般采用广度优先搜索算法采集网页。网络爬虫系统首先将种子 URL 放入下载队列,然后简单地从队列头部获取一个 URL 来下载其对应的网页。获取网页内容并存储后,通过解析网页中的链接信息可以得到一些新的URL,并将这些URL加入到下载队列中。然后取出一个URL,下载其对应的网页,然后解析,以此类推,直到遍历全网或者满足某个条件。网络爬虫系统首先将种子 URL 放入下载队列,然后简单地从队列头部获取一个 URL 来下载其对应的网页。获取网页内容并存储后,通过解析网页中的链接信息可以得到一些新的URL,并将这些URL加入到下载队列中。然后取出一个URL,下载其对应的网页,然后解析,以此类推,直到遍历全网或者满足某个条件。网络爬虫系统首先将种子 URL 放入下载队列,然后简单地从队列头部获取一个 URL 来下载其对应的网页。获取网页内容并存储后,通过解析网页中的链接信息可以得到一些新的URL,并将这些URL加入到下载队列中。然后取出一个URL,下载其对应的网页,然后解析,以此类推,直到遍历全网或者满足某个条件。
网络爬虫的基本工作流程如下:
1.首先选择一个精心挑选的种子 URL 的子集;
2.将这些网址放入待抓取的网址队列中;
3. 从待爬取URL队列中取出待爬取的URL,解析DNS,获取主机IP,下载该URL对应的网页,存入下载的网页库中。此外,将这些 URL 放入 Crawl URL 队列。
4.解析URL队列中已经爬取的URL,分析其中的其他URL,将URL放入待爬取的URL队列,从而进入下一个循环。
2.3 爬取策略
在爬虫系统中,待爬取的 URL 队列是一个重要的部分。待爬取的URL队列中的URL的排列顺序也是一个重要的问题,因为它涉及到先爬到哪个页面,再爬到哪个页面。确定这些 URL 排列顺序的方法称为爬取策略。下面重点介绍几种常见的爬取策略:
2.3.1 深度优先遍历策略
深度优先遍历策略是指网络爬虫会从起始页开始,每次一个链接跟踪每个链接,处理完该行后移动到下一个起始页,并继续跟踪该链接。我们以下图为例:
遍历的路径:AFG EHI BCD
2.3.2 广度优先遍历策略
广度优先遍历的基本思想是将新下载的网页中找到的链接直接插入待爬取URL队列的末尾。也就是说,网络爬虫会先爬取起始网页链接的所有网页,然后选择其中一个链接的网页,继续爬取该网页链接的所有网页。或者以上图为例:
遍历路径:ABCDEF GHI
2.3.3 反向链接策略
反向链接数是指从其他网页指向一个网页的链接数。反向链接的数量表示网页内容被他人推荐的程度。因此,在很多情况下,搜索引擎的爬取系统会使用这个指标来评估网页的重要性,从而确定不同网页的爬取顺序。
在真实的网络环境中,由于广告链接和作弊链接的存在,反向链接的数量并不能完全等同于他人的重要性。因此,搜索引擎倾向于考虑一些可靠的反向链接计数。
2.3.4部分PageRank策略
Partial PageRank算法借鉴了PageRank算法的思想:对于下载的网页,与待爬取的URL队列中的URL一起,形成一组网页,计算每个页面的PageRank值. URL 按 PageRank 值排序,并按该顺序抓取页面。
如果每次爬取一个页面都重新计算一次PageRank值,折中的解决方案是:每爬完K个页面,重新计算一次PageRank值。但是这种情况还是有一个问题:对于下载页面中分析的链接,也就是我们前面提到的那部分未知网页,暂时没有PageRank值。为了解决这个问题,给这些页面一个临时的PageRank值:把这个网页的所有传入链接传入的PageRank值聚合起来,从而形成未知页面的PageRank值,从而参与排序. 以下示例说明:
2.3.5OPICStrategy
该算法实际上为页面分配了一个重要性分数。在算法开始之前,所有页面都会获得相同的初始现金。当某个页面P被下载时,P的现金分配给从P分析的所有链接,P的现金被清空。根据现金数量对待爬取URL队列中的所有页面进行排序。
2.3.六大网站优先策略
所有待爬取的URL队列中的网页都按照它们所属的网站进行分类。网站需要下载的页面较多,请先下载。这种策略也称为大站点优先策略。
3、爬虫分类
我应该选择 Nutch、Crawler4j、WebMagic、scrapy、WebCollector 还是其他来开发网络爬虫?上面提到的爬虫类,基本上可以分为三类:
(1)分布式爬虫:Nutch
(2)JAVA 爬虫:Crawler4j、WebMagic、WebCollector
(3)非JAVA爬虫:scrapy(基于Python语言开发)
3.1 分布式爬虫
爬虫使用分布式,主要解决两个问题:
1)海量网址管理
2)网速
现在比较流行的分布式爬虫是Apache的Nutch。但是对于大多数用户来说,Nutch 是这些爬虫中最差的选择,原因如下:
1)Nutch 是为搜索引擎设计的爬虫。大多数用户需要一个爬虫来进行准确的数据爬取(精细提取)。Nutch 运行的三分之二的流程是为搜索引擎设计的。提取意义不大。换句话说,使用 Nutch 进行数据提取会在不必要的计算上浪费大量时间。而如果你试图通过二次开发使Nutch适合提取业务,那你基本上会破坏Nutch的框架,把Nutch改得面目全非,而且有能力修改Nutch,还不如自己写一个新的。分布式爬虫框架。
2)Nutch 依赖hadoop 运行,hadoop 本身消耗大量时间。如果集群机器数量少,爬取速度不如单机爬虫快。
3)虽然Nutch有一套插件机制,但还是作为亮点来宣传的。可以看到一些开源的Nutch插件,提供精准提取功能。但是任何开发过 Nutch 插件的人都知道 Nutch 的插件系统有多糟糕。使用反射机制加载和调用插件,使得程序的编写和调试变得异常困难,更不用说在其上开发复杂的提取系统了。并且 Nutch 没有提供对应的插件挂载点进行精细提取。Nutch的插件只有五六个挂载点,而这五六个挂载点都是给搜索引擎服务的,不提供细提取的挂载点。Nutch 的大部分精炼提取插件都挂载在“页面解析”(parser)挂载点上。这个挂载点其实是用来解析链接(为后续爬取提供URL)和提供一些搜索引擎的。易于提取的网页信息(元信息、网页文本)。
4)使用Nutch进行爬虫的二次开发,编写和调试爬虫所需的时间往往是单机爬虫所需时间的十倍以上。学习 Nutch 源码的成本非常高,更何况团队中的每个人都必须了解 Nutch 源码。在调试过程中,会出现程序本身以外的各种问题(hadoop问题、hbase问题)。
5)很多人说Nutch2有gora,可以将数据持久化到avro文件、hbase、mysql等,其实很多人都误解了。这里所说的持久化数据是指在avro、hbase、mysql中存储URL信息(URL管理所需的数据)。不是您要提取的结构化数据。事实上,对于大多数人来说,URL 信息存在于何处并不重要。
6)Nutch2 的版本目前不适合开发。Nutch的官方稳定版是nutch2.2.1,但是这个版本绑定了gora-0.3。如果要使用hbase和nutch(大多数人使用nutch2是为了使用hbase),只能使用版本0.90左右的hbase,相应地,将hadoop版本降低到hadoop 0.左右@>2。而且nutch2的官方教程也颇具误导性。Nutch2的教程有两个,分别是Nutch1.x和Nutch2.x。Nutch2.x官网是为了支持hbase0.94而写的。但其实这个Nutch2.x是指Nutch2.3之前和Nutch2.2.1之后的一个版本,在官方SVN中不断更新。而且它'
所以,如果你不是搜索引擎,尽量不要选择 Nutch 作为爬虫。一些团队喜欢跟风。他们坚持选择Nutch来开发精制履带。其实是针对Nutch的名声(Nutch的作者是Doug Cutting)。当然,最终的结果往往是项目延期。
如果你在做搜索引擎,Nutch1.x 是一个非常不错的选择。Nutch1.x 和 solr 或 es 可以组成一个非常强大的搜索引擎。如果必须使用 Nutch2,建议等到 Nutch2.3 发布。当前的 Nutch2 是一个非常不稳定的版本。
分布式爬虫平台架构图
3.2 JAVA爬虫
在这里,将JAVA爬虫划分为一个单独的类别,因为JAVA在网络爬虫的生态系统中非常完善。相关资料也是最全的。这里可能有争议,我只是随便说说。
其实开源网络爬虫(框架)的开发很简单,难点和复杂的问题已经被前人解决了(比如DOM树解析定位、字符集检测、海量URL去重),可以说没有技术含量。包括Nutch,其实Nutch的技术难点就是开发hadoop,代码本身也很简单。从某种意义上说,网络爬虫类似于遍历本机的文件以查找文件中的信息。没有任何困难。选择开源爬虫框架的原因是为了省事。比如爬虫的URL管理、线程池等模块,任何人都可以做,但是需要一段时间的调试和修改才能稳定下来。
对于爬虫的功能。用户比较关心的问题往往是:
1)爬虫是否支持多线程,爬虫可以使用代理,爬虫可以抓取重复数据,爬虫可以抓取JS生成的信息吗?
不支持多线程、不支持代理、不能过滤重复URL的不叫开源爬虫,叫循环执行http请求。
js生成的信息能否被爬取与爬虫本身关系不大。爬虫主要负责遍历网站和下载页面。爬取js产生的信息与网页信息提取模块有关,往往需要通过模拟浏览器(htmlunit、selenium)来完成。这些模拟浏览器通常需要花费大量时间来处理一个页面。因此,一种策略是利用这些爬虫遍历网站,当遇到需要解析的页面时,将网页的相关信息提交给模拟浏览器,完成对JS生成信息的提取。
2)爬虫可以抓取ajax信息吗?
网页上有一些异步加载的数据。爬取这个数据有两种方式:使用模拟浏览器(问题1中描述),或者分析ajax的http请求,自己生成ajax请求的url,获取返回的数据。如果你自己生成ajax请求,那么使用开源爬虫有什么意义呢?其实就是利用开源爬虫的线程池和URL管理功能(比如断点爬取)。
如果我已经可以生成我需要的ajax请求(列表),我该如何使用这些爬虫来爬取这些请求呢?
爬虫往往被设计成广度遍历或深度遍历的方式来遍历静态或动态页面。爬取ajax信息属于深网(deep web)的范畴,虽然大部分爬虫并不直接支持。但它也可以通过某些方式完成。例如,WebCollector 使用广度遍历来遍历 网站。爬虫的第一轮爬取就是爬取种子集(seeds)中的所有url。简单来说就是将生成的ajax请求作为种子,放入爬虫中。使用爬虫对这些种子进行深度为 1 的广度遍历(默认为广度遍历)。
3)爬虫如何爬取待登录的网站?
这些开源爬虫都支持在爬取时指定cookies,而模拟登录主要依赖cookies。至于如何获取cookies,就不是爬虫管理的问题了。您可以手动获取cookies,使用http请求模拟登录,或者使用模拟浏览器自动登录。
4)爬虫如何从网页中提取信息?
开源爬虫一般会集成网页提取工具。主要支持两种规范:CSS SELECTOR 和 XPATH。至于哪个更好,我这里就不评论了。
5)爬虫是如何保存网页信息的?
有一些爬虫带有一个负责持久性的模块。例如,webmagic 有一个名为 pipeline 的模块。通过简单的配置,爬虫提取的信息可以持久化到文件、数据库等。还有一些爬虫不直接为用户提供数据持久化模块。比如 crawler4j 和 webcollector。让用户在网页处理模块中添加提交数据库的操作。至于用管道模块好不好,就类似于用ORM操作数据库好不好的问题,看你的业务。
6)爬虫被网站拦截了怎么办?
爬虫被网站阻塞,可以通过使用多个代理(随机代理)来解决。但是这些开源爬虫一般不直接支持随机代理的切换。因此,用户经常需要将获取到的agent放入一个全局数组中,并编写一段代码让agent随机获取(从数组中)。
7)网页可以调用爬虫吗?
爬虫的调用是在Web的服务器端调用的。您可以按照平时使用的方式使用它。可以使用这些爬虫。
8)爬虫速度怎么样?
单机开源爬虫的速度基本可以用到本地网速的极限。爬虫速度慢往往是因为用户减少了线程数,网速慢,或者数据持久化时与数据库的交互慢。而这些东西往往是由用户的机器和二次开发的代码决定的。这些开源爬虫的速度非常好。
9) 明明代码写对了,但是数据爬不出来。爬虫有问题吗?不同的爬虫可以解决吗?
如果代码写得正确,无法爬取数据,其他爬虫也将无法爬取。在这种情况下,要么是 网站 阻止了您,要么您抓取的数据是由 javascript 生成的。如果无法爬取数据,则无法通过更改爬虫来解决。
10)哪个爬虫可以判断网站是否已经爬完,哪个爬虫可以根据主题爬取?
爬虫无法判断网站是否已经爬完,只能尽量覆盖。
至于根据主题爬,爬虫把内容爬下来后就知道主题是什么了。因此,通常是整体爬下来,然后对内容进行过滤。如果爬取的范围太广,可以通过限制 URL 正则化来缩小范围。
11)哪个爬虫的设计模式和架构比较好?
设计模式是胡说八道。都说软件设计模式不错,软件开发后总结了几种设计模式。设计模式对软件开发没有指导意义。使用设计模式设计爬虫只会让爬虫的设计更加臃肿。
至于架构,目前开源爬虫主要是设计详细的数据结构,比如爬取线程池、任务队列等,大家都可以控制。爬虫的业务太简单了,用任何框架都谈不上。
所以对于 JAVA 开源爬虫,我认为,只要找到一个运行良好的。如果业务复杂,使用哪个爬虫,只能通过复杂的二次开发来满足需求。
3.3 非JAVA爬虫
在非JAVA语言编写的爬虫中,不乏优秀的爬虫。这里提取为一个类别,不是为了讨论爬虫本身的好坏,而是为了讨论larbin、scrapy等爬虫对开发成本的影响。
先说python爬虫,python用30行代码就可以完成JAVA 50行代码的任务。Python写代码确实很快,但是在调试代码阶段,调试python代码所消耗的时间往往比编码阶段节省的时间要多得多。使用python开发,为了保证程序的正确性和稳定性,需要编写更多的测试模块。当然,如果爬取规模不大,爬取业务也不复杂,用scrapy还是不错的,可以轻松完成爬取任务。
上图是Scrapy的架构图。绿线是数据流。从初始 URL 开始,Scheduler 会将其交给 Downloader 进行下载。下载完成后交给 Spider 进行分析,将要保存的数据发送到 Item Pipeline ,也就是对数据进行后处理。此外,可以在数据流通道中安装各种中间件,进行必要的处理。因此,在开发爬虫时,最好先规划好各个模块。我的做法是分别规划下载模块、爬取模块、调度模块、数据存储模块。
对于C++爬虫来说,学习成本会比较大。而且不能只计算一个人的学习成本。如果软件需要一个团队来开发或者移交,那就是很多人的学习成本。软件调试不是那么容易。
还有一些ruby和php爬虫,这里就不多评价了。确实有一些非常小的data采集任务,在ruby或者php中都用得上。但是,要选择这些语言的开源爬虫,一方面需要调查相关的生态系统,另一方面,这些开源爬虫可能存在一些你找不到的bug(很少有人使用它们,而且信息也较少)
4、反爬虫技术
由于搜索引擎的普及,网络爬虫已经成为一种非常流行的网络技术。除了专注于搜索的谷歌、雅虎、微软和百度之外,几乎每个大型门户网站网站都有自己的搜索引擎,无论大小。可以叫的名字有几十种,不知道的种类有上万种。对于一个内容驱动的网站,难免会被网络爬虫光顾。
一些智能搜索引擎爬虫的爬取频率比较合理,资源消耗也比较小,但是很多不良网络爬虫对网页的爬取能力较差,经常会循环重复上百个请求。拿,这种爬虫对中小型网站来说往往是毁灭性的打击,尤其是一些缺乏爬虫编写经验的程序员编写的爬虫,破坏性极大,导致网站访问压力会很大非常大,这将导致 网站 访问缓慢甚至无法访问。
一般网站反爬虫从三个方面:用户请求的头文件、用户行为、网站目录和数据加载方式。前两种比较容易遇到,从这些角度来看,大部分网站都是反爬虫。会使用第三种使用ajax的网站,增加了爬取的难度。
4.1 反爬虫通过Headers
反爬取用户请求的头部是最常见的反爬取策略。很多网站会检测Headers的User-Agent,有的网站会检测Referer(有些资源的防盗链网站就是检测Referer)。如果遇到这种反爬虫机制,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值改为目标网站域名【注释:往往容易被Ignore,通过对请求的抓包分析,确定referer,在模拟访问请求的header中添加】在节目中。对于检测Headers的反爬虫,在爬虫中修改或添加Headers可以很好的绕过。
4.2 基于用户行为的反爬虫
网站的另一部分是检测用户行为,比如同一个IP在短时间内多次访问同一个页面,或者同一个账号在短时间内多次执行相同的操作。【这个反爬需要有足够的ip来处理】
大多数网站都是前一种情况,使用IP代理就可以了。可以专门写一个爬虫来爬取网上公开的代理ip,检测到后全部保存。这样的代理ip爬虫经常使用,最好自己准备一个。有大量代理IP,可以每隔几次更换一个IP,这在requests或者urllib2中很容易做到,这样就可以轻松绕过第一个反爬虫。[评论:动态拨号也是一种解决方案]
对于第二种情况,下一个请求可以在每个请求之后以几秒的随机间隔发出。一些有逻辑漏洞的网站可以通过多次请求、注销、重新登录、继续请求的方式绕过同一账号短时间内不能多次请求的限制。【点评:账号反爬限制一般比较难处理,随机几秒的请求可能经常被屏蔽。如果可以有多个账号,切换使用,效果会更好】
4.3 动态页面的反爬虫
以上情况大多出现在静态页面中,也有一些网站,我们需要爬取的数据是通过ajax请求获取的,或者通过Java生成的。一、使用Firebug或者HttpFox分析网络请求【点评:我感觉Google和IE的网络请求分析和使用也很不错】。如果我们能找到ajax请求并分析出具体参数和响应的具体含义,就可以使用上面的方法,直接使用requests或者urllib2来模拟ajax请求,分析响应json得到需要的数据。
能够直接模拟ajax请求获取数据是很棒的,但是有的网站把ajax请求的所有参数都加密了。我们根本无法构造对我们需要的数据的请求。我这几天爬的网站就是这样的。除了对ajax参数进行加密外,还封装了一些基础功能,都是调用自己的接口,接口参数是加密的。遇到这样的网站,我们就不能使用上面的方法了。我使用selenium+phantomJS框架调用浏览器内核,使用phantomJS执行js模拟人类操作,触发页面中的js脚本。从填表到点击按钮再到页面滚动,都可以模拟,不管具体的请求和响应过程,只是一个完整的模拟人们浏览页面获取数据的过程。[评论:支持phantomJS]
使用这个框架几乎可以绕过大部分反爬虫,因为它不是冒充浏览器获取数据(上面提到的添加header在一定程度上是冒充浏览器),它本身就是浏览器,而且phantomJS 是一个没有界面的浏览器,但控制浏览器的不是人。使用selenium+phantomJS可以做很多事情,比如识别touch-type(12306)或者滑动验证码,暴力破解页面表单等)。它还将在自动化渗透中发挥重要作用,并将在未来发挥作用。提到这一点。
htmlunit抓取动态网页(动态网页的缺点主要表现在下面两个方面:缺点 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 78 次浏览 • 2022-04-15 01:04
)
什么是动态网页?
动态网页不代表网页是动态的,如FLASH、GIF动画图片等JS动态图片。
所谓动态网页,是指通过ASP、PHP、Cold Fusion、CGI等程序动态生成的页面,网页中的大部分数据内容来自于网站所连接的数据库。这个页面实际上在网络空间中并不存在,所以有些人看到某个页面的内容,想下载,但自然找不到资源。动态网页只有在接收到用户的访问请求后才会生成并传输到用户的浏览器中,而且由于访问者可以实时获得他们想要的数据,动态网页往往很容易给人留下深刻的印象。此外,动态网页还具有易于维护和更新的优点。
一些细心的朋友会发现,很多网页文件的扩展名不再只是“.htm”,还有“.php”、“.asp”等,都是动态网页技术产生的。
比如一部电影网站的播放页面,一部电影网站有上千部电影,每部电影有不止一集。如果一部电影有播放页面,恐怕服务器空间放这些页面也是个问题。事实上,大多数电影网站只有一个播放页面。网页中的所有内容都是从数据库中获取的。有一天如果页面不合适,你可以只修改这样一个页面。您不需要修改每个单独的页面。静态页面。可见,动态网页占用的服务器空间较小,易于更新和维护,对管理员来说非常方便。
动态网页的缺点是什么?
动态网页的缺点主要表现在以下两个方面:
一、首先,动态网页在访问速度上并不占优势
动态网页首先获取用户的指令,然后网页将指令带到数据库中,找到该指令对应的数据,然后传输给服务器。用户看到网页。问题就出来了。每次访问网页时,都必须经过这样一个过程。这个过程至少需要几秒钟。当访问者数量较多时,页面的加载速度会变慢,这也是服务器的负担。; 从用户的角度来看,网页加载缓慢,没有响应。下次谁会访问你的 网站。
静态网页很简单。静态网页实际上是存在的,没有经过服务器编译,直接加载到客户端的浏览器中显示。
可以看出,动态网页在访问速度上并不占优势。
二、在搜索引擎中不占优势收录
上面我是从服务器和用户体验的角度讲的,下面从搜索引擎的角度讲收录。动态网页是用户输入指令后形成的页面。这个页面不存在,搜索引擎只会爬现成的,不会自己打字,网站在搜索引擎收录中没有优势。搜索引擎仍然更喜欢静态页面。
但是,搜索引擎正在不断改进。到目前为止,绝大多数搜索引擎都支持动态页面的爬取。
流行的动态网页新技术
早期的动态网页主要采用CGI技术,CGI即Common Gateway Interface(公共网关接口)。您可以使用不同的程序编写合适的 CGI 程序,例如 Visual Basic、Delphi 或 C/C++ 等。由于编程难度大、效率低、修改复杂,有逐渐被新技术取代的趋势。
以下是目前备受关注的一些比较流行的新技术:
1、PHP 是超文本预处理器,是当今 Internet 上最流行的脚本语言。它的语法借鉴了C、Java、PERL等语言,但只需要一点编程知识。可以使用 PHP 构建一个真正的交互式网站。它对HTML语言有很好的兼容性,用户可以直接在脚本代码中添加HTML标签,或者在HTML标签中添加脚本代码,更好地实现页面控制。PHP提供标准的数据库接口,数据库连接方便,兼容性强;扩展性强;可以进行面向对象的编程。
2、ASP 是活动服务器页面。它是微软开发的HTML(超文本标记语言)、脚本(Script)和CGI(通用网关接口)的组合。它不提供自己的特殊编程语言。,但允许用户使用许多现有的脚本语言编写 ASP 应用程序。ASP 编程比 HTML 更方便、更灵活。它运行在 Web 服务器端,然后将运行结果以 HTML 格式发送到客户端的浏览器。因此,ASP 比一般的脚本语言安全得多。
ASP最大的优点是可以收录HTML标签,还可以直接访问数据库,使用无限扩展的ActiveX控件,所以在编程上比HTML更方便、更灵活。通过使用ASP的组件和对象技术,用户可以直接使用ActiveX控件,调用对象方法和属性,以简单的方式实现强大的交互功能。缺点是因为基本上受限于微软的操作系统平台,主要的工作环境是微软的IIS应用程序结构,而且由于ActiveX对象具有平台特性,ASP技术在跨平台的Web服务器中不能轻易实现。在工作。
3、JSP代表Java Server Pages,是1999年6月推出的一项新技术,是一种基于Java Servlet和整个Java系统的Web开发技术。JSP和ASP在技术上有很多相似之处,但是来自不同的技术规范组织,所以ASP一般只用在Windows NT/2000平台上,而JSP可以运行在85%以上的服务器上,并且是基于JSP技术的应用程序比基于 ASP 的应用程序更易于维护和管理,因此被许多人认为是未来最有前途的动态 网站 技术。
查看全部
htmlunit抓取动态网页(动态网页的缺点主要表现在下面两个方面:缺点
)
什么是动态网页?
动态网页不代表网页是动态的,如FLASH、GIF动画图片等JS动态图片。
所谓动态网页,是指通过ASP、PHP、Cold Fusion、CGI等程序动态生成的页面,网页中的大部分数据内容来自于网站所连接的数据库。这个页面实际上在网络空间中并不存在,所以有些人看到某个页面的内容,想下载,但自然找不到资源。动态网页只有在接收到用户的访问请求后才会生成并传输到用户的浏览器中,而且由于访问者可以实时获得他们想要的数据,动态网页往往很容易给人留下深刻的印象。此外,动态网页还具有易于维护和更新的优点。
一些细心的朋友会发现,很多网页文件的扩展名不再只是“.htm”,还有“.php”、“.asp”等,都是动态网页技术产生的。
比如一部电影网站的播放页面,一部电影网站有上千部电影,每部电影有不止一集。如果一部电影有播放页面,恐怕服务器空间放这些页面也是个问题。事实上,大多数电影网站只有一个播放页面。网页中的所有内容都是从数据库中获取的。有一天如果页面不合适,你可以只修改这样一个页面。您不需要修改每个单独的页面。静态页面。可见,动态网页占用的服务器空间较小,易于更新和维护,对管理员来说非常方便。
动态网页的缺点是什么?
动态网页的缺点主要表现在以下两个方面:
一、首先,动态网页在访问速度上并不占优势
动态网页首先获取用户的指令,然后网页将指令带到数据库中,找到该指令对应的数据,然后传输给服务器。用户看到网页。问题就出来了。每次访问网页时,都必须经过这样一个过程。这个过程至少需要几秒钟。当访问者数量较多时,页面的加载速度会变慢,这也是服务器的负担。; 从用户的角度来看,网页加载缓慢,没有响应。下次谁会访问你的 网站。
静态网页很简单。静态网页实际上是存在的,没有经过服务器编译,直接加载到客户端的浏览器中显示。
可以看出,动态网页在访问速度上并不占优势。
二、在搜索引擎中不占优势收录
上面我是从服务器和用户体验的角度讲的,下面从搜索引擎的角度讲收录。动态网页是用户输入指令后形成的页面。这个页面不存在,搜索引擎只会爬现成的,不会自己打字,网站在搜索引擎收录中没有优势。搜索引擎仍然更喜欢静态页面。
但是,搜索引擎正在不断改进。到目前为止,绝大多数搜索引擎都支持动态页面的爬取。
流行的动态网页新技术
早期的动态网页主要采用CGI技术,CGI即Common Gateway Interface(公共网关接口)。您可以使用不同的程序编写合适的 CGI 程序,例如 Visual Basic、Delphi 或 C/C++ 等。由于编程难度大、效率低、修改复杂,有逐渐被新技术取代的趋势。
以下是目前备受关注的一些比较流行的新技术:
1、PHP 是超文本预处理器,是当今 Internet 上最流行的脚本语言。它的语法借鉴了C、Java、PERL等语言,但只需要一点编程知识。可以使用 PHP 构建一个真正的交互式网站。它对HTML语言有很好的兼容性,用户可以直接在脚本代码中添加HTML标签,或者在HTML标签中添加脚本代码,更好地实现页面控制。PHP提供标准的数据库接口,数据库连接方便,兼容性强;扩展性强;可以进行面向对象的编程。
2、ASP 是活动服务器页面。它是微软开发的HTML(超文本标记语言)、脚本(Script)和CGI(通用网关接口)的组合。它不提供自己的特殊编程语言。,但允许用户使用许多现有的脚本语言编写 ASP 应用程序。ASP 编程比 HTML 更方便、更灵活。它运行在 Web 服务器端,然后将运行结果以 HTML 格式发送到客户端的浏览器。因此,ASP 比一般的脚本语言安全得多。
ASP最大的优点是可以收录HTML标签,还可以直接访问数据库,使用无限扩展的ActiveX控件,所以在编程上比HTML更方便、更灵活。通过使用ASP的组件和对象技术,用户可以直接使用ActiveX控件,调用对象方法和属性,以简单的方式实现强大的交互功能。缺点是因为基本上受限于微软的操作系统平台,主要的工作环境是微软的IIS应用程序结构,而且由于ActiveX对象具有平台特性,ASP技术在跨平台的Web服务器中不能轻易实现。在工作。
3、JSP代表Java Server Pages,是1999年6月推出的一项新技术,是一种基于Java Servlet和整个Java系统的Web开发技术。JSP和ASP在技术上有很多相似之处,但是来自不同的技术规范组织,所以ASP一般只用在Windows NT/2000平台上,而JSP可以运行在85%以上的服务器上,并且是基于JSP技术的应用程序比基于 ASP 的应用程序更易于维护和管理,因此被许多人认为是未来最有前途的动态 网站 技术。

htmlunit抓取动态网页(关于静态与动态的网页设计的全部内容设计为您整理)
网站优化 • 优采云 发表了文章 • 0 个评论 • 87 次浏览 • 2022-04-15 01:01
静态网页设计初期的网页都是静态的,例如只有文字、图形、图像等,用户只能被动地接受这些信息。那时,网页的核心是 HTML(一种标记语言)。写起来很方便,不需要特定的语言环境。它可以用任何编辑器编写。然后,您可以将其放在浏览器中以查看结果。现在HTML有很多专门的编辑软件,如FrontPage、Hotdog、Dreamweaver等。原来的Web是完全静态的,只提供大量的信息服务,没有服务器/客户端的概念。“静态”是指网站 的网页内容是“固定的”。当用户' 浏览器通过 Internet 的 HTTP(超文本传输协议)协议请求 Web 服务器提供网页内容,服务器只是将原本设计的静态 HTML 文档传输给用户的浏览器。其页面内容仅使用标准 HTML 代码。加上GIF格式的动态图片。如果 网站 维护者想要更新页面的内容,他们必须手动更新他们所有的 HTML 文档。这对于小的个人页面来说不是问题,但是对于非常大的商业 网站 逐页更改将是一件非常困难的事情。对于不能满足要求的技术,被替代是不变的趋势。动态网页设计 随着互联网的发展,目前的网页已不再只是静态的。人们更加关注动态网页。所以。什么是动态网页?简单来说,服务器通过HTML表单采集用户的信息,用户也可以通过网页获取自己想要的信息。图1-1所示的表格是一个表格。
如前所述,HTML 是编写网页的语言,但不能只用 HTML 编写动态网页。所以。这里有一些用于编写动态网页的语言。以上是武汉天湖设计小编为您整理的静态和动态网页设计的全部内容 查看全部
htmlunit抓取动态网页(关于静态与动态的网页设计的全部内容设计为您整理)
静态网页设计初期的网页都是静态的,例如只有文字、图形、图像等,用户只能被动地接受这些信息。那时,网页的核心是 HTML(一种标记语言)。写起来很方便,不需要特定的语言环境。它可以用任何编辑器编写。然后,您可以将其放在浏览器中以查看结果。现在HTML有很多专门的编辑软件,如FrontPage、Hotdog、Dreamweaver等。原来的Web是完全静态的,只提供大量的信息服务,没有服务器/客户端的概念。“静态”是指网站 的网页内容是“固定的”。当用户' 浏览器通过 Internet 的 HTTP(超文本传输协议)协议请求 Web 服务器提供网页内容,服务器只是将原本设计的静态 HTML 文档传输给用户的浏览器。其页面内容仅使用标准 HTML 代码。加上GIF格式的动态图片。如果 网站 维护者想要更新页面的内容,他们必须手动更新他们所有的 HTML 文档。这对于小的个人页面来说不是问题,但是对于非常大的商业 网站 逐页更改将是一件非常困难的事情。对于不能满足要求的技术,被替代是不变的趋势。动态网页设计 随着互联网的发展,目前的网页已不再只是静态的。人们更加关注动态网页。所以。什么是动态网页?简单来说,服务器通过HTML表单采集用户的信息,用户也可以通过网页获取自己想要的信息。图1-1所示的表格是一个表格。

如前所述,HTML 是编写网页的语言,但不能只用 HTML 编写动态网页。所以。这里有一些用于编写动态网页的语言。以上是武汉天湖设计小编为您整理的静态和动态网页设计的全部内容
htmlunit抓取动态网页(创建新浪网站实例通过表达式获取你想获取的标签元素)
网站优化 • 优采云 发表了文章 • 0 个评论 • 86 次浏览 • 2022-04-14 19:26
本文是我自己对技术的总结描述,不是很官方,可能会有一些问题,欢迎指正
1. 什么是 HtmlUnit?
HtmlUnit 是一个无界面的浏览器 Java 程序。它为 HTML 文档建模并提供用于调用页面、填写表单、单击链接等的 API。就像您在浏览器中所做的一样。HtmlUnit 有不错的 JavaScript 支持(不断改进),甚至可以使用相当复杂的 Ajax 库来模拟 Chrome、Firefox 或 Internet Explorer 等浏览器,具体取决于配置。HtmlUnit 通常用于测试或从网站检索信息。
2. 它能做什么?
它可以读取页面的所有元素
eg:现在有一个需求,客户给一个.chm描述文件,里面记录了表和字段的关系和注释。现在需要将评论添加到数据库中。首先可以通过工具将chm文件转换成html文件,然后我们可以通过爬取html文件来实现这个功能;
可以模拟用户点击,该功能可以实现登录、跳转页面等;
eg:现在有个需求,客户这边有一个系统,里面有很多数据,但是因为安全问题,我们的系统不能直接连接到它的数据库,所以现在需要显示客户的数据系统实时。做吗?您可以通过爬虫制作“适配器”。其一般原理是当用户点击我们的系统并点击查看“个人信息”时,我们的系统通过爬虫实时获取客户系统页面上的数据,并返回给我们的系统进行展示。.
3. 一般流程
需求:现在想通过Java程序爬取新浪新闻的一些内容
创建新浪实例网站通过表达式4.获取你要获取的标签元素项目代码
.pom 文件
net.sourceforge.htmlunit
htmlunit
2.23
复制代码
项目代码
public class XinLangNews {
public static void main(String args[]) throws Exception {
//创建web客户端
WebClient webClient = new WebClient(BrowserVersion.CHROME);//新建一个模拟谷歌Chrome浏览器的浏览器客户端对象
webClient.getOptions().setThrowExceptionOnScriptError(false);//当JS执行出错的时候是否抛出异常, 这里选择不需要
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);//当HTTP的状态非200时是否抛出异常, 这里选择不需要
webClient.getOptions().setActiveXNative(false);
webClient.getOptions().setCssEnabled(false);//是否启用CSS, 因为不需要展现页面, 所以不需要启用
webClient.getOptions().setJavaScriptEnabled(true); //很重要,启用JS
webClient.setAjaxController(new NicelyResynchronizingAjaxController());//很重要,设置支持AJAX
webClient.waitForBackgroundJavaScript(30000);//异步JS执行需要耗时,所以这里线程要阻塞30秒,等待异步JS执行结束
//设置链接地址,并返回网站实例
HtmlPage page = webClient.getPage("https://news.sina.com.cn/");
// 获取里边所有的span
List byXPath = (List) page.getByXPath("//*[@id=\"blk_cNav2_01\"]/div/a/span");
// 遍历所有span并打印出里边的内容
byXPath.forEach((x) -> {
System.out.println(x.getTextContent());
});
}
}
复制代码
注意:运行时控制台可能会出现很多错误,不要慌,这些错误是js在html页面报错
说明:下面三个步骤很重要,可以读取js和ajax动态加载的内容
webClient.getOptions().setJavaScriptEnabled(true); //很重要,启用JS
webClient.setAjaxController(new NicelyResynchronizingAjaxController());//很重要,设置支持AJAX
webClient.waitForBackgroundJavaScript(30000);//异步JS执行需要耗时,所以这里线程要阻塞30秒,等待异步JS执行结束,具体时间可以根据网页js加载效率动态调整,如果有页面元素获取不到的情况,可能是这里出问题了
复制代码
5. 奇怪的把戏
用HtmlUnit编写爬虫项目时,创建WebClient客户端基本是固定格式。最麻烦的是获取dom元素。这里我将介绍一种非常方便的获取dom元素的方法;这里我通过上述新浪新闻网站的介绍;
先打开chrome,然后回车,按F12打开开发者模式,找到你要获取的页面元素,此时在chrome的Elements模块中选择你要获取的元素,点击“右键”,选择复制-->Copy XPath ,此时获取该元素在整个页面中的xpath路径。图中“滚动”的xpath路径为//[@id="blk_cNav2_01"]/div/a[1]/span,因为我要获取所有span(即滚动、排名、政务等) .),因此您可以将上面复制的xpath路径重写为//[@id="blk_cNav2_01"]/div/a/span,并将a[1]更改为a。,你就完成了。您可以使用此方法快速准确地定位元素
6. 待续
比如Jsoup、WebClient、HttpClient都可以实现页面爬虫的效果,但是它们有什么区别呢?这个文章将在下一期公布;
本文使用 mdnice 排版 查看全部
htmlunit抓取动态网页(创建新浪网站实例通过表达式获取你想获取的标签元素)
本文是我自己对技术的总结描述,不是很官方,可能会有一些问题,欢迎指正
1. 什么是 HtmlUnit?
HtmlUnit 是一个无界面的浏览器 Java 程序。它为 HTML 文档建模并提供用于调用页面、填写表单、单击链接等的 API。就像您在浏览器中所做的一样。HtmlUnit 有不错的 JavaScript 支持(不断改进),甚至可以使用相当复杂的 Ajax 库来模拟 Chrome、Firefox 或 Internet Explorer 等浏览器,具体取决于配置。HtmlUnit 通常用于测试或从网站检索信息。
2. 它能做什么?
它可以读取页面的所有元素
eg:现在有一个需求,客户给一个.chm描述文件,里面记录了表和字段的关系和注释。现在需要将评论添加到数据库中。首先可以通过工具将chm文件转换成html文件,然后我们可以通过爬取html文件来实现这个功能;
可以模拟用户点击,该功能可以实现登录、跳转页面等;
eg:现在有个需求,客户这边有一个系统,里面有很多数据,但是因为安全问题,我们的系统不能直接连接到它的数据库,所以现在需要显示客户的数据系统实时。做吗?您可以通过爬虫制作“适配器”。其一般原理是当用户点击我们的系统并点击查看“个人信息”时,我们的系统通过爬虫实时获取客户系统页面上的数据,并返回给我们的系统进行展示。.
3. 一般流程
需求:现在想通过Java程序爬取新浪新闻的一些内容
创建新浪实例网站通过表达式4.获取你要获取的标签元素项目代码
.pom 文件
net.sourceforge.htmlunit
htmlunit
2.23
复制代码
项目代码
public class XinLangNews {
public static void main(String args[]) throws Exception {
//创建web客户端
WebClient webClient = new WebClient(BrowserVersion.CHROME);//新建一个模拟谷歌Chrome浏览器的浏览器客户端对象
webClient.getOptions().setThrowExceptionOnScriptError(false);//当JS执行出错的时候是否抛出异常, 这里选择不需要
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);//当HTTP的状态非200时是否抛出异常, 这里选择不需要
webClient.getOptions().setActiveXNative(false);
webClient.getOptions().setCssEnabled(false);//是否启用CSS, 因为不需要展现页面, 所以不需要启用
webClient.getOptions().setJavaScriptEnabled(true); //很重要,启用JS
webClient.setAjaxController(new NicelyResynchronizingAjaxController());//很重要,设置支持AJAX
webClient.waitForBackgroundJavaScript(30000);//异步JS执行需要耗时,所以这里线程要阻塞30秒,等待异步JS执行结束
//设置链接地址,并返回网站实例
HtmlPage page = webClient.getPage("https://news.sina.com.cn/");
// 获取里边所有的span
List byXPath = (List) page.getByXPath("//*[@id=\"blk_cNav2_01\"]/div/a/span");
// 遍历所有span并打印出里边的内容
byXPath.forEach((x) -> {
System.out.println(x.getTextContent());
});
}
}
复制代码
注意:运行时控制台可能会出现很多错误,不要慌,这些错误是js在html页面报错
说明:下面三个步骤很重要,可以读取js和ajax动态加载的内容
webClient.getOptions().setJavaScriptEnabled(true); //很重要,启用JS
webClient.setAjaxController(new NicelyResynchronizingAjaxController());//很重要,设置支持AJAX
webClient.waitForBackgroundJavaScript(30000);//异步JS执行需要耗时,所以这里线程要阻塞30秒,等待异步JS执行结束,具体时间可以根据网页js加载效率动态调整,如果有页面元素获取不到的情况,可能是这里出问题了
复制代码
5. 奇怪的把戏
用HtmlUnit编写爬虫项目时,创建WebClient客户端基本是固定格式。最麻烦的是获取dom元素。这里我将介绍一种非常方便的获取dom元素的方法;这里我通过上述新浪新闻网站的介绍;
先打开chrome,然后回车,按F12打开开发者模式,找到你要获取的页面元素,此时在chrome的Elements模块中选择你要获取的元素,点击“右键”,选择复制-->Copy XPath ,此时获取该元素在整个页面中的xpath路径。图中“滚动”的xpath路径为//[@id="blk_cNav2_01"]/div/a[1]/span,因为我要获取所有span(即滚动、排名、政务等) .),因此您可以将上面复制的xpath路径重写为//[@id="blk_cNav2_01"]/div/a/span,并将a[1]更改为a。,你就完成了。您可以使用此方法快速准确地定位元素
6. 待续
比如Jsoup、WebClient、HttpClient都可以实现页面爬虫的效果,但是它们有什么区别呢?这个文章将在下一期公布;
本文使用 mdnice 排版
htmlunit抓取动态网页(做前台页面设计会用到的工具与ASP的区别)
网站优化 • 优采云 发表了文章 • 0 个评论 • 76 次浏览 • 2022-04-13 15:18
如果你做前端页面设计,你会用到工具:firework、flash、ps、coreldraw。如果是做后台编程,会使用:asp、PHP等语言。环境调试好后,与ASP的区别1、不同的开发语言ASP仅限于使用脚本语言进行开发,容易导致代码混乱。允许用户选择和使用功能齐全的编程语言Framework。 2、运行机制不同。 ASP是一个解释和运行的编程框架,所以执行效率低。编译执行,提高程序效率。 3、开发方式ASP混合了界面设计和程序设计,维护难度大。将界面设计和程序设计分离到不同的文件中,提高了可重用性和可维护性。工作原理 浏览器向WEB服务器发送HTTP请求; WEB服务器解析HTTP请求,如果请求的网页文件名后缀为aspx,则程序;如果该程序之前没有执行过,则编译它,然后执行该程序;否则直接执行编译好的程序。获取 HTML 结果; WEB服务器将HTML结果作为HTTP响应发送回用户浏览器;客户端浏览器收到响应后,将 HTML 结果显示为 WEB 页面。运行环境需要安装以下软件: 框架静态页面和动态页面1、静态网页(1)概述:纯HTML格式网页,即.htm、.html、.shtml, .xml等后缀。
在HTML格式的网页上,还可以出现各种动态效果,比如GIF格式的动画、FLASH、滚动字幕等。这些“动态效果”只是视觉上的,这些“动态效果”都有HTML页面,仍然是静态网页。 (2)特点:①静态网页是预先编写好的,每个静态网页的内容在网站服务器上保持不变;②静态网页的内容比较稳定,所以很容易被搜索引擎检索;③静态网页没有数据库的支持,网站制作和维护的工作量比较大;④静态网页交互性较差,在功能上限制较大。< @2、动态网页(1)概述:动态网页不仅有HTML标签,还收录程序代码、连接数据库的网页。常见的动态网页后缀为.asp、. aspx、.jsp、.php等(2)特点:①动态网页的内容是在服务器上运行后生成的,不是预先写好的;②动态网页往往基于数据库技术;③动态网页交互性更强并使用动态网页技术网站可以实现更多功能,比如用户注册化,用户登录。 4dreamweaver中数据库的连接要创建一个动态网页,我们首先要把数据库(Access)和网页连接起来,这样我们在网页上就可以很轻松了。很容易调用数据库中的内容并在网页上显示。这在 Dreamweaver 中是如何实现的?有很多方法。
ESS数据库的几种方法:例如自定义连接一个客串的方法如下:选择“窗口菜单”->“数据库”,打开数据库面板,在弹出的窗口中选择“自定义连接字符串” -up “自定义连接” 在“字符串”对话框中,在连接名称框中输入“conn”,在连接字符串框中输入如下字符串“”Driver={essDriver(*.mdb)};DBQ=" &Server.MapPath("/myweb/xsda.mdb")”[1][2],注意不要出错。其中“/myweb/xsda.mdb”是站点中数据库的路径。在下方的“Dreamweaver 应连接”选项中选择“使用来自测试服务器的驱动程序”。输入完成后,点击旁边的“测试”按钮,如果弹出“连接脚本成功”对话框,则表示数据库连接成功。如果有错误,请检查您刚才输入的以下字符串是否正确。 5 特定页面制作 脚本连接成功后,接下来的工作就是创建特定页面。在制作特定页面之前,请务必 查看全部
htmlunit抓取动态网页(做前台页面设计会用到的工具与ASP的区别)
如果你做前端页面设计,你会用到工具:firework、flash、ps、coreldraw。如果是做后台编程,会使用:asp、PHP等语言。环境调试好后,与ASP的区别1、不同的开发语言ASP仅限于使用脚本语言进行开发,容易导致代码混乱。允许用户选择和使用功能齐全的编程语言Framework。 2、运行机制不同。 ASP是一个解释和运行的编程框架,所以执行效率低。编译执行,提高程序效率。 3、开发方式ASP混合了界面设计和程序设计,维护难度大。将界面设计和程序设计分离到不同的文件中,提高了可重用性和可维护性。工作原理 浏览器向WEB服务器发送HTTP请求; WEB服务器解析HTTP请求,如果请求的网页文件名后缀为aspx,则程序;如果该程序之前没有执行过,则编译它,然后执行该程序;否则直接执行编译好的程序。获取 HTML 结果; WEB服务器将HTML结果作为HTTP响应发送回用户浏览器;客户端浏览器收到响应后,将 HTML 结果显示为 WEB 页面。运行环境需要安装以下软件: 框架静态页面和动态页面1、静态网页(1)概述:纯HTML格式网页,即.htm、.html、.shtml, .xml等后缀。
在HTML格式的网页上,还可以出现各种动态效果,比如GIF格式的动画、FLASH、滚动字幕等。这些“动态效果”只是视觉上的,这些“动态效果”都有HTML页面,仍然是静态网页。 (2)特点:①静态网页是预先编写好的,每个静态网页的内容在网站服务器上保持不变;②静态网页的内容比较稳定,所以很容易被搜索引擎检索;③静态网页没有数据库的支持,网站制作和维护的工作量比较大;④静态网页交互性较差,在功能上限制较大。< @2、动态网页(1)概述:动态网页不仅有HTML标签,还收录程序代码、连接数据库的网页。常见的动态网页后缀为.asp、. aspx、.jsp、.php等(2)特点:①动态网页的内容是在服务器上运行后生成的,不是预先写好的;②动态网页往往基于数据库技术;③动态网页交互性更强并使用动态网页技术网站可以实现更多功能,比如用户注册化,用户登录。 4dreamweaver中数据库的连接要创建一个动态网页,我们首先要把数据库(Access)和网页连接起来,这样我们在网页上就可以很轻松了。很容易调用数据库中的内容并在网页上显示。这在 Dreamweaver 中是如何实现的?有很多方法。
ESS数据库的几种方法:例如自定义连接一个客串的方法如下:选择“窗口菜单”->“数据库”,打开数据库面板,在弹出的窗口中选择“自定义连接字符串” -up “自定义连接” 在“字符串”对话框中,在连接名称框中输入“conn”,在连接字符串框中输入如下字符串“”Driver={essDriver(*.mdb)};DBQ=" &Server.MapPath("/myweb/xsda.mdb")”[1][2],注意不要出错。其中“/myweb/xsda.mdb”是站点中数据库的路径。在下方的“Dreamweaver 应连接”选项中选择“使用来自测试服务器的驱动程序”。输入完成后,点击旁边的“测试”按钮,如果弹出“连接脚本成功”对话框,则表示数据库连接成功。如果有错误,请检查您刚才输入的以下字符串是否正确。 5 特定页面制作 脚本连接成功后,接下来的工作就是创建特定页面。在制作特定页面之前,请务必
htmlunit抓取动态网页(别的项目组什么项目突然心血来潮想研究一下爬虫、分析的简单原型)
网站优化 • 优采云 发表了文章 • 0 个评论 • 82 次浏览 • 2022-04-13 15:17
由于其他项目组都在做舆情预测项目,我只是手头没有项目,突然心血来潮想研究一个简单的爬虫原型和分析。网上这方面的资料很多,看得我眼花缭乱。对于我这样的新手,想做一个简单的爬虫程序,所以HttpClient + jsoup是个不错的选择。前者是用来管理请求的,后者是用来解析页面的,主要是后者的select语法和jquery很像,对我这个用js的人来说太方便了。
昨天和他们聊天时,他们使用了几个知名的开源框架。聊了几句,他们发现自己根本无法爬取动态网页,尤其是一些重要的数字,比如评论数和回复数。还有很多。我有一个大致的了解。比如TRS的爬虫需要为js调用编写js脚本,但分析量巨大。他们的技术人员告诉我们,如果他们匹配这样的模板,他们每天只能匹配2到3个。,更何况我们这些中途修士。碰巧是一个相当大的挑战,所以我昨天答应他们,看看他们是否能找到一个相对简单的解决方案,当然,不管效率如何。
举个简单的例子,如下图
“我有话要说”后面的1307是后载的,但这些数字往往对舆情分析更重要。
对需求有了大致的了解后,我们来分析如何解决它们。通常,我们对请求得到的响应中收录js代码和html元素,所以像jsoup这样的html解析器很难在这里利用,因为它所能得到的html,1307还没有生成。这时候就需要一个可以运行js的平台,运行js代码后的页面会被html解析,这样才能正确得到结果。
因为懒,一开始写脚本的方式被我抛弃了,因为分析一个页面太痛苦了,代码乱成一锅粥。看的太累了。所以我的首要任务是,为什么我不能让这个地址在某个浏览器中运行,然后将运行结果交给html解析器解析,那么整个问题就解决了。这样,我的临时解决方案是在爬虫服务器上打开一个后台浏览器,或者是有浏览器内核的程序,把url地址交给它去请求,然后从浏览器中取出页面的元素给它到 html 解析器进行解析以获取您想要的信息。
没错,最后我还是用 Selenium 来实现我在上一篇文章中提到的问题。我没有尝试其他任何东西。我只试过火狐引擎。整体效果我还是可以接受的。
继续昨天的话题,既然我们要实现上一篇提到的问题,就需要一个可以执行js代码的框架。我的首选是htmlunit,先简单介绍一下htmlunit。以下段落摘自互联网。
htmlunit 是一个开源的java页面分析工具。启动htmlunit后,会在底层启动一个非界面浏览器。用户可以指定浏览器类型:firefox、ie等,不指定则默认使用INTERNET_EXPLORER_7:
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
只需调用:
HtmlPage 页面 = webClient.getPage(url);
可以获取页面的 HtmlPage 表示,然后通过:
InputStream 是 = targetPage.getWebResponse().getContentAsStream()
可以获取页面的输入流,从而获取页面的源代码,对于网络爬虫项目非常有用。
当然,你也可以从page中获取更多的页面元素。
重要的是,HtmlUnit 支持执行:
page.executeJavaScript()
执行js后,返回一个ScriptResult对象,通过该对象可以获取执行js后的页面等信息。默认情况下,执行完js后,内部浏览器会进行页面跳转,跳转到执行完js后生成的新页面。如果js执行失败,则不会执行页面跳转。
最后可以通过page.executeJavaScript().getNewPage()获取执行的页面。也就是说,这里需要人工执行,这显然不符合我的初衷。另外可能是我水平太差了,爬新浪新闻的页面总是出错。根据上面查询的结果,最可能的错误原因是htmlunit在执行一些带参数的请求时,由于参数顺序或者编码问题,请求失败,报错。关键是,运行它后我没有得到我需要的结果。
然后我寻找另一种解决方案。这时,我找到了 SeleniumWebDriver,这是我需要的解决方案。
参考资料和例子,就可以开始使用了。示例代码如下。
<p> 1 File pathToBinary = new File("D:\Program Files (x86)\Mozilla Firefox\firefox.exe");
2 FirefoxBinary ffBinary = new FirefoxBinary(pathToBinary);
3 FirefoxProfile firefoxProfile = new FirefoxProfile();
4 FirefoxDriver driver = new FirefoxDriver(ffBinary,firefoxProfile);
5
6
7 driver.get("http://cq.qq.com/baoliao/detail.htm?294064");
8
9 ArrayList list = new ArrayList();
10 list.add("http://www.sina.com.cn");
11 list.add("http://www.sohu.com");
12 list.add("http://www.163.com");
13 list.add("http://www.qq.com");
14
15 long start,end;
16
17 for(int i=0;i 查看全部
htmlunit抓取动态网页(别的项目组什么项目突然心血来潮想研究一下爬虫、分析的简单原型)
由于其他项目组都在做舆情预测项目,我只是手头没有项目,突然心血来潮想研究一个简单的爬虫原型和分析。网上这方面的资料很多,看得我眼花缭乱。对于我这样的新手,想做一个简单的爬虫程序,所以HttpClient + jsoup是个不错的选择。前者是用来管理请求的,后者是用来解析页面的,主要是后者的select语法和jquery很像,对我这个用js的人来说太方便了。
昨天和他们聊天时,他们使用了几个知名的开源框架。聊了几句,他们发现自己根本无法爬取动态网页,尤其是一些重要的数字,比如评论数和回复数。还有很多。我有一个大致的了解。比如TRS的爬虫需要为js调用编写js脚本,但分析量巨大。他们的技术人员告诉我们,如果他们匹配这样的模板,他们每天只能匹配2到3个。,更何况我们这些中途修士。碰巧是一个相当大的挑战,所以我昨天答应他们,看看他们是否能找到一个相对简单的解决方案,当然,不管效率如何。
举个简单的例子,如下图
“我有话要说”后面的1307是后载的,但这些数字往往对舆情分析更重要。
对需求有了大致的了解后,我们来分析如何解决它们。通常,我们对请求得到的响应中收录js代码和html元素,所以像jsoup这样的html解析器很难在这里利用,因为它所能得到的html,1307还没有生成。这时候就需要一个可以运行js的平台,运行js代码后的页面会被html解析,这样才能正确得到结果。
因为懒,一开始写脚本的方式被我抛弃了,因为分析一个页面太痛苦了,代码乱成一锅粥。看的太累了。所以我的首要任务是,为什么我不能让这个地址在某个浏览器中运行,然后将运行结果交给html解析器解析,那么整个问题就解决了。这样,我的临时解决方案是在爬虫服务器上打开一个后台浏览器,或者是有浏览器内核的程序,把url地址交给它去请求,然后从浏览器中取出页面的元素给它到 html 解析器进行解析以获取您想要的信息。
没错,最后我还是用 Selenium 来实现我在上一篇文章中提到的问题。我没有尝试其他任何东西。我只试过火狐引擎。整体效果我还是可以接受的。
继续昨天的话题,既然我们要实现上一篇提到的问题,就需要一个可以执行js代码的框架。我的首选是htmlunit,先简单介绍一下htmlunit。以下段落摘自互联网。
htmlunit 是一个开源的java页面分析工具。启动htmlunit后,会在底层启动一个非界面浏览器。用户可以指定浏览器类型:firefox、ie等,不指定则默认使用INTERNET_EXPLORER_7:
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
只需调用:
HtmlPage 页面 = webClient.getPage(url);
可以获取页面的 HtmlPage 表示,然后通过:
InputStream 是 = targetPage.getWebResponse().getContentAsStream()
可以获取页面的输入流,从而获取页面的源代码,对于网络爬虫项目非常有用。
当然,你也可以从page中获取更多的页面元素。
重要的是,HtmlUnit 支持执行:
page.executeJavaScript()
执行js后,返回一个ScriptResult对象,通过该对象可以获取执行js后的页面等信息。默认情况下,执行完js后,内部浏览器会进行页面跳转,跳转到执行完js后生成的新页面。如果js执行失败,则不会执行页面跳转。
最后可以通过page.executeJavaScript().getNewPage()获取执行的页面。也就是说,这里需要人工执行,这显然不符合我的初衷。另外可能是我水平太差了,爬新浪新闻的页面总是出错。根据上面查询的结果,最可能的错误原因是htmlunit在执行一些带参数的请求时,由于参数顺序或者编码问题,请求失败,报错。关键是,运行它后我没有得到我需要的结果。
然后我寻找另一种解决方案。这时,我找到了 SeleniumWebDriver,这是我需要的解决方案。
参考资料和例子,就可以开始使用了。示例代码如下。
<p> 1 File pathToBinary = new File("D:\Program Files (x86)\Mozilla Firefox\firefox.exe");
2 FirefoxBinary ffBinary = new FirefoxBinary(pathToBinary);
3 FirefoxProfile firefoxProfile = new FirefoxProfile();
4 FirefoxDriver driver = new FirefoxDriver(ffBinary,firefoxProfile);
5
6
7 driver.get("http://cq.qq.com/baoliao/detail.htm?294064");
8
9 ArrayList list = new ArrayList();
10 list.add("http://www.sina.com.cn");
11 list.add("http://www.sohu.com");
12 list.add("http://www.163.com");
13 list.add("http://www.qq.com");
14
15 long start,end;
16
17 for(int i=0;i
htmlunit抓取动态网页(搜狗微信公众号更新公告(2015.03.23) )
网站优化 • 优采云 发表了文章 • 0 个评论 • 112 次浏览 • 2022-04-13 14:31
)
最后更新于 2018.1.3
只为自己留个记录
要添加的功能:
1.获取历史中的所有消息
2. 爬取10多条数据
3.公众号信息自定义抓取
下面是搜狗微信公众号搜索微信公众号的例子!
搜狗微信公众号作为分析入口:[此处填写公众号]&ie=utf8&sug=n&sug_type=
DEMO 中的完整 URL 为:%E6%AF%8F%E6%97%A5%E8%8A%82%E5%A5%8F&ie=utf8&sug=n&sug_type=
package cc.buckler.test;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.junit.Test;
import java.io.IOException;
public class TestData {
private String ENTRY_URL = "http://weixin.sogou.com/weixin ... %3B//入口地址
private String QUERY_WORD = "DOTA每日节奏";//查询参数
private String BASE_URL = "";//从入口进入公众号后的公众号地址
private String WE_CHAT_URL = "http://mp.weixin.qq.com";//微信公众号官方入口
private int NEW_MSG_ID = 0;//最新msgId
private int MSG_NUM = 20;//需要获取的数量
@Test
public void getData() {
String url = String.format(ENTRY_URL, QUERY_WORD);
//System.out.println(url);
WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setRedirectEnabled(true);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setTimeout(50000);
Document doc = null;
try {
//首先用jsoup获取搜狗入口公众号连接
doc = Jsoup.connect(url).get();
//System.out.println("doc:" + doc);
BASE_URL = doc.select("p a").attr("href");
//System.out.println(BASE_URL);
//使用htmlunit加载公众号文章列表
HtmlPage htmlPage = webClient.getPage(BASE_URL);
webClient.waitForBackgroundJavaScript(10000);
doc = Jsoup.parse(htmlPage.asXml());
//System.out.println("doc:" + doc);
//获取最新文章msgid,之后的循环用msgid-1
String lastMsgId = doc.select(".weui_media_box").attr("msgid");
NEW_MSG_ID = Integer.parseInt(lastMsgId);
//System.out.println(NEW_MSG_ID);
for (int i = NEW_MSG_ID; i >= NEW_MSG_ID - MSG_NUM; i--) {
String articalPrev = "#WXAPPMSG";
String articalId = articalPrev + i;
String h4 = articalId + " h4";
String weui_media_desc = articalId + " .weui_media_desc";
String weui_media_extra_info = articalId + " .weui_media_extra_info";
System.out.println(articalId);
String title = doc.select(h4).text();
System.out.println(title);
String detailUrl = doc.select(h4).attr("hrefs");//2018.1.3 ok
System.out.println(WE_CHAT_URL + detailUrl);
String note = doc.select(weui_media_desc).text();//2018.1.3 ok
if (note.compareToIgnoreCase("") == 0) {
continue;
}
System.out.println(note);
String releaseDate = doc.select(weui_media_extra_info).text().toString();//2018.1.3 ok
if (releaseDate.compareToIgnoreCase("") == 0) {
continue;
}
System.out.println(releaseDate);
}
webClient.close();
} catch (IOException e) {
e.printStackTrace();
webClient.close();
}
}
} 查看全部
htmlunit抓取动态网页(搜狗微信公众号更新公告(2015.03.23)
)
最后更新于 2018.1.3
只为自己留个记录
要添加的功能:
1.获取历史中的所有消息
2. 爬取10多条数据
3.公众号信息自定义抓取
下面是搜狗微信公众号搜索微信公众号的例子!
搜狗微信公众号作为分析入口:[此处填写公众号]&ie=utf8&sug=n&sug_type=
DEMO 中的完整 URL 为:%E6%AF%8F%E6%97%A5%E8%8A%82%E5%A5%8F&ie=utf8&sug=n&sug_type=
package cc.buckler.test;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.junit.Test;
import java.io.IOException;
public class TestData {
private String ENTRY_URL = "http://weixin.sogou.com/weixin ... %3B//入口地址
private String QUERY_WORD = "DOTA每日节奏";//查询参数
private String BASE_URL = "";//从入口进入公众号后的公众号地址
private String WE_CHAT_URL = "http://mp.weixin.qq.com";//微信公众号官方入口
private int NEW_MSG_ID = 0;//最新msgId
private int MSG_NUM = 20;//需要获取的数量
@Test
public void getData() {
String url = String.format(ENTRY_URL, QUERY_WORD);
//System.out.println(url);
WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setRedirectEnabled(true);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setTimeout(50000);
Document doc = null;
try {
//首先用jsoup获取搜狗入口公众号连接
doc = Jsoup.connect(url).get();
//System.out.println("doc:" + doc);
BASE_URL = doc.select("p a").attr("href");
//System.out.println(BASE_URL);
//使用htmlunit加载公众号文章列表
HtmlPage htmlPage = webClient.getPage(BASE_URL);
webClient.waitForBackgroundJavaScript(10000);
doc = Jsoup.parse(htmlPage.asXml());
//System.out.println("doc:" + doc);
//获取最新文章msgid,之后的循环用msgid-1
String lastMsgId = doc.select(".weui_media_box").attr("msgid");
NEW_MSG_ID = Integer.parseInt(lastMsgId);
//System.out.println(NEW_MSG_ID);
for (int i = NEW_MSG_ID; i >= NEW_MSG_ID - MSG_NUM; i--) {
String articalPrev = "#WXAPPMSG";
String articalId = articalPrev + i;
String h4 = articalId + " h4";
String weui_media_desc = articalId + " .weui_media_desc";
String weui_media_extra_info = articalId + " .weui_media_extra_info";
System.out.println(articalId);
String title = doc.select(h4).text();
System.out.println(title);
String detailUrl = doc.select(h4).attr("hrefs");//2018.1.3 ok
System.out.println(WE_CHAT_URL + detailUrl);
String note = doc.select(weui_media_desc).text();//2018.1.3 ok
if (note.compareToIgnoreCase("") == 0) {
continue;
}
System.out.println(note);
String releaseDate = doc.select(weui_media_extra_info).text().toString();//2018.1.3 ok
if (releaseDate.compareToIgnoreCase("") == 0) {
continue;
}
System.out.println(releaseDate);
}
webClient.close();
} catch (IOException e) {
e.printStackTrace();
webClient.close();
}
}
}
htmlunit抓取动态网页(这是视频怎么广告投放合js引擎来解决这个问题,怎么办 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 104 次浏览 • 2022-04-12 22:35
)
最近在写爬虫的时候,使用httpclient爬取一些网页出现了一些问题,即检索到的内容中含有大量的加密文本(通过javascript脚本),无法获取真实内容获得(即用浏览器打开网页)渲染的内容)。所以一般需要搭配短视频和js引擎来解决这个问题。经过搜索,我发现工具 htmlunit 可以提供帮助。在了解和使用的过程中,我发现这是一个非常强大的开源工具。虽然名气不如httpclient,但实力不容小觑。少八卦。可以从这里下载:/htmlunit/files/htmlunit/2.15/
String url="http://outofmemory.cn/";//想采集的网址
String refer="诚信通托管推广;http://open-open.com/";
URL link=new URL(url);
WebClient wc=new WebClient();
WebRequest request=new WebRequest(link);
request.setCharset("UTF-8");
request.setProxyHost("120.120.120.x");
request.setProxyPort(8080);
request.setAdditionalHeader("Referer", refer);//设置请求报文头里的refer字段
////设置请求报文头里的User-Agent字段
request.setAdditionalHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");
//wc.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");
//wc.addRequestHeader和request.setAdditionalHeader功能应该是一样的。选择一个即可。
//其他报文头字段可以根据需要添加
wc.getCookieManager().setCookiesEnabled(true);//开启cookie管理
wc.getOptions().setJavaScriptEnabled(true);//开启js解析。对于变态网页,这个是必须的
wc.getOptions().setCssEnabled(true);//开启css解析。对于变态网页,这个是必须的。
wc.getOptions().setThrowExceptionOnFailingStatusCode(false);
wc.getOptions().setThrowExceptionOnScriptError(false);
wc.getOptions().setTimeout(10000);
//设置cookie。如果你有cookie,可以在这里设置
Set cookies=null;
Iterator i = cookies.iterator();
while (i.hasNext())
{
wc.getCookieManager().addCookie(i.next());
}
//准备工作已经做好了
HtmlPage page=null;
page = wc.getPage(request);
if(page==null)
{
System.out.println("采集 "+url+" 失败!!!");
return ;
}
String content=page.asText();//网页内容保存在content里
if(content==null)
{
System.out.println("采集 "+url+" 失败!!!");
return ;
}
//搞定了
CookieManager CM = wc.getCookieManager(); //WC = Your WebClients name
Set cookies_ret = CM.getCookies();//返回的Cookie在这里,下次请求的时候可能可以用上啦。
查看全部
htmlunit抓取动态网页(这是视频怎么广告投放合js引擎来解决这个问题,怎么办
)
最近在写爬虫的时候,使用httpclient爬取一些网页出现了一些问题,即检索到的内容中含有大量的加密文本(通过javascript脚本),无法获取真实内容获得(即用浏览器打开网页)渲染的内容)。所以一般需要搭配短视频和js引擎来解决这个问题。经过搜索,我发现工具 htmlunit 可以提供帮助。在了解和使用的过程中,我发现这是一个非常强大的开源工具。虽然名气不如httpclient,但实力不容小觑。少八卦。可以从这里下载:/htmlunit/files/htmlunit/2.15/
String url="http://outofmemory.cn/";//想采集的网址
String refer="诚信通托管推广;http://open-open.com/";
URL link=new URL(url);
WebClient wc=new WebClient();
WebRequest request=new WebRequest(link);
request.setCharset("UTF-8");
request.setProxyHost("120.120.120.x");
request.setProxyPort(8080);
request.setAdditionalHeader("Referer", refer);//设置请求报文头里的refer字段
////设置请求报文头里的User-Agent字段
request.setAdditionalHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");
//wc.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");
//wc.addRequestHeader和request.setAdditionalHeader功能应该是一样的。选择一个即可。
//其他报文头字段可以根据需要添加
wc.getCookieManager().setCookiesEnabled(true);//开启cookie管理
wc.getOptions().setJavaScriptEnabled(true);//开启js解析。对于变态网页,这个是必须的
wc.getOptions().setCssEnabled(true);//开启css解析。对于变态网页,这个是必须的。
wc.getOptions().setThrowExceptionOnFailingStatusCode(false);
wc.getOptions().setThrowExceptionOnScriptError(false);
wc.getOptions().setTimeout(10000);
//设置cookie。如果你有cookie,可以在这里设置
Set cookies=null;
Iterator i = cookies.iterator();
while (i.hasNext())
{
wc.getCookieManager().addCookie(i.next());
}
//准备工作已经做好了
HtmlPage page=null;
page = wc.getPage(request);
if(page==null)
{
System.out.println("采集 "+url+" 失败!!!");
return ;
}
String content=page.asText();//网页内容保存在content里
if(content==null)
{
System.out.println("采集 "+url+" 失败!!!");
return ;
}
//搞定了
CookieManager CM = wc.getCookieManager(); //WC = Your WebClients name
Set cookies_ret = CM.getCookies();//返回的Cookie在这里,下次请求的时候可能可以用上啦。

htmlunit抓取动态网页(HtmlUnit+Jsoup另外遇到以下棘手问题(未解决)背景)
网站优化 • 优采云 发表了文章 • 0 个评论 • 82 次浏览 • 2022-04-11 15:17
HtmlUnit + Jsoup
另外遇到以下棘手问题(未解决)
背景
在开发爬虫用动态规则爬取数据的时候,遇到HtmlUnit登录后无法访问cookie的情况,网上的一系列文章都失效了;
HtmlUnit
可以理解为一个沙盒浏览器,会得到整个网页的最终显示代码(包括动态加载数据的js),人眼看到的就是你得到的
汤
只访问网页内容(不包括js执行后的动态内容),优点是可以通过jquery选择器提取元素,如#id、.class等htmlUnit只能提取document的原生js
问题描述
html单元代码
1/** HtmlUnit请求web页面 */
2 WebClient wc = new WebClient(BrowserVersion.CHROME);
3 wc.getOptions().setUseInsecureSSL(true);
4 wc.getOptions().setJavaScriptEnabled(true); // 启用JS解释器,默认为true
5 wc.getOptions().setCssEnabled(false); // 禁用css支持
6 wc.getOptions().setThrowExceptionOnScriptError(false); // js运行错误时,是否抛出异常
7 wc.getOptions().setTimeout(10 * 1000); // 设置连接超时时间 ,这里是10S。如果为0,则无限期等待
8 wc.waitForBackgroundJavaScript(10 * 1000); // 等待js后台执行30秒
9wc.getOptions().setDoNotTrackEnabled(false);
10//其他文章一贯的cookie设置方式-无效
11//wc.getCookieManager().addCookie(new Cookie("domain域名","JSESSIONID","11"));
12//改为以下方式
13wc.addCookie("Cookie value长串不需要切割",new URL("目标网址"),"domain域名");
14HtmlPage page = wc.getPage("目标网址");
15
16
另外遇到以下棘手问题(未解决)
<p>1//失败:通过改变支持ajax支持方式
2 wc.setAjaxControllr(new NicelyResynchronizingAjaxController());
3
4 //失败:循环判断内容,增加js-ajax执行时间
5 for (int i = 0; i 查看全部
htmlunit抓取动态网页(HtmlUnit+Jsoup另外遇到以下棘手问题(未解决)背景)
HtmlUnit + Jsoup
另外遇到以下棘手问题(未解决)
背景
在开发爬虫用动态规则爬取数据的时候,遇到HtmlUnit登录后无法访问cookie的情况,网上的一系列文章都失效了;
HtmlUnit
可以理解为一个沙盒浏览器,会得到整个网页的最终显示代码(包括动态加载数据的js),人眼看到的就是你得到的
汤
只访问网页内容(不包括js执行后的动态内容),优点是可以通过jquery选择器提取元素,如#id、.class等htmlUnit只能提取document的原生js
问题描述
html单元代码
1/** HtmlUnit请求web页面 */
2 WebClient wc = new WebClient(BrowserVersion.CHROME);
3 wc.getOptions().setUseInsecureSSL(true);
4 wc.getOptions().setJavaScriptEnabled(true); // 启用JS解释器,默认为true
5 wc.getOptions().setCssEnabled(false); // 禁用css支持
6 wc.getOptions().setThrowExceptionOnScriptError(false); // js运行错误时,是否抛出异常
7 wc.getOptions().setTimeout(10 * 1000); // 设置连接超时时间 ,这里是10S。如果为0,则无限期等待
8 wc.waitForBackgroundJavaScript(10 * 1000); // 等待js后台执行30秒
9wc.getOptions().setDoNotTrackEnabled(false);
10//其他文章一贯的cookie设置方式-无效
11//wc.getCookieManager().addCookie(new Cookie("domain域名","JSESSIONID","11"));
12//改为以下方式
13wc.addCookie("Cookie value长串不需要切割",new URL("目标网址"),"domain域名");
14HtmlPage page = wc.getPage("目标网址");
15
16
另外遇到以下棘手问题(未解决)
<p>1//失败:通过改变支持ajax支持方式
2 wc.setAjaxControllr(new NicelyResynchronizingAjaxController());
3
4 //失败:循环判断内容,增加js-ajax执行时间
5 for (int i = 0; i
htmlunit抓取动态网页( :我输入一个之前从来没搜索过的型号却没有数据返回)
网站优化 • 优采云 发表了文章 • 0 个评论 • 102 次浏览 • 2022-04-11 14:23
:我输入一个之前从来没搜索过的型号却没有数据返回)
问题
- - - - - - - - - - - - - 更新 - - - - - - - - - - - - ------
谢谢你的想法。我想通过分析网页的交互是否可以找到方法。我仔细查看了elements中的网页代码,发现搜索结果是通过AJAX返回的一个链接的内容,即()我用python爬取这个链接可以从中得到我想要的。但是我又遇到了一个问题:我在浏览器中搜索过设备型号,比如SC1894,python可以通过上面的链接爬取内容(浏览器也可以直接进入这个getup链接)。如果我输入一个以前从未搜索过的模型并且没有返回数据怎么办?在此之前我错过了什么吗?
----------------------原来的问题-------------- ---
最近在学习爬取动态网页,想咨询一下:
对比chrome F12的元素,我用下面的代码抓取的网页内容缺少了我想要的内容,比如
搜索结果后,我在网上搜索了内容。看来我有时间使用 JavaScript。我需要怎么做才能抓住它?我想征求意见。
import urllib.request
weburl = 'http://search.ickey.cn/?keyword=SC1894&num='
webheader = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = urllib.request.Request(url = weburl, headers = webheader)
webPage = urllib.request.urlopen(req)
data = webPage.read()
data = data.decode('UTF-8')
print(data)
解决方案
网页是动态生成的。在爬取页面数据之前,思路应该是想办法获取动态生成的网页内容。如果你想这样做,你可以使用 PhantomJS 先加载相应的网页,然后再加载。然后把好的内容扔给 Python,然后 Python 开始解析。
补充:
其实每个网站的爬取规则都不一样。如果你不使用无头浏览器(我上面提到的方法),那么在分析API的时候,一定要看清楚API请求当时收录的参数(最基础的),请求方法,是否携带一些具体的http标头等。 查看全部
htmlunit抓取动态网页(
:我输入一个之前从来没搜索过的型号却没有数据返回)

问题
- - - - - - - - - - - - - 更新 - - - - - - - - - - - - ------
谢谢你的想法。我想通过分析网页的交互是否可以找到方法。我仔细查看了elements中的网页代码,发现搜索结果是通过AJAX返回的一个链接的内容,即()我用python爬取这个链接可以从中得到我想要的。但是我又遇到了一个问题:我在浏览器中搜索过设备型号,比如SC1894,python可以通过上面的链接爬取内容(浏览器也可以直接进入这个getup链接)。如果我输入一个以前从未搜索过的模型并且没有返回数据怎么办?在此之前我错过了什么吗?
----------------------原来的问题-------------- ---
最近在学习爬取动态网页,想咨询一下:
对比chrome F12的元素,我用下面的代码抓取的网页内容缺少了我想要的内容,比如
搜索结果后,我在网上搜索了内容。看来我有时间使用 JavaScript。我需要怎么做才能抓住它?我想征求意见。
import urllib.request
weburl = 'http://search.ickey.cn/?keyword=SC1894&num='
webheader = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = urllib.request.Request(url = weburl, headers = webheader)
webPage = urllib.request.urlopen(req)
data = webPage.read()
data = data.decode('UTF-8')
print(data)
解决方案
网页是动态生成的。在爬取页面数据之前,思路应该是想办法获取动态生成的网页内容。如果你想这样做,你可以使用 PhantomJS 先加载相应的网页,然后再加载。然后把好的内容扔给 Python,然后 Python 开始解析。
补充:
其实每个网站的爬取规则都不一样。如果你不使用无头浏览器(我上面提到的方法),那么在分析API的时候,一定要看清楚API请求当时收录的参数(最基础的),请求方法,是否携带一些具体的http标头等。
htmlunit抓取动态网页(现实世界中的问题:我的应用托管在Heroku上)
网站优化 • 优采云 发表了文章 • 0 个评论 • 57 次浏览 • 2022-04-11 05:29
现实世界的问题:
我的应用程序托管在 Heroku 上,据我所知,Heroku 无法提供将无头(无 GUI)浏览器(例如 HTMLUnit)作为 Googlebot 运行的解决方案
生成 HTML 快照以索引我的 AJAX 内容。
我建议的解决方案:
如果您还没有,我建议您阅读 Google 的
“使 AJAX 应用程序可抓取
规格齐全”。
想象一下我有:
注意:Hash Bang (#!) 是 google
规范的一部分。
我想构建一个简单的“托管在 Google App Engine (GAE) 上”
Web 服务”,即:
接受 URL 参数,例如 ://#!tab=TabA&subtab=SubTab3 (URL 参数应该是 URLEncoded) 运行 HTMLUnit 到 #!tab=TabA&subtab=SubTab3 以在服务器上打开和运行客户端 JavaScript。一切完成后(或大约 45 秒后),HTMLUnit 返回到 DOM。返回的内容可以通过 JSON/JSONP 发回,或者将 URL 返回到生成并存储在 google 应用引擎服务器上的文件(用于基于文件的“缓存”结果)......这里欢迎提出建议。如果返回文件的 URL,则可以使用 CURL 获取源代码(也称为 HTML 快照)。
我的应用程序需要管理对...的调用,基本上:
捕获对 Googlebots %26subtab=SubTab3 的调用(googlebot 抓取工具会转义某些字符,例如 %26=&)。从后端向 ://#!tab=TabA&subtab=SubTab3 发送请求(URL 参数应为 URLEncoded),以将返回的 HTML 快照呈现到前端。谷歌索引内容,我们很高兴!
我没有使用 Google App Engine 或 Java 或 HTMLUnit 的经验。
我也许能弄清楚……如果可以的话,我会发布我的结果。
否则,我认为对于某人来说这是一个非常好的机会来写一个踢屁股的博客 文章 概述一个关于新手如何构建这样一个 Web 服务的分步指南。
这将向更多人介绍出色的(免费)Google App
引擎。毫无疑问,这也将鼓励更多地采用 Google 的可抓取 AJAX 内容规范……我们都可以从中受益!
随着 Google 的规范获得更多接受,设置无头浏览器的“障碍”将离开许多
开发者谷歌寻找答案!立即获得名望与荣耀的答案!(编辑:至少我会赞美你)。
@_chrisjacob 如果您想讨论解决方案,请在 Twitter 上联系我。 查看全部
htmlunit抓取动态网页(现实世界中的问题:我的应用托管在Heroku上)
现实世界的问题:
我的应用程序托管在 Heroku 上,据我所知,Heroku 无法提供将无头(无 GUI)浏览器(例如 HTMLUnit)作为 Googlebot 运行的解决方案
生成 HTML 快照以索引我的 AJAX 内容。
我建议的解决方案:
如果您还没有,我建议您阅读 Google 的
“使 AJAX 应用程序可抓取
规格齐全”。
想象一下我有:
注意:Hash Bang (#!) 是 google
规范的一部分。
我想构建一个简单的“托管在 Google App Engine (GAE) 上”
Web 服务”,即:
接受 URL 参数,例如 ://#!tab=TabA&subtab=SubTab3 (URL 参数应该是 URLEncoded) 运行 HTMLUnit 到 #!tab=TabA&subtab=SubTab3 以在服务器上打开和运行客户端 JavaScript。一切完成后(或大约 45 秒后),HTMLUnit 返回到 DOM。返回的内容可以通过 JSON/JSONP 发回,或者将 URL 返回到生成并存储在 google 应用引擎服务器上的文件(用于基于文件的“缓存”结果)......这里欢迎提出建议。如果返回文件的 URL,则可以使用 CURL 获取源代码(也称为 HTML 快照)。
我的应用程序需要管理对...的调用,基本上:
捕获对 Googlebots %26subtab=SubTab3 的调用(googlebot 抓取工具会转义某些字符,例如 %26=&)。从后端向 ://#!tab=TabA&subtab=SubTab3 发送请求(URL 参数应为 URLEncoded),以将返回的 HTML 快照呈现到前端。谷歌索引内容,我们很高兴!
我没有使用 Google App Engine 或 Java 或 HTMLUnit 的经验。
我也许能弄清楚……如果可以的话,我会发布我的结果。
否则,我认为对于某人来说这是一个非常好的机会来写一个踢屁股的博客 文章 概述一个关于新手如何构建这样一个 Web 服务的分步指南。
这将向更多人介绍出色的(免费)Google App
引擎。毫无疑问,这也将鼓励更多地采用 Google 的可抓取 AJAX 内容规范……我们都可以从中受益!
随着 Google 的规范获得更多接受,设置无头浏览器的“障碍”将离开许多
开发者谷歌寻找答案!立即获得名望与荣耀的答案!(编辑:至少我会赞美你)。
@_chrisjacob 如果您想讨论解决方案,请在 Twitter 上联系我。
htmlunit抓取动态网页(1.想要制作动态网页,首先需要了解动态语言制作的特征)
网站优化 • 优采云 发表了文章 • 0 个评论 • 74 次浏览 • 2022-04-09 02:06
1.要做动态网页,首先要了解动态网页的特点。动态网页的第一个特点是使用动态语言,如PHP、ASP、JSP等。以对应的动态语言为后缀,如.php、.asp等,我们称之为制作的网页这种动态语言动态网页。2.动态网页一般基于数据库技术。网页之所以是静态的和动态的,就是看数据是否能实时更新,而能够完成这项工作的正是数据库。交互,从而达到及时更新数据的目的,也大大减少了网站的维护工作。3.动态网页需要服务器的支持。双击以html结尾的文件可以正常打开。即使没有服务器,也不会影响浏览页面。但是动态网页不同,需要服务器的支持。同时,服务器也必须支持这种动态语言才能正常浏览。4.首先需要安装服务器,可以使用windows自带的iis服务器,当然也可以使用比较流行的apache服务器,这个需要根据自己的动态来决定语言,asp选择IIS,php选择apache(当然不是绝对的)。5.接下来是数据库的选择,也需要根据自己的动态语言来选择。如果你使用 ASP 动态语言,你可以选择 ACCESS 数据库。如果你选择PHP,那么你可以选择MYSQL数据库,当然还有其他的数据库选项,视情况而定。6.然后将动态语言和服务器数据库结合起来,不同的结合方式不同。7.上述过程也称为匹配环境,是实现动态网页的必要步骤。可以使用集成环境,windows下可以安装wamp,linux下可以安装xampp。都是一键安装,没有任何难度。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站 并且不同的组合以不同的方式组合。7.上述过程也称为匹配环境,是实现动态网页的必要步骤。可以使用集成环境,windows下可以安装wamp,linux下可以安装xampp。都是一键安装,没有任何难度。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站 并且不同的组合以不同的方式组合。7.上述过程也称为匹配环境,是实现动态网页的必要步骤。可以使用集成环境,windows下可以安装wamp,linux下可以安装xampp。都是一键安装,没有任何难度。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站 没有任何困难。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站 没有任何困难。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站 查看全部
htmlunit抓取动态网页(1.想要制作动态网页,首先需要了解动态语言制作的特征)
1.要做动态网页,首先要了解动态网页的特点。动态网页的第一个特点是使用动态语言,如PHP、ASP、JSP等。以对应的动态语言为后缀,如.php、.asp等,我们称之为制作的网页这种动态语言动态网页。2.动态网页一般基于数据库技术。网页之所以是静态的和动态的,就是看数据是否能实时更新,而能够完成这项工作的正是数据库。交互,从而达到及时更新数据的目的,也大大减少了网站的维护工作。3.动态网页需要服务器的支持。双击以html结尾的文件可以正常打开。即使没有服务器,也不会影响浏览页面。但是动态网页不同,需要服务器的支持。同时,服务器也必须支持这种动态语言才能正常浏览。4.首先需要安装服务器,可以使用windows自带的iis服务器,当然也可以使用比较流行的apache服务器,这个需要根据自己的动态来决定语言,asp选择IIS,php选择apache(当然不是绝对的)。5.接下来是数据库的选择,也需要根据自己的动态语言来选择。如果你使用 ASP 动态语言,你可以选择 ACCESS 数据库。如果你选择PHP,那么你可以选择MYSQL数据库,当然还有其他的数据库选项,视情况而定。6.然后将动态语言和服务器数据库结合起来,不同的结合方式不同。7.上述过程也称为匹配环境,是实现动态网页的必要步骤。可以使用集成环境,windows下可以安装wamp,linux下可以安装xampp。都是一键安装,没有任何难度。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站 并且不同的组合以不同的方式组合。7.上述过程也称为匹配环境,是实现动态网页的必要步骤。可以使用集成环境,windows下可以安装wamp,linux下可以安装xampp。都是一键安装,没有任何难度。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站 并且不同的组合以不同的方式组合。7.上述过程也称为匹配环境,是实现动态网页的必要步骤。可以使用集成环境,windows下可以安装wamp,linux下可以安装xampp。都是一键安装,没有任何难度。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站 没有任何困难。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站 没有任何困难。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站
htmlunit抓取动态网页(给出一个PHP动态生成HTML方法,极大降低服务器CPU负荷)
网站优化 • 优采云 发表了文章 • 0 个评论 • 53 次浏览 • 2022-04-08 00:29
最近在研究PHP的一些开发技术,发现PHP有很多ASP没有的优秀功能。它可以完成一些以前无法完成的功能,比如动态生成HTML静态页面,以减少服务器CPU的负载,提高用户访问速度。 .
我们知道PHP读取MYSQL动态显示,在流量大的情况下,会出现很多性能问题,如果租用别人的虚拟主机,CPU会因为CPU消耗过多而受限,导致无法访问网页 。这里我给出一个PHP动态生成HTML的方法,可以大大降低服务器CPU负载。
首先设置.htaccess文件,将动态调用的参数转换为静态HTML URL地址,例如将post目录下的文件转发到根目录下的wp-post.php文件,并添加语句类似于:
重写规则 ^post/([a-z0-9\-]+\.html)$wp-post.php?$1$2
然后修改wp-post.php文件,在文件开头添加如下PHP代码:
ob_start();
$qstring = isset($_SERVER["QUERY_STRING"]) ? $_SERVER["QUERY_STRING"] : "";
define("HTML_FILE",$_SERVER['DOCUMENT_ROOT']."/post/".$qstring);
如果(文件存在(HTML_FILE))
{
$lcft = filemtime(HTML_FILE);
if (($lcft + 3600) > time())//判断最后生成的HTML文件是否超过1小时,如果不是,直接输出文件内容
{
echo(file_get_contents(HTML_FILE));
退出(0);
}
}
在现有 PHP 代码之后,在当前代码末尾添加以下 PHP 代码:
define("HTMLMETA","");
$buffer = ob_get_flush();
$fp = fopen(HTML_FILE, "w");
如果 ($fp)
{
fwrite($fp, $buffer.HTMLMETA);
fclose($fp);
}
好的,然后查看您的静态 HTML 页面。如果页面末尾出现注释行,则表示静态 HTML 文件已成功创建。 查看全部
htmlunit抓取动态网页(给出一个PHP动态生成HTML方法,极大降低服务器CPU负荷)
最近在研究PHP的一些开发技术,发现PHP有很多ASP没有的优秀功能。它可以完成一些以前无法完成的功能,比如动态生成HTML静态页面,以减少服务器CPU的负载,提高用户访问速度。 .
我们知道PHP读取MYSQL动态显示,在流量大的情况下,会出现很多性能问题,如果租用别人的虚拟主机,CPU会因为CPU消耗过多而受限,导致无法访问网页 。这里我给出一个PHP动态生成HTML的方法,可以大大降低服务器CPU负载。
首先设置.htaccess文件,将动态调用的参数转换为静态HTML URL地址,例如将post目录下的文件转发到根目录下的wp-post.php文件,并添加语句类似于:
重写规则 ^post/([a-z0-9\-]+\.html)$wp-post.php?$1$2
然后修改wp-post.php文件,在文件开头添加如下PHP代码:
ob_start();
$qstring = isset($_SERVER["QUERY_STRING"]) ? $_SERVER["QUERY_STRING"] : "";
define("HTML_FILE",$_SERVER['DOCUMENT_ROOT']."/post/".$qstring);
如果(文件存在(HTML_FILE))
{
$lcft = filemtime(HTML_FILE);
if (($lcft + 3600) > time())//判断最后生成的HTML文件是否超过1小时,如果不是,直接输出文件内容
{
echo(file_get_contents(HTML_FILE));
退出(0);
}
}
在现有 PHP 代码之后,在当前代码末尾添加以下 PHP 代码:
define("HTMLMETA","");
$buffer = ob_get_flush();
$fp = fopen(HTML_FILE, "w");
如果 ($fp)
{
fwrite($fp, $buffer.HTMLMETA);
fclose($fp);
}
好的,然后查看您的静态 HTML 页面。如果页面末尾出现注释行,则表示静态 HTML 文件已成功创建。
htmlunit抓取动态网页(我们自己解析url数据访问你的api好了(组图) )
网站优化 • 优采云 发表了文章 • 0 个评论 • 84 次浏览 • 2022-04-07 17:03
)
最近会先抓取大量的数据并存储起来,然后再讨论现有的历史数据。其中,东方财富网有很多数据,其中之一就是机构研究的数据。
我们要抓取的是js生成的表格。
这种用js爬的网站可没那么简单。它基本上分为几种方法。一种是观察页面,有的有json数据,有的有js代码解析目标url;一是使用渲染工具;另一种是使用工具点击相关按钮抓取url进行进一步分析。
今天我们使用第三个。
我们希望爬取表格中的数据,但是仔细看html代码会发现,这其实是js生成的,下图是源代码截图。
这很尴尬,我该怎么办?让我们自己解析url数据来访问你的api。
我们用浏览器自带的解析功能试试吧。首先,我们打开网络,chrome内核好像是这样叫的。
然后我们点击第二页和第三页,观察js代码访问了哪些后台url。事实是这样
YnQNqDYj¶m=&sortRule=-1&sortType=0&rt=50585869
strLvpoP¶m=&sortRule=-1&sortType=0&rt=50585871
ggPyhcCU¶m=&sortRule=-1&sortType=0&rt=50585871
SjIkKWnA¶m=&sortRule=-1&sortType=0&rt=50585872
我们可以找到模式,本质上是改变paee后面的数字。至于最后一个数字,目前猜测是计数标记,在所有API中设置相同即可。
接下来,我们可以使用urllib来获取api后面的json内容,例如:
查看全部
htmlunit抓取动态网页(我们自己解析url数据访问你的api好了(组图)
)
最近会先抓取大量的数据并存储起来,然后再讨论现有的历史数据。其中,东方财富网有很多数据,其中之一就是机构研究的数据。
我们要抓取的是js生成的表格。
这种用js爬的网站可没那么简单。它基本上分为几种方法。一种是观察页面,有的有json数据,有的有js代码解析目标url;一是使用渲染工具;另一种是使用工具点击相关按钮抓取url进行进一步分析。
今天我们使用第三个。
我们希望爬取表格中的数据,但是仔细看html代码会发现,这其实是js生成的,下图是源代码截图。
这很尴尬,我该怎么办?让我们自己解析url数据来访问你的api。
我们用浏览器自带的解析功能试试吧。首先,我们打开网络,chrome内核好像是这样叫的。
然后我们点击第二页和第三页,观察js代码访问了哪些后台url。事实是这样
YnQNqDYj¶m=&sortRule=-1&sortType=0&rt=50585869
strLvpoP¶m=&sortRule=-1&sortType=0&rt=50585871
ggPyhcCU¶m=&sortRule=-1&sortType=0&rt=50585871
SjIkKWnA¶m=&sortRule=-1&sortType=0&rt=50585872
我们可以找到模式,本质上是改变paee后面的数字。至于最后一个数字,目前猜测是计数标记,在所有API中设置相同即可。
接下来,我们可以使用urllib来获取api后面的json内容,例如:
htmlunit抓取动态网页(你对动态网页制作过程感兴趣吗?自助建站系统)
网站优化 • 优采云 发表了文章 • 0 个评论 • 69 次浏览 • 2022-04-01 14:18
当今社会属于互联网时代,网站设计是互联网行业的重点,你对动态网页的创作过程感兴趣吗?下面小编就为大家带来网站设计和动态网页制作的全过程,希望大家喜欢。
网站设计制作全过程
一、准备域名、主机、自助建站系统。
1、 域源
① 从IDC服务商处购买,com域名约60/年;
②寻找免费二级域名,网上有一些网站提供免费二级域名;或者可以找认识的站长朋友找二级域名;
③在国外寻找免费的顶级域名,比如dot.tk的TK域名。注意:TK域名百度不会收录哦~或者在其他小国找一些免费域名。
2、主机源
① 使用自己的电脑配置相关的网络环境,并要求自己了解这方面的情况;
② 从IDC服务商处购买,简单方便,花钱购买服务即可;
③ 找一个免费的主机。国内外有很多IDC服务商提供免费主机(主要是推广自己的付费主机)。国内的免费主机,我用的最好的是主机房,其他的基本都是乱七八糟的。
3.自助建站系统
PageAdmincms(PageAdmin网站管理系统)
特点:基于开发,灵活易用,可扩展性强,PageAdmin是一个非常独特的系统。不使用主流的html模板进行设计,而是采用背景布局和框架组合设计,简单易用。可用性是pageadmin近年来一直处于cms第一阵营的原因。很多像我这样懒惰不愿意写html界面的用户都会非常喜欢。在企业、学校、政府网站这块基本是首选。
评论:我个人非常喜欢这个系统。我基本上从 2.1 到 3.0 都使用过。一路走来,功能不断给用户带来惊喜,自定义表单和自定义模型的设计非常好。如果您熟悉它,您可以使用该系统扩展许多功能。我用这个系统为一个客户做一个专业的物流管理系统。简而言之,这是一个具有良好基因的系统。如果您有兴趣,请下载它。快来亲自试试吧。
二、配置网站
1、登录域名管理面板,将域名解析到你的主机;
2、登录你的主机管理面板,绑定域名到主机;
3、将网站 源代码上传到您的主机。推荐使用ftp工具上传。如果您不懂外语,建议使用 8Uftp 工具。
三、安装网站源码(如果是简单的网页,这一步可以省略)
四、输入要访问的域名网站。以后可以根据自己的需要修改网站。
制作动态网页的全过程
1.要做动态网页,首先要了解动态网页的特点。动态网页的第一个特点是使用动态语言,如PHP、ASP、JSP等。以对应的动态语言为后缀,如.php、.asp等,我们称之为制作的网页这种动态语言动态网页。
2.动态网页一般基于数据库技术。网页之所以是静态的,是动态的,就是看数据是否能实时更新,而能够完成这项工作的是数据库。交互,从而达到及时更新数据的目的,也大大减少了网站的维护工作。
3.动态网页需要服务器的支持。双击以html结尾的文件可以正常打开。即使没有服务器,也不会影响浏览页面。但是动态网页不同,需要服务器的支持。同时,服务器也必须支持这种动态语言才能正常浏览。
4.首先需要安装服务器,可以使用windows自带的IIS服务器,当然也可以使用比较流行的apache服务器,这个需要根据自己的动态来决定语言,asp选择IIS,php选择apache(当然不是绝对的)。
5.接下来是数据库的选择,也需要根据自己的动态语言来选择。如果你使用ASP动态语言,那么你可以选择ACCESS数据库,如果你选择PHP,那么你可以选择MYSQL数据库,当然还有其他数据库选项,视情况而定。
6.然后将动态语言和服务器数据库结合起来,不同的结合方式不同。
7.上述过程也称为匹配环境,是实现动态网页的必要步骤。可以使用集成环境,windows下可以安装wamp,linux下可以安装xampp。都是一键安装,没有任何难度。
8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,也就是网站的根目录,还有以后存放网页的目录(当然可以改),然后新建一个以php结尾的文件,打开编辑后保存,输入localhost/刚刚创建的文件名在浏览器中,如果出现刚才写的字,就证明已经成功了。
创建个人的过程网站
1.写网站模板,首页模板,内容页,列表页等。
2.根据不同的cms系统(网站后端)调用模板中的数据。
3.测试服务器与各种浏览器的兼容性。
4.购买域名和服务器。
5.在线操作。
猜猜你还对什么感兴趣:
1.网站如何制作图片旋转效果
2.关于网页制作培训报告体验
3.如何在excel表格中制作动态图表
4.ps制作网页效果图教程
5.网页设计布局 查看全部
htmlunit抓取动态网页(你对动态网页制作过程感兴趣吗?自助建站系统)
当今社会属于互联网时代,网站设计是互联网行业的重点,你对动态网页的创作过程感兴趣吗?下面小编就为大家带来网站设计和动态网页制作的全过程,希望大家喜欢。

网站设计制作全过程
一、准备域名、主机、自助建站系统。
1、 域源
① 从IDC服务商处购买,com域名约60/年;
②寻找免费二级域名,网上有一些网站提供免费二级域名;或者可以找认识的站长朋友找二级域名;
③在国外寻找免费的顶级域名,比如dot.tk的TK域名。注意:TK域名百度不会收录哦~或者在其他小国找一些免费域名。
2、主机源
① 使用自己的电脑配置相关的网络环境,并要求自己了解这方面的情况;
② 从IDC服务商处购买,简单方便,花钱购买服务即可;
③ 找一个免费的主机。国内外有很多IDC服务商提供免费主机(主要是推广自己的付费主机)。国内的免费主机,我用的最好的是主机房,其他的基本都是乱七八糟的。
3.自助建站系统
PageAdmincms(PageAdmin网站管理系统)
特点:基于开发,灵活易用,可扩展性强,PageAdmin是一个非常独特的系统。不使用主流的html模板进行设计,而是采用背景布局和框架组合设计,简单易用。可用性是pageadmin近年来一直处于cms第一阵营的原因。很多像我这样懒惰不愿意写html界面的用户都会非常喜欢。在企业、学校、政府网站这块基本是首选。
评论:我个人非常喜欢这个系统。我基本上从 2.1 到 3.0 都使用过。一路走来,功能不断给用户带来惊喜,自定义表单和自定义模型的设计非常好。如果您熟悉它,您可以使用该系统扩展许多功能。我用这个系统为一个客户做一个专业的物流管理系统。简而言之,这是一个具有良好基因的系统。如果您有兴趣,请下载它。快来亲自试试吧。
二、配置网站
1、登录域名管理面板,将域名解析到你的主机;
2、登录你的主机管理面板,绑定域名到主机;
3、将网站 源代码上传到您的主机。推荐使用ftp工具上传。如果您不懂外语,建议使用 8Uftp 工具。
三、安装网站源码(如果是简单的网页,这一步可以省略)
四、输入要访问的域名网站。以后可以根据自己的需要修改网站。
制作动态网页的全过程
1.要做动态网页,首先要了解动态网页的特点。动态网页的第一个特点是使用动态语言,如PHP、ASP、JSP等。以对应的动态语言为后缀,如.php、.asp等,我们称之为制作的网页这种动态语言动态网页。
2.动态网页一般基于数据库技术。网页之所以是静态的,是动态的,就是看数据是否能实时更新,而能够完成这项工作的是数据库。交互,从而达到及时更新数据的目的,也大大减少了网站的维护工作。
3.动态网页需要服务器的支持。双击以html结尾的文件可以正常打开。即使没有服务器,也不会影响浏览页面。但是动态网页不同,需要服务器的支持。同时,服务器也必须支持这种动态语言才能正常浏览。
4.首先需要安装服务器,可以使用windows自带的IIS服务器,当然也可以使用比较流行的apache服务器,这个需要根据自己的动态来决定语言,asp选择IIS,php选择apache(当然不是绝对的)。
5.接下来是数据库的选择,也需要根据自己的动态语言来选择。如果你使用ASP动态语言,那么你可以选择ACCESS数据库,如果你选择PHP,那么你可以选择MYSQL数据库,当然还有其他数据库选项,视情况而定。
6.然后将动态语言和服务器数据库结合起来,不同的结合方式不同。
7.上述过程也称为匹配环境,是实现动态网页的必要步骤。可以使用集成环境,windows下可以安装wamp,linux下可以安装xampp。都是一键安装,没有任何难度。
8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,也就是网站的根目录,还有以后存放网页的目录(当然可以改),然后新建一个以php结尾的文件,打开编辑后保存,输入localhost/刚刚创建的文件名在浏览器中,如果出现刚才写的字,就证明已经成功了。
创建个人的过程网站
1.写网站模板,首页模板,内容页,列表页等。
2.根据不同的cms系统(网站后端)调用模板中的数据。
3.测试服务器与各种浏览器的兼容性。
4.购买域名和服务器。
5.在线操作。
猜猜你还对什么感兴趣:
1.网站如何制作图片旋转效果
2.关于网页制作培训报告体验
3.如何在excel表格中制作动态图表
4.ps制作网页效果图教程
5.网页设计布局
htmlunit抓取动态网页(-scrapinghtmlunit使用htmlunit-的网页上的javascript办法)
网站优化 • 优采云 发表了文章 • 0 个评论 • 74 次浏览 • 2022-03-31 11:22
标签:javajavascriptscreen-scrapinghtmlunit
在使用 htmlunit 抓取网页时,我偶尔会注意到这些警告充斥着控制台输出。
Jul 24, 2011 5:12:59 PM com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter warning
WARNING: warning: message=[Calling eval() with anything other than a primitive string value
will simply return the value. Is this what you intended?] sourceName=[http://ad.doubleclick.net/adj/ ... 40%3F] line=[356] lineSource=[null] lineOffset=[0]
有没有办法让htmlunit忽略
javascript
就算了
再次,有没有办法让 htmlunit 只解释收录特定子字符串或匹配正则表达式的网页上的 javascript?
1 个回答:
答案 0 :( 得分:2)
您可以通过实现自己的 javascript 来删除不需要的 JavaScriptScriptPreProcessor。您的 ScriptPreProcessor 可以检测到您不想执行的 jsvascript,而不是将其从 网站 中删除。
我没有尝试过,但它可能会起作用。 查看全部
htmlunit抓取动态网页(-scrapinghtmlunit使用htmlunit-的网页上的javascript办法)
标签:javajavascriptscreen-scrapinghtmlunit
在使用 htmlunit 抓取网页时,我偶尔会注意到这些警告充斥着控制台输出。
Jul 24, 2011 5:12:59 PM com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter warning
WARNING: warning: message=[Calling eval() with anything other than a primitive string value
will simply return the value. Is this what you intended?] sourceName=[http://ad.doubleclick.net/adj/ ... 40%3F] line=[356] lineSource=[null] lineOffset=[0]
有没有办法让htmlunit忽略
javascript
就算了
再次,有没有办法让 htmlunit 只解释收录特定子字符串或匹配正则表达式的网页上的 javascript?
1 个回答:
答案 0 :( 得分:2)
您可以通过实现自己的 javascript 来删除不需要的 JavaScriptScriptPreProcessor。您的 ScriptPreProcessor 可以检测到您不想执行的 jsvascript,而不是将其从 网站 中删除。
我没有尝试过,但它可能会起作用。
操作方法:java爬虫工具htmlunit爬取静动态示例(附带亲测可用所有jar包)
网站优化 • 优采云 发表了文章 • 0 个评论 • 113 次浏览 • 2022-09-23 19:12
本文提供的所有jar包均非maven导入。您需要自己了解如何导入 pom。
抓取静态页面
爬取静态页面的基础包:htmlunit基础jar包
有些人可能还需要这两个包:
jetty-websocket.jar
jsoup.jar
以上所有jar包都导入后,来hello word。
public static void main(String[] args) throws IOException {
// 实例化Web客户端
WebClient webClient = new WebClient();
// 爬取https网站需要设置为true
webClient.getOptions().setUseInsecureSSL(true);
// 解析获取页面
HtmlPage page = webClient.getPage("https://www.baidu.com");
// 获取Html
System.out.println("网页html:" + page.asXml());
System.out.println("====================");
// 获取文本
System.out.println("网页文本:" + page.asText());
}
到目前为止,以上功能可以抓取静态页面。绝对没问题。
抓取动态页面
爬取动态页面基础包:htmlunit爬取动态页面jar包
爬取动态界面示例演示
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;
import java.util.logging.Level;
public class GetSongDemo {
@Test
public void show() throws Exception {
readHtml("https://y.qq.com/n/yqq/song/00 ... 6quot;);
}
public static void readHtml(String url) throws Exception {
// 不显示异常日志
LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log",
"org.apache.commons.logging.impl.NoOpLog");
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit")
.setLevel(Level.OFF);
java.util.logging.Logger.getLogger("org.apache.commons.httpclient")
.setLevel(Level.OFF);
WebClient wc = new WebClient(BrowserVersion.BEST_SUPPORTED);
<p>
wc.setJavaScriptTimeout(10000);
//接受任何主机连接 无论是否有有效证书
wc.getOptions().setUseInsecureSSL(true);
//设置支持javascript脚本
wc.getOptions().setJavaScriptEnabled(true);
//js运行错误时不抛出异常
wc.getOptions().setThrowExceptionOnScriptError(false);
//设置连接超时时间
wc.getOptions().setTimeout(100000);
wc.getOptions().setDoNotTrackEnabled(false);
//当HTTP的状态非200时是否抛出异常
wc.getOptions().setThrowExceptionOnFailingStatusCode(false);
wc.getOptions().setActiveXNative(false);
//是否启用CSS
wc.getOptions().setCssEnabled(false);
//很重要,设置支持AJAX
wc.setAjaxController(new NicelyResynchronizingAjaxController());
HtmlPage page = wc.getPage(url);
Thread.sleep(10000);
System.out.println(page.asXml());
System.out.println(page.asText());
}
}</p>
技巧:如何爬取动态网页的数据?Python实战案例(python爬虫动态数据获取)
如何从动态网页抓取数据? Python实战案例(python爬虫动态数据获取)
前言
一、什么是动态网页
所谓动态网页是指相对于静态网页的一种网页编程技术。对于静态网页,随着html代码的生成,页面的内容和显示效果基本不会改变——除非你修改了页面代码。动态网页并非如此。虽然页面代码没有改变,但是显示的内容会随着时间、环境或数据库操作的结果而改变。 ——来源百度百科
动态网页具有工作量减少、内容更新快、可完成功能多等特点。
二、什么是 AJAX
随着人们对动态网页加载速度的要求越来越高,AJAX 技术应运而生,并成为许多网站的首选。 AJAX 是一种用于创建快速和动态网页的技术,它通过在后台与服务器交换少量数据来实现网页的异步更新。这意味着无需重新加载整个网页即可更新网页的某些部分。
三、如何爬取AJAX动态加载网页
1.解析接口
只要有数据发送,就一定有请求发送到服务器。我们只需要找出它悄悄加载的页面的真实请求。特点:爬取速度快,爬取数据干净,部分网站解析困难。
2.硒
什么是硒?它最初是一个自动化测试工具,但已经被广泛的用户爬取。是一个可以用代码操作浏览器的工具,比如控制浏览器的下滑,模拟鼠标点击等。特点:代码比较简单,爬取速度慢,ip容易被封.
项目实践
一、分析界面
既然如此,我们来启动爬虫的正确姿势,先用解析接口的方法来写爬虫。 查看全部
操作方法:java爬虫工具htmlunit爬取静动态示例(附带亲测可用所有jar包)
本文提供的所有jar包均非maven导入。您需要自己了解如何导入 pom。
抓取静态页面
爬取静态页面的基础包:htmlunit基础jar包
有些人可能还需要这两个包:
jetty-websocket.jar
jsoup.jar
以上所有jar包都导入后,来hello word。
public static void main(String[] args) throws IOException {
// 实例化Web客户端
WebClient webClient = new WebClient();
// 爬取https网站需要设置为true
webClient.getOptions().setUseInsecureSSL(true);
// 解析获取页面
HtmlPage page = webClient.getPage("https://www.baidu.com");
// 获取Html
System.out.println("网页html:" + page.asXml());
System.out.println("====================");
// 获取文本
System.out.println("网页文本:" + page.asText());
}
到目前为止,以上功能可以抓取静态页面。绝对没问题。
抓取动态页面
爬取动态页面基础包:htmlunit爬取动态页面jar包
爬取动态界面示例演示

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;
import java.util.logging.Level;
public class GetSongDemo {
@Test
public void show() throws Exception {
readHtml("https://y.qq.com/n/yqq/song/00 ... 6quot;);
}
public static void readHtml(String url) throws Exception {
// 不显示异常日志
LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log",
"org.apache.commons.logging.impl.NoOpLog");
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit")
.setLevel(Level.OFF);
java.util.logging.Logger.getLogger("org.apache.commons.httpclient")
.setLevel(Level.OFF);
WebClient wc = new WebClient(BrowserVersion.BEST_SUPPORTED);
<p>

wc.setJavaScriptTimeout(10000);
//接受任何主机连接 无论是否有有效证书
wc.getOptions().setUseInsecureSSL(true);
//设置支持javascript脚本
wc.getOptions().setJavaScriptEnabled(true);
//js运行错误时不抛出异常
wc.getOptions().setThrowExceptionOnScriptError(false);
//设置连接超时时间
wc.getOptions().setTimeout(100000);
wc.getOptions().setDoNotTrackEnabled(false);
//当HTTP的状态非200时是否抛出异常
wc.getOptions().setThrowExceptionOnFailingStatusCode(false);
wc.getOptions().setActiveXNative(false);
//是否启用CSS
wc.getOptions().setCssEnabled(false);
//很重要,设置支持AJAX
wc.setAjaxController(new NicelyResynchronizingAjaxController());
HtmlPage page = wc.getPage(url);
Thread.sleep(10000);
System.out.println(page.asXml());
System.out.println(page.asText());
}
}</p>
技巧:如何爬取动态网页的数据?Python实战案例(python爬虫动态数据获取)
如何从动态网页抓取数据? Python实战案例(python爬虫动态数据获取)
前言
一、什么是动态网页
所谓动态网页是指相对于静态网页的一种网页编程技术。对于静态网页,随着html代码的生成,页面的内容和显示效果基本不会改变——除非你修改了页面代码。动态网页并非如此。虽然页面代码没有改变,但是显示的内容会随着时间、环境或数据库操作的结果而改变。 ——来源百度百科

动态网页具有工作量减少、内容更新快、可完成功能多等特点。
二、什么是 AJAX
随着人们对动态网页加载速度的要求越来越高,AJAX 技术应运而生,并成为许多网站的首选。 AJAX 是一种用于创建快速和动态网页的技术,它通过在后台与服务器交换少量数据来实现网页的异步更新。这意味着无需重新加载整个网页即可更新网页的某些部分。
三、如何爬取AJAX动态加载网页
1.解析接口
只要有数据发送,就一定有请求发送到服务器。我们只需要找出它悄悄加载的页面的真实请求。特点:爬取速度快,爬取数据干净,部分网站解析困难。

2.硒
什么是硒?它最初是一个自动化测试工具,但已经被广泛的用户爬取。是一个可以用代码操作浏览器的工具,比如控制浏览器的下滑,模拟鼠标点击等。特点:代码比较简单,爬取速度慢,ip容易被封.
项目实践
一、分析界面
既然如此,我们来启动爬虫的正确姿势,先用解析接口的方法来写爬虫。
聚焦爬虫原理及其金融风控运用
网站优化 • 优采云 发表了文章 • 0 个评论 • 275 次浏览 • 2022-05-06 21:01
导读
马云说,大数据时代来了。现在太多互联网公司都在做大数据,每个公司的数据来源都不止一个,其中占比重较大的一个数据源非网络爬虫莫属。然而不同的公司格局业务背景不同,所需要的数据类型也就不同。不同于搜索网站所用的通用爬虫,聚焦爬虫开始越来越多的被人们提起。
目录
1. 聚焦爬虫的原理
2. 聚焦爬虫的发展
3. 爬虫在互联网金融领域应用
4. 结语
1.聚焦爬虫的原理
1.1概念
聚焦爬虫,又称主题爬虫(或专业爬虫),是“面向特定主题”的一种网络爬虫程序。它与我们通常所说的爬虫(通用爬虫)的区别之处就在于,聚焦爬虫在实施网页抓取时要进行主题筛选。它尽量保证只抓取与主题相关的网页信息。
1.2 聚焦爬虫的分类
聚焦爬虫主要分为两大类。一类是浅聚焦爬虫,所谓浅聚焦爬虫是指,爬虫程序抓取特定网站的的所有信息。其工作方式和通用爬虫几乎一样,唯一的区别是种子URL的选定确定了抓取内容的一致,其核心是种子URL的选择。另一类是深聚焦爬虫,深聚焦爬虫是指在海量的不同内容网页中,通过主题相关度算法选择主题相近的URL和内容进行爬取。其核心是如何判断所爬取的URL和页面内容是与主题相关的。
关系如下:
由图可见,浅聚焦爬虫可以看成是将通用爬虫局限在了一个单一主题的网站上,因此我们通常所说的聚焦爬虫大多是指深聚焦爬虫。
1.2.1 浅聚焦爬虫
浅聚焦爬虫从一个或若干初始网页的URL开始,(例如分类信息网)获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
其工作流程如图:
可见浅聚焦爬虫的基本原理跟通用爬虫的基本原理是一样的,其特点是选定种子URL,例如,要抓取招聘信息,可以将招聘网站的URL作为种子URL。用主题网站保证了抓取内容的主题一致。
1.2.2 深聚焦爬虫
深聚焦爬虫最主要的特点是主题一致性。然而在浩如烟海的互联网大数据中要保证所抓取的数据主题一致并不是一件简单的事情。针对不同的数据需求,这其中需要的策略和方式并没有统一的解答。在这里不说具体的解决方法,只讨论一下常见的解决思路。
一、针对页面内容
这种解决方法是不管页面的主题是什么,先将页面爬取下来。对页面进行简单的去噪后,利用主题提取策略对处理后的页面内容进行主题提取,最后对比设定好的主题,如果主题一致,或在一定的阀值内,则保存页面进一步进行数据清洗。若主题偏差超过一点阀值,则直接丢弃页面。
这种方式的优点是链接页面全覆盖,不会出现数据遗漏。但是缺点也十分致命,那就是全覆盖的页面,很大一部分是与主题无关的废弃页面,这极大的拖慢了爬虫爬取数据的速度。到后期,爬取数据的速度将是无法接受的。
二、针对URL
上面介绍了浅聚焦爬虫的核心是选定合适的种子URL,这些种子URL主要是主题网站的入口URL。
互联网上的网站一般都是有固定主题的,并且同一网站中同一主题的页面URL,都有一定的规律可循。由此,通过URL预测页面主题的思路也就自然而生了。此外,页面中绝大部分超链接都是带有锚文本的,而锚文本基本可以看做是对目标页面的概括描述。结合对URL的分析和对锚文本的分析,对目标页面进行主题预测的正确率也就相当可观了。
然而,这种预测结果并不能完全保证丢弃的URL都是与主题无关的,因此会有一些遗漏。同时,这种方式也无法确保通过预测的页面都是与主题相关的,因此需要对通过的预测的URL页面进行页面内容主题提取,再对比与设定的主题做出取舍。
通过上面的分析,得出一般的解决方法。就是先通过URL分析,丢弃部分URL。下载页面后,对页面内容进行主题提取,对比预设定的主题做取舍。最后进行数据清洗。
1.3架构
深聚焦爬虫的一般结构如下图:
六个主要的组成部分【控制中心】【下载模块】【抽取模块】【清洗模块】【消重模块】【资源模块】
控制模块:控制模块由程序出入口、下载调度策略、抽取调度策略、清洗调度策略和URL消重调度策略组成。
下载模块:根据控制中心传过来的URL,IP,COOKIE等下载资源下载页面,并将下载结果返回给控制中心。
抽取模块:接受控制中心下发的页面源代码和抽取指标,根据抽取指标对源代码进行抽取,并将抽取结果返回控制中心。
清洗模块分为文本清洗和URL清洗,文本清洗根据预设的主题以及相对应的主题相关度算法,决定是舍弃文本,还是将文本保存入库。URL清洗是根据URL分析结果,预测当前URL所链接的页面是否与主题相关,若相关则将URL返回控制中心,反之丢弃此URL。
URL消重模块:针对有些主题突出的页面被许多页面链接,从而导致大量重复下载此页面造成资源浪费和数据质量低下的情况,调用消重模块将重复的URL丢弃,将不重复的URL返回到下载资源模块的URL队列中。
资源模块:保存有下载所需要的所有资源,包括代理IP,COOKIE,URL等信息。
2. 聚焦爬虫的发展
大数据时代,对数据的多样性和针对性要求越来越高。随之爬虫的架构方式也更加灵活多变。比较常见的开源爬虫框架有Crawler4j、WebMagic、WebCollector、scrapy等。另一方面,针对爬虫的抓取,被抓取网站也制定了相应的防爬虫措施。常见的防爬虫方式有如下几种:
一、针对频繁访问网站的IP设定访问限制。这是最常见的一种放爬虫方式,具体体现是,在一个单位时间内,同一个IP的请求数量达到了网站设计的阀值,这个IP就被限制访问。面对这种情况,可以制定适当的IP访问策略。
二、使用js和ajax技术的动态页面。这样的网页源代码中并没有包含所需的数据,数据包裹存在于二次请求的返回文档中。针对这样的页面,可以分析请求过程,提取二次请求的URL,进而得到想要的数据。
三、其他情况:随着互联网的不断发展,出现了各种各样的防爬虫方式。这就需要人们根据实际情况,针对性的解决问题。比如使用模拟浏览器(htmlunit,selenium)技术等。
总之,没有一成不变的互联网,就没有一成不变的爬虫,拥抱变化,才能让爬虫爬的更远。
3.爬虫在互联网金融领域的应用
聚焦爬虫作为数据的主要来源之一,下面就说说聚焦爬虫的应用场景,以我所就职的普惠金融信息服务(上海)有限公司(后面简称普惠)为例。
3.1、网贷行业的数据驱动策略
数据驱动,就是得到前来贷款的客户的指定数据,根据这些数据以及相应的一套算法策略,给客户定义一个标签。借贷部门根据客户的标签决定是否贷款给该客户以及贷多少给该客户。通过这种定义标签的方式,有效阻止大部分骗贷的发生,从而规避风险。
那么,网贷平台如何运用大数据判断客户的信用的呢?粗略的分为两个方面:
1、查看这个人的购物习惯,客户提供的账单流水信息等。这种方法相信一个人若是经常在网上购物、有详细的银行账单并且有正常的通话记录,那么这个人是一个正常的且有一定的经济能力的人。也就是说,这样的人是有能力还贷款的。相对于发达国家健全的征信系统,在中国这种评价方式在一定时间内,是可行有效的。
2、另一方面,我们相信绝大多数的骗子并不是贷完款后才变成骗子的。骗子来 贷款之前就已经是骗子。那么在骗子的行骗生涯中,或多或少地会在互联网上留下痕迹。比如,有许多专门曝光骗子老赖的网站,也有许多骗子在一些社交网站上有人针对曝光。针对这些曝光的数据,平台大数据中心使用聚焦爬虫进行爬取,然后将爬取到的数据保存到黑名单中。
有上面两点可以看出来,不管是爬取交易账单等信息,还是抓取曝光的骗子等数据,都离不开聚焦爬虫的应用。
然而,随着互联网的不断发展变化,数据风控官们发现,通过传统方式做风险控制越来越困难。通过传统方式爬取的数据,基本都是属于一个人的点状数据,并且是片面的点状数据。何为点状数据?若是把所有人看成一个整体数据,那么最形象的结构就是一张人物关系数据网。每个人都是网中的一个节点,即每个人的数据就是一个点状的数据。由于个人隐私的原因,我们无法也不可能得到一个人的全方位数据,只能截取其中的一个或几个片面 。
通过这些数据来判断一个人的信用等级有两个弊端,一是数据的不全面会导致判断的失准,这个弊端无法避免,只能尽可能多的得到数据,并制定更优化的算法模型;二是点状的数据随着互联网的发展有了更多造假的可能性。比如说电商的交易记录,若是有心造假,很容易就可以制造一批完全符合高信用等级的交易记录。因此,点状数据在未来的风控系统中所占的比重会逐渐减少。
相对应于点状数据的不足,爬虫界有人提出了建立网状数据的可能性。基本想法是,通过聚焦爬虫爬取各大社交网站,根据这些数据建立人物关系网络,在关系网络的结构中,给每个人添加补充各个维度的数据。其理想的数据集合是每个来平台贷款的人都存在于平台大数据中心的人物关系网络中。并且我们知道其关系密切的人的标签(画像)。
例如张三来贷款,大数据中心不但要知道张三的信用评价,还要知道与张三关系紧密的若干人的信用评价。这有什么用呢?假设张三贷款的场景如下:张三通过大数据中心的传统信用评价方式,得到了信用良好的评价。但是,我们通过关系网络发现与张三关系密切的人中,有多个人在信用评价中得到了信用低下的评价,甚至在黑名单中。这个时候我们就要怀疑张三的数据是否是精心假造的。根据物以类聚,人以群分的道理,我们相信这种怀疑是很有必要的。
张三的人物关系网络图:
由上张图可以发现,张三信用良好的评价并不可靠,贷款给张三会带来很大的风险。传统的风控方式显然并不能规避这种风险,且这种风险会随着骗贷人越来越了解贷款公司的信用评价方式而增多。试想,在未来的时间里,由于骗贷人对公司的风控有了大致方向的了解,从而在某一方面伪造了良好的记录。大数据中心爬取了这些数据从而错误地判断了信用等级,那贷款公司所承受的风险将会急剧扩大。
针对未来这种风险,人物关系数据网络给出了解决的可能性。若是没有完善且可靠的官方征信系统的出现,人物关系数据网络将是未来无抵押贷款公司风险控制的主流方式。然而建立人物关系数据网络并不是一朝一夕的事情。
4.结语
每一个社交网站都有海量的数据,和海量数据成正比的是社交网站的防爬虫策略。这就对爬虫提出了更高更严格的要求,也更细化了不同爬虫之间的差异。然而一成不变不是互联网的主调,依存互联网生存的公司,更要学会拥抱变化,甚至预测变化,方能在未来乘风破浪,越行越远。 查看全部
聚焦爬虫原理及其金融风控运用
导读
马云说,大数据时代来了。现在太多互联网公司都在做大数据,每个公司的数据来源都不止一个,其中占比重较大的一个数据源非网络爬虫莫属。然而不同的公司格局业务背景不同,所需要的数据类型也就不同。不同于搜索网站所用的通用爬虫,聚焦爬虫开始越来越多的被人们提起。
目录
1. 聚焦爬虫的原理
2. 聚焦爬虫的发展
3. 爬虫在互联网金融领域应用
4. 结语
1.聚焦爬虫的原理
1.1概念
聚焦爬虫,又称主题爬虫(或专业爬虫),是“面向特定主题”的一种网络爬虫程序。它与我们通常所说的爬虫(通用爬虫)的区别之处就在于,聚焦爬虫在实施网页抓取时要进行主题筛选。它尽量保证只抓取与主题相关的网页信息。
1.2 聚焦爬虫的分类
聚焦爬虫主要分为两大类。一类是浅聚焦爬虫,所谓浅聚焦爬虫是指,爬虫程序抓取特定网站的的所有信息。其工作方式和通用爬虫几乎一样,唯一的区别是种子URL的选定确定了抓取内容的一致,其核心是种子URL的选择。另一类是深聚焦爬虫,深聚焦爬虫是指在海量的不同内容网页中,通过主题相关度算法选择主题相近的URL和内容进行爬取。其核心是如何判断所爬取的URL和页面内容是与主题相关的。
关系如下:
由图可见,浅聚焦爬虫可以看成是将通用爬虫局限在了一个单一主题的网站上,因此我们通常所说的聚焦爬虫大多是指深聚焦爬虫。
1.2.1 浅聚焦爬虫
浅聚焦爬虫从一个或若干初始网页的URL开始,(例如分类信息网)获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
其工作流程如图:
可见浅聚焦爬虫的基本原理跟通用爬虫的基本原理是一样的,其特点是选定种子URL,例如,要抓取招聘信息,可以将招聘网站的URL作为种子URL。用主题网站保证了抓取内容的主题一致。
1.2.2 深聚焦爬虫
深聚焦爬虫最主要的特点是主题一致性。然而在浩如烟海的互联网大数据中要保证所抓取的数据主题一致并不是一件简单的事情。针对不同的数据需求,这其中需要的策略和方式并没有统一的解答。在这里不说具体的解决方法,只讨论一下常见的解决思路。
一、针对页面内容
这种解决方法是不管页面的主题是什么,先将页面爬取下来。对页面进行简单的去噪后,利用主题提取策略对处理后的页面内容进行主题提取,最后对比设定好的主题,如果主题一致,或在一定的阀值内,则保存页面进一步进行数据清洗。若主题偏差超过一点阀值,则直接丢弃页面。
这种方式的优点是链接页面全覆盖,不会出现数据遗漏。但是缺点也十分致命,那就是全覆盖的页面,很大一部分是与主题无关的废弃页面,这极大的拖慢了爬虫爬取数据的速度。到后期,爬取数据的速度将是无法接受的。
二、针对URL
上面介绍了浅聚焦爬虫的核心是选定合适的种子URL,这些种子URL主要是主题网站的入口URL。
互联网上的网站一般都是有固定主题的,并且同一网站中同一主题的页面URL,都有一定的规律可循。由此,通过URL预测页面主题的思路也就自然而生了。此外,页面中绝大部分超链接都是带有锚文本的,而锚文本基本可以看做是对目标页面的概括描述。结合对URL的分析和对锚文本的分析,对目标页面进行主题预测的正确率也就相当可观了。
然而,这种预测结果并不能完全保证丢弃的URL都是与主题无关的,因此会有一些遗漏。同时,这种方式也无法确保通过预测的页面都是与主题相关的,因此需要对通过的预测的URL页面进行页面内容主题提取,再对比与设定的主题做出取舍。
通过上面的分析,得出一般的解决方法。就是先通过URL分析,丢弃部分URL。下载页面后,对页面内容进行主题提取,对比预设定的主题做取舍。最后进行数据清洗。
1.3架构
深聚焦爬虫的一般结构如下图:
六个主要的组成部分【控制中心】【下载模块】【抽取模块】【清洗模块】【消重模块】【资源模块】
控制模块:控制模块由程序出入口、下载调度策略、抽取调度策略、清洗调度策略和URL消重调度策略组成。
下载模块:根据控制中心传过来的URL,IP,COOKIE等下载资源下载页面,并将下载结果返回给控制中心。
抽取模块:接受控制中心下发的页面源代码和抽取指标,根据抽取指标对源代码进行抽取,并将抽取结果返回控制中心。
清洗模块分为文本清洗和URL清洗,文本清洗根据预设的主题以及相对应的主题相关度算法,决定是舍弃文本,还是将文本保存入库。URL清洗是根据URL分析结果,预测当前URL所链接的页面是否与主题相关,若相关则将URL返回控制中心,反之丢弃此URL。
URL消重模块:针对有些主题突出的页面被许多页面链接,从而导致大量重复下载此页面造成资源浪费和数据质量低下的情况,调用消重模块将重复的URL丢弃,将不重复的URL返回到下载资源模块的URL队列中。
资源模块:保存有下载所需要的所有资源,包括代理IP,COOKIE,URL等信息。
2. 聚焦爬虫的发展
大数据时代,对数据的多样性和针对性要求越来越高。随之爬虫的架构方式也更加灵活多变。比较常见的开源爬虫框架有Crawler4j、WebMagic、WebCollector、scrapy等。另一方面,针对爬虫的抓取,被抓取网站也制定了相应的防爬虫措施。常见的防爬虫方式有如下几种:
一、针对频繁访问网站的IP设定访问限制。这是最常见的一种放爬虫方式,具体体现是,在一个单位时间内,同一个IP的请求数量达到了网站设计的阀值,这个IP就被限制访问。面对这种情况,可以制定适当的IP访问策略。
二、使用js和ajax技术的动态页面。这样的网页源代码中并没有包含所需的数据,数据包裹存在于二次请求的返回文档中。针对这样的页面,可以分析请求过程,提取二次请求的URL,进而得到想要的数据。
三、其他情况:随着互联网的不断发展,出现了各种各样的防爬虫方式。这就需要人们根据实际情况,针对性的解决问题。比如使用模拟浏览器(htmlunit,selenium)技术等。
总之,没有一成不变的互联网,就没有一成不变的爬虫,拥抱变化,才能让爬虫爬的更远。
3.爬虫在互联网金融领域的应用
聚焦爬虫作为数据的主要来源之一,下面就说说聚焦爬虫的应用场景,以我所就职的普惠金融信息服务(上海)有限公司(后面简称普惠)为例。
3.1、网贷行业的数据驱动策略
数据驱动,就是得到前来贷款的客户的指定数据,根据这些数据以及相应的一套算法策略,给客户定义一个标签。借贷部门根据客户的标签决定是否贷款给该客户以及贷多少给该客户。通过这种定义标签的方式,有效阻止大部分骗贷的发生,从而规避风险。
那么,网贷平台如何运用大数据判断客户的信用的呢?粗略的分为两个方面:
1、查看这个人的购物习惯,客户提供的账单流水信息等。这种方法相信一个人若是经常在网上购物、有详细的银行账单并且有正常的通话记录,那么这个人是一个正常的且有一定的经济能力的人。也就是说,这样的人是有能力还贷款的。相对于发达国家健全的征信系统,在中国这种评价方式在一定时间内,是可行有效的。
2、另一方面,我们相信绝大多数的骗子并不是贷完款后才变成骗子的。骗子来 贷款之前就已经是骗子。那么在骗子的行骗生涯中,或多或少地会在互联网上留下痕迹。比如,有许多专门曝光骗子老赖的网站,也有许多骗子在一些社交网站上有人针对曝光。针对这些曝光的数据,平台大数据中心使用聚焦爬虫进行爬取,然后将爬取到的数据保存到黑名单中。
有上面两点可以看出来,不管是爬取交易账单等信息,还是抓取曝光的骗子等数据,都离不开聚焦爬虫的应用。
然而,随着互联网的不断发展变化,数据风控官们发现,通过传统方式做风险控制越来越困难。通过传统方式爬取的数据,基本都是属于一个人的点状数据,并且是片面的点状数据。何为点状数据?若是把所有人看成一个整体数据,那么最形象的结构就是一张人物关系数据网。每个人都是网中的一个节点,即每个人的数据就是一个点状的数据。由于个人隐私的原因,我们无法也不可能得到一个人的全方位数据,只能截取其中的一个或几个片面 。
通过这些数据来判断一个人的信用等级有两个弊端,一是数据的不全面会导致判断的失准,这个弊端无法避免,只能尽可能多的得到数据,并制定更优化的算法模型;二是点状的数据随着互联网的发展有了更多造假的可能性。比如说电商的交易记录,若是有心造假,很容易就可以制造一批完全符合高信用等级的交易记录。因此,点状数据在未来的风控系统中所占的比重会逐渐减少。
相对应于点状数据的不足,爬虫界有人提出了建立网状数据的可能性。基本想法是,通过聚焦爬虫爬取各大社交网站,根据这些数据建立人物关系网络,在关系网络的结构中,给每个人添加补充各个维度的数据。其理想的数据集合是每个来平台贷款的人都存在于平台大数据中心的人物关系网络中。并且我们知道其关系密切的人的标签(画像)。
例如张三来贷款,大数据中心不但要知道张三的信用评价,还要知道与张三关系紧密的若干人的信用评价。这有什么用呢?假设张三贷款的场景如下:张三通过大数据中心的传统信用评价方式,得到了信用良好的评价。但是,我们通过关系网络发现与张三关系密切的人中,有多个人在信用评价中得到了信用低下的评价,甚至在黑名单中。这个时候我们就要怀疑张三的数据是否是精心假造的。根据物以类聚,人以群分的道理,我们相信这种怀疑是很有必要的。
张三的人物关系网络图:
由上张图可以发现,张三信用良好的评价并不可靠,贷款给张三会带来很大的风险。传统的风控方式显然并不能规避这种风险,且这种风险会随着骗贷人越来越了解贷款公司的信用评价方式而增多。试想,在未来的时间里,由于骗贷人对公司的风控有了大致方向的了解,从而在某一方面伪造了良好的记录。大数据中心爬取了这些数据从而错误地判断了信用等级,那贷款公司所承受的风险将会急剧扩大。
针对未来这种风险,人物关系数据网络给出了解决的可能性。若是没有完善且可靠的官方征信系统的出现,人物关系数据网络将是未来无抵押贷款公司风险控制的主流方式。然而建立人物关系数据网络并不是一朝一夕的事情。
4.结语
每一个社交网站都有海量的数据,和海量数据成正比的是社交网站的防爬虫策略。这就对爬虫提出了更高更严格的要求,也更细化了不同爬虫之间的差异。然而一成不变不是互联网的主调,依存互联网生存的公司,更要学会拥抱变化,甚至预测变化,方能在未来乘风破浪,越行越远。
[聚焦爬虫]聚焦爬虫原理及其金融风控运用
网站优化 • 优采云 发表了文章 • 0 个评论 • 236 次浏览 • 2022-05-06 21:01
导读
马云说,大数据时代来了。现在太多互联网公司都在做大数据,每个公司的数据来源都不止一个,其中占比重较大的一个数据源非网络爬虫莫属。然而不同的公司格局业务背景不同,所需要的数据类型也就不同。不同于搜索网站所用的通用爬虫,聚焦爬虫开始越来越多的被人们提起。
目录
1. 聚焦爬虫的原理
2. 聚焦爬虫的发展
3. 爬虫在互联网金融领域应用
4. 结语
1.聚焦爬虫的原理
1.1概念
聚焦爬虫,又称主题爬虫(或专业爬虫),是“面向特定主题”的一种网络爬虫程序。它与我们通常所说的爬虫(通用爬虫)的区别之处就在于,聚焦爬虫在实施网页抓取时要进行主题筛选。它尽量保证只抓取与主题相关的网页信息。
1.2 聚焦爬虫的分类
聚焦爬虫主要分为两大类。一类是浅聚焦爬虫,所谓浅聚焦爬虫是指,爬虫程序抓取特定网站的的所有信息。其工作方式和通用爬虫几乎一样,唯一的区别是种子URL的选定确定了抓取内容的一致,其核心是种子URL的选择。另一类是深聚焦爬虫,深聚焦爬虫是指在海量的不同内容网页中,通过主题相关度算法选择主题相近的URL和内容进行爬取。其核心是如何判断所爬取的URL和页面内容是与主题相关的。
关系如下:
由图可见,浅聚焦爬虫可以看成是将通用爬虫局限在了一个单一主题的网站上,因此我们通常所说的聚焦爬虫大多是指深聚焦爬虫。
1.2.1 浅聚焦爬虫
浅聚焦爬虫从一个或若干初始网页的URL开始,(例如分类信息网)获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
其工作流程如图:
可见浅聚焦爬虫的基本原理跟通用爬虫的基本原理是一样的,其特点是选定种子URL,例如,要抓取招聘信息,可以将招聘网站的URL作为种子URL。用主题网站保证了抓取内容的主题一致。
1.2.2 深聚焦爬虫
深聚焦爬虫最主要的特点是主题一致性。然而在浩如烟海的互联网大数据中要保证所抓取的数据主题一致并不是一件简单的事情。针对不同的数据需求,这其中需要的策略和方式并没有统一的解答。在这里不说具体的解决方法,只讨论一下常见的解决思路。
一、针对页面内容
这种解决方法是不管页面的主题是什么,先将页面爬取下来。对页面进行简单的去噪后,利用主题提取策略对处理后的页面内容进行主题提取,最后对比设定好的主题,如果主题一致,或在一定的阀值内,则保存页面进一步进行数据清洗。若主题偏差超过一点阀值,则直接丢弃页面。
这种方式的优点是链接页面全覆盖,不会出现数据遗漏。但是缺点也十分致命,那就是全覆盖的页面,很大一部分是与主题无关的废弃页面,这极大的拖慢了爬虫爬取数据的速度。到后期,爬取数据的速度将是无法接受的。
二、针对URL
上面介绍了浅聚焦爬虫的核心是选定合适的种子URL,这些种子URL主要是主题网站的入口URL。
互联网上的网站一般都是有固定主题的,并且同一网站中同一主题的页面URL,都有一定的规律可循。由此,通过URL预测页面主题的思路也就自然而生了。此外,页面中绝大部分超链接都是带有锚文本的,而锚文本基本可以看做是对目标页面的概括描述。结合对URL的分析和对锚文本的分析,对目标页面进行主题预测的正确率也就相当可观了。
然而,这种预测结果并不能完全保证丢弃的URL都是与主题无关的,因此会有一些遗漏。同时,这种方式也无法确保通过预测的页面都是与主题相关的,因此需要对通过的预测的URL页面进行页面内容主题提取,再对比与设定的主题做出取舍。
通过上面的分析,得出一般的解决方法。就是先通过URL分析,丢弃部分URL。下载页面后,对页面内容进行主题提取,对比预设定的主题做取舍。最后进行数据清洗。
1.3架构
深聚焦爬虫的一般结构如下图:
六个主要的组成部分【控制中心】【下载模块】【抽取模块】【清洗模块】【消重模块】【资源模块】
控制模块:控制模块由程序出入口、下载调度策略、抽取调度策略、清洗调度策略和URL消重调度策略组成。
下载模块:根据控制中心传过来的URL,IP,COOKIE等下载资源下载页面,并将下载结果返回给控制中心。
抽取模块:接受控制中心下发的页面源代码和抽取指标,根据抽取指标对源代码进行抽取,并将抽取结果返回控制中心。
清洗模块分为文本清洗和URL清洗,文本清洗根据预设的主题以及相对应的主题相关度算法,决定是舍弃文本,还是将文本保存入库。URL清洗是根据URL分析结果,预测当前URL所链接的页面是否与主题相关,若相关则将URL返回控制中心,反之丢弃此URL。
URL消重模块:针对有些主题突出的页面被许多页面链接,从而导致大量重复下载此页面造成资源浪费和数据质量低下的情况,调用消重模块将重复的URL丢弃,将不重复的URL返回到下载资源模块的URL队列中。
资源模块:保存有下载所需要的所有资源,包括代理IP,COOKIE,URL等信息。
2. 聚焦爬虫的发展
大数据时代,对数据的多样性和针对性要求越来越高。随之爬虫的架构方式也更加灵活多变。比较常见的开源爬虫框架有Crawler4j、WebMagic、WebCollector、scrapy等。另一方面,针对爬虫的抓取,被抓取网站也制定了相应的防爬虫措施。常见的防爬虫方式有如下几种:
一、针对频繁访问网站的IP设定访问限制。这是最常见的一种放爬虫方式,具体体现是,在一个单位时间内,同一个IP的请求数量达到了网站设计的阀值,这个IP就被限制访问。面对这种情况,可以制定适当的IP访问策略。
二、使用js和ajax技术的动态页面。这样的网页源代码中并没有包含所需的数据,数据包裹存在于二次请求的返回文档中。针对这样的页面,可以分析请求过程,提取二次请求的URL,进而得到想要的数据。
三、其他情况:随着互联网的不断发展,出现了各种各样的防爬虫方式。这就需要人们根据实际情况,针对性的解决问题。比如使用模拟浏览器(htmlunit,selenium)技术等。
总之,没有一成不变的互联网,就没有一成不变的爬虫,拥抱变化,才能让爬虫爬的更远。
3.爬虫在互联网金融领域的应用
聚焦爬虫作为数据的主要来源之一,下面就说说聚焦爬虫的应用场景,以我所就职的普惠金融信息服务(上海)有限公司(后面简称普惠)为例。
3.1、网贷行业的数据驱动策略
数据驱动,就是得到前来贷款的客户的指定数据,根据这些数据以及相应的一套算法策略,给客户定义一个标签。借贷部门根据客户的标签决定是否贷款给该客户以及贷多少给该客户。通过这种定义标签的方式,有效阻止大部分骗贷的发生,从而规避风险。
那么,网贷平台如何运用大数据判断客户的信用的呢?粗略的分为两个方面:
1、查看这个人的购物习惯,客户提供的账单流水信息等。这种方法相信一个人若是经常在网上购物、有详细的银行账单并且有正常的通话记录,那么这个人是一个正常的且有一定的经济能力的人。也就是说,这样的人是有能力还贷款的。相对于发达国家健全的征信系统,在中国这种评价方式在一定时间内,是可行有效的。
2、另一方面,我们相信绝大多数的骗子并不是贷完款后才变成骗子的。骗子来 贷款之前就已经是骗子。那么在骗子的行骗生涯中,或多或少地会在互联网上留下痕迹。比如,有许多专门曝光骗子老赖的网站,也有许多骗子在一些社交网站上有人针对曝光。针对这些曝光的数据,平台大数据中心使用聚焦爬虫进行爬取,然后将爬取到的数据保存到黑名单中。
有上面两点可以看出来,不管是爬取交易账单等信息,还是抓取曝光的骗子等数据,都离不开聚焦爬虫的应用。
然而,随着互联网的不断发展变化,数据风控官们发现,通过传统方式做风险控制越来越困难。通过传统方式爬取的数据,基本都是属于一个人的点状数据,并且是片面的点状数据。何为点状数据?若是把所有人看成一个整体数据,那么最形象的结构就是一张人物关系数据网。每个人都是网中的一个节点,即每个人的数据就是一个点状的数据。由于个人隐私的原因,我们无法也不可能得到一个人的全方位数据,只能截取其中的一个或几个片面 。
通过这些数据来判断一个人的信用等级有两个弊端,一是数据的不全面会导致判断的失准,这个弊端无法避免,只能尽可能多的得到数据,并制定更优化的算法模型;二是点状的数据随着互联网的发展有了更多造假的可能性。比如说电商的交易记录,若是有心造假,很容易就可以制造一批完全符合高信用等级的交易记录。因此,点状数据在未来的风控系统中所占的比重会逐渐减少。
相对应于点状数据的不足,爬虫界有人提出了建立网状数据的可能性。基本想法是,通过聚焦爬虫爬取各大社交网站,根据这些数据建立人物关系网络,在关系网络的结构中,给每个人添加补充各个维度的数据。其理想的数据集合是每个来平台贷款的人都存在于平台大数据中心的人物关系网络中。并且我们知道其关系密切的人的标签(画像)。
例如张三来贷款,大数据中心不但要知道张三的信用评价,还要知道与张三关系紧密的若干人的信用评价。这有什么用呢?假设张三贷款的场景如下:张三通过大数据中心的传统信用评价方式,得到了信用良好的评价。但是,我们通过关系网络发现与张三关系密切的人中,有多个人在信用评价中得到了信用低下的评价,甚至在黑名单中。这个时候我们就要怀疑张三的数据是否是精心假造的。根据物以类聚,人以群分的道理,我们相信这种怀疑是很有必要的。
张三的人物关系网络图:
由上张图可以发现,张三信用良好的评价并不可靠,贷款给张三会带来很大的风险。传统的风控方式显然并不能规避这种风险,且这种风险会随着骗贷人越来越了解贷款公司的信用评价方式而增多。试想,在未来的时间里,由于骗贷人对公司的风控有了大致方向的了解,从而在某一方面伪造了良好的记录。大数据中心爬取了这些数据从而错误地判断了信用等级,那贷款公司所承受的风险将会急剧扩大。
针对未来这种风险,人物关系数据网络给出了解决的可能性。若是没有完善且可靠的官方征信系统的出现,人物关系数据网络将是未来无抵押贷款公司风险控制的主流方式。然而建立人物关系数据网络并不是一朝一夕的事情。
4.结语
每一个社交网站都有海量的数据,和海量数据成正比的是社交网站的防爬虫策略。这就对爬虫提出了更高更严格的要求,也更细化了不同爬虫之间的差异。然而一成不变不是互联网的主调,依存互联网生存的公司,更要学会拥抱变化,甚至预测变化,方能在未来乘风破浪,越行越远。 查看全部
[聚焦爬虫]聚焦爬虫原理及其金融风控运用
导读
马云说,大数据时代来了。现在太多互联网公司都在做大数据,每个公司的数据来源都不止一个,其中占比重较大的一个数据源非网络爬虫莫属。然而不同的公司格局业务背景不同,所需要的数据类型也就不同。不同于搜索网站所用的通用爬虫,聚焦爬虫开始越来越多的被人们提起。
目录
1. 聚焦爬虫的原理
2. 聚焦爬虫的发展
3. 爬虫在互联网金融领域应用
4. 结语
1.聚焦爬虫的原理
1.1概念
聚焦爬虫,又称主题爬虫(或专业爬虫),是“面向特定主题”的一种网络爬虫程序。它与我们通常所说的爬虫(通用爬虫)的区别之处就在于,聚焦爬虫在实施网页抓取时要进行主题筛选。它尽量保证只抓取与主题相关的网页信息。
1.2 聚焦爬虫的分类
聚焦爬虫主要分为两大类。一类是浅聚焦爬虫,所谓浅聚焦爬虫是指,爬虫程序抓取特定网站的的所有信息。其工作方式和通用爬虫几乎一样,唯一的区别是种子URL的选定确定了抓取内容的一致,其核心是种子URL的选择。另一类是深聚焦爬虫,深聚焦爬虫是指在海量的不同内容网页中,通过主题相关度算法选择主题相近的URL和内容进行爬取。其核心是如何判断所爬取的URL和页面内容是与主题相关的。
关系如下:
由图可见,浅聚焦爬虫可以看成是将通用爬虫局限在了一个单一主题的网站上,因此我们通常所说的聚焦爬虫大多是指深聚焦爬虫。
1.2.1 浅聚焦爬虫
浅聚焦爬虫从一个或若干初始网页的URL开始,(例如分类信息网)获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
其工作流程如图:
可见浅聚焦爬虫的基本原理跟通用爬虫的基本原理是一样的,其特点是选定种子URL,例如,要抓取招聘信息,可以将招聘网站的URL作为种子URL。用主题网站保证了抓取内容的主题一致。
1.2.2 深聚焦爬虫
深聚焦爬虫最主要的特点是主题一致性。然而在浩如烟海的互联网大数据中要保证所抓取的数据主题一致并不是一件简单的事情。针对不同的数据需求,这其中需要的策略和方式并没有统一的解答。在这里不说具体的解决方法,只讨论一下常见的解决思路。
一、针对页面内容
这种解决方法是不管页面的主题是什么,先将页面爬取下来。对页面进行简单的去噪后,利用主题提取策略对处理后的页面内容进行主题提取,最后对比设定好的主题,如果主题一致,或在一定的阀值内,则保存页面进一步进行数据清洗。若主题偏差超过一点阀值,则直接丢弃页面。
这种方式的优点是链接页面全覆盖,不会出现数据遗漏。但是缺点也十分致命,那就是全覆盖的页面,很大一部分是与主题无关的废弃页面,这极大的拖慢了爬虫爬取数据的速度。到后期,爬取数据的速度将是无法接受的。
二、针对URL
上面介绍了浅聚焦爬虫的核心是选定合适的种子URL,这些种子URL主要是主题网站的入口URL。
互联网上的网站一般都是有固定主题的,并且同一网站中同一主题的页面URL,都有一定的规律可循。由此,通过URL预测页面主题的思路也就自然而生了。此外,页面中绝大部分超链接都是带有锚文本的,而锚文本基本可以看做是对目标页面的概括描述。结合对URL的分析和对锚文本的分析,对目标页面进行主题预测的正确率也就相当可观了。
然而,这种预测结果并不能完全保证丢弃的URL都是与主题无关的,因此会有一些遗漏。同时,这种方式也无法确保通过预测的页面都是与主题相关的,因此需要对通过的预测的URL页面进行页面内容主题提取,再对比与设定的主题做出取舍。
通过上面的分析,得出一般的解决方法。就是先通过URL分析,丢弃部分URL。下载页面后,对页面内容进行主题提取,对比预设定的主题做取舍。最后进行数据清洗。
1.3架构
深聚焦爬虫的一般结构如下图:
六个主要的组成部分【控制中心】【下载模块】【抽取模块】【清洗模块】【消重模块】【资源模块】
控制模块:控制模块由程序出入口、下载调度策略、抽取调度策略、清洗调度策略和URL消重调度策略组成。
下载模块:根据控制中心传过来的URL,IP,COOKIE等下载资源下载页面,并将下载结果返回给控制中心。
抽取模块:接受控制中心下发的页面源代码和抽取指标,根据抽取指标对源代码进行抽取,并将抽取结果返回控制中心。
清洗模块分为文本清洗和URL清洗,文本清洗根据预设的主题以及相对应的主题相关度算法,决定是舍弃文本,还是将文本保存入库。URL清洗是根据URL分析结果,预测当前URL所链接的页面是否与主题相关,若相关则将URL返回控制中心,反之丢弃此URL。
URL消重模块:针对有些主题突出的页面被许多页面链接,从而导致大量重复下载此页面造成资源浪费和数据质量低下的情况,调用消重模块将重复的URL丢弃,将不重复的URL返回到下载资源模块的URL队列中。
资源模块:保存有下载所需要的所有资源,包括代理IP,COOKIE,URL等信息。
2. 聚焦爬虫的发展
大数据时代,对数据的多样性和针对性要求越来越高。随之爬虫的架构方式也更加灵活多变。比较常见的开源爬虫框架有Crawler4j、WebMagic、WebCollector、scrapy等。另一方面,针对爬虫的抓取,被抓取网站也制定了相应的防爬虫措施。常见的防爬虫方式有如下几种:
一、针对频繁访问网站的IP设定访问限制。这是最常见的一种放爬虫方式,具体体现是,在一个单位时间内,同一个IP的请求数量达到了网站设计的阀值,这个IP就被限制访问。面对这种情况,可以制定适当的IP访问策略。
二、使用js和ajax技术的动态页面。这样的网页源代码中并没有包含所需的数据,数据包裹存在于二次请求的返回文档中。针对这样的页面,可以分析请求过程,提取二次请求的URL,进而得到想要的数据。
三、其他情况:随着互联网的不断发展,出现了各种各样的防爬虫方式。这就需要人们根据实际情况,针对性的解决问题。比如使用模拟浏览器(htmlunit,selenium)技术等。
总之,没有一成不变的互联网,就没有一成不变的爬虫,拥抱变化,才能让爬虫爬的更远。
3.爬虫在互联网金融领域的应用
聚焦爬虫作为数据的主要来源之一,下面就说说聚焦爬虫的应用场景,以我所就职的普惠金融信息服务(上海)有限公司(后面简称普惠)为例。
3.1、网贷行业的数据驱动策略
数据驱动,就是得到前来贷款的客户的指定数据,根据这些数据以及相应的一套算法策略,给客户定义一个标签。借贷部门根据客户的标签决定是否贷款给该客户以及贷多少给该客户。通过这种定义标签的方式,有效阻止大部分骗贷的发生,从而规避风险。
那么,网贷平台如何运用大数据判断客户的信用的呢?粗略的分为两个方面:
1、查看这个人的购物习惯,客户提供的账单流水信息等。这种方法相信一个人若是经常在网上购物、有详细的银行账单并且有正常的通话记录,那么这个人是一个正常的且有一定的经济能力的人。也就是说,这样的人是有能力还贷款的。相对于发达国家健全的征信系统,在中国这种评价方式在一定时间内,是可行有效的。
2、另一方面,我们相信绝大多数的骗子并不是贷完款后才变成骗子的。骗子来 贷款之前就已经是骗子。那么在骗子的行骗生涯中,或多或少地会在互联网上留下痕迹。比如,有许多专门曝光骗子老赖的网站,也有许多骗子在一些社交网站上有人针对曝光。针对这些曝光的数据,平台大数据中心使用聚焦爬虫进行爬取,然后将爬取到的数据保存到黑名单中。
有上面两点可以看出来,不管是爬取交易账单等信息,还是抓取曝光的骗子等数据,都离不开聚焦爬虫的应用。
然而,随着互联网的不断发展变化,数据风控官们发现,通过传统方式做风险控制越来越困难。通过传统方式爬取的数据,基本都是属于一个人的点状数据,并且是片面的点状数据。何为点状数据?若是把所有人看成一个整体数据,那么最形象的结构就是一张人物关系数据网。每个人都是网中的一个节点,即每个人的数据就是一个点状的数据。由于个人隐私的原因,我们无法也不可能得到一个人的全方位数据,只能截取其中的一个或几个片面 。
通过这些数据来判断一个人的信用等级有两个弊端,一是数据的不全面会导致判断的失准,这个弊端无法避免,只能尽可能多的得到数据,并制定更优化的算法模型;二是点状的数据随着互联网的发展有了更多造假的可能性。比如说电商的交易记录,若是有心造假,很容易就可以制造一批完全符合高信用等级的交易记录。因此,点状数据在未来的风控系统中所占的比重会逐渐减少。
相对应于点状数据的不足,爬虫界有人提出了建立网状数据的可能性。基本想法是,通过聚焦爬虫爬取各大社交网站,根据这些数据建立人物关系网络,在关系网络的结构中,给每个人添加补充各个维度的数据。其理想的数据集合是每个来平台贷款的人都存在于平台大数据中心的人物关系网络中。并且我们知道其关系密切的人的标签(画像)。
例如张三来贷款,大数据中心不但要知道张三的信用评价,还要知道与张三关系紧密的若干人的信用评价。这有什么用呢?假设张三贷款的场景如下:张三通过大数据中心的传统信用评价方式,得到了信用良好的评价。但是,我们通过关系网络发现与张三关系密切的人中,有多个人在信用评价中得到了信用低下的评价,甚至在黑名单中。这个时候我们就要怀疑张三的数据是否是精心假造的。根据物以类聚,人以群分的道理,我们相信这种怀疑是很有必要的。
张三的人物关系网络图:
由上张图可以发现,张三信用良好的评价并不可靠,贷款给张三会带来很大的风险。传统的风控方式显然并不能规避这种风险,且这种风险会随着骗贷人越来越了解贷款公司的信用评价方式而增多。试想,在未来的时间里,由于骗贷人对公司的风控有了大致方向的了解,从而在某一方面伪造了良好的记录。大数据中心爬取了这些数据从而错误地判断了信用等级,那贷款公司所承受的风险将会急剧扩大。
针对未来这种风险,人物关系数据网络给出了解决的可能性。若是没有完善且可靠的官方征信系统的出现,人物关系数据网络将是未来无抵押贷款公司风险控制的主流方式。然而建立人物关系数据网络并不是一朝一夕的事情。
4.结语
每一个社交网站都有海量的数据,和海量数据成正比的是社交网站的防爬虫策略。这就对爬虫提出了更高更严格的要求,也更细化了不同爬虫之间的差异。然而一成不变不是互联网的主调,依存互联网生存的公司,更要学会拥抱变化,甚至预测变化,方能在未来乘风破浪,越行越远。
聚焦爬虫原理及其在互联网金融领域应用前景浅析
网站优化 • 优采云 发表了文章 • 0 个评论 • 102 次浏览 • 2022-05-06 20:18
导读
马云说,大数据时代来了。现在太多互联网公司都在做大数据,每个公司的数据来源都不止一个,其中占比重较大的一个数据源非网络爬虫莫属。然而不同的公司格局业务背景不同,所需要的数据类型也就不同。不同于搜索网站所用的通用爬虫,聚焦爬虫开始越来越多的被人们提起。
目录
1. 聚焦爬虫的原理
2. 聚焦爬虫的发展
3. 爬虫在互联网金融领域应用
4. 结语
1聚焦爬虫的原理
1.1概念
聚焦爬虫,又称主题爬虫(或专业爬虫),是“面向特定主题”的一种网络爬虫程序。它与我们通常所说的爬虫(通用爬虫)的区别之处就在于,聚焦爬虫在实施网页抓取时要进行主题筛选。它尽量保证只抓取与主题相关的网页信息。
1.2聚焦爬虫的分类
聚焦爬虫主要分为两大类。一类是浅聚焦爬虫,所谓浅聚焦爬虫是指,爬虫程序抓取特定网站的的所有信息。其工作方式和通用爬虫几乎一样,唯一的区别是种子URL的选定确定了抓取内容的一致,其核心是种子URL的选择。另一类是深聚焦爬虫,深聚焦爬虫是指在海量的不同内容网页中,通过主题相关度算法选择主题相近的URL和内容进行爬取。其核心是如何判断所爬取的URL和页面内容是与主题相关的。
关系如下:
由图可见,浅聚焦爬虫可以看成是将通用爬虫局限在了一个单一主题的网站上,因此我们通常所说的聚焦爬虫大多是指深聚焦爬虫。
1.2.1浅聚焦爬虫
浅聚焦爬虫从一个或若干初始网页的URL开始,(例如分类信息网)获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
其工作流程如图:
可见浅聚焦爬虫的基本原理跟通用爬虫的基本原理是一样的,其特点是选定种子URL,例如,要抓取招聘信息,可以将招聘网站的URL作为种子URL。用主题网站保证了抓取内容的主题一致。
1.2.2深聚焦爬虫
深聚焦爬虫最主要的特点是主题一致性。然而在浩如烟海的互联网大数据中要保证所抓取的数据主题一致并不是一件简单的事情。针对不同的数据需求,这其中需要的策略和方式并没有统一的解答。在这里不说具体的解决方法,只讨论一下常见的解决思路。
一、针对页面内容
这种解决方法是不管页面的主题是什么,先将页面爬取下来。对页面进行简单的去噪后,利用主题提取策略(关键字,分类聚类算法等)对处理后的页面内容进行主题提取,最后对比设定好的主题,如果主题一致,或在一定的阀值内,则保存页面进一步进行数据清洗。若主题偏差超过一点阀值,则直接丢弃页面。这种方式的优点是链接页面全覆盖,不会出现数据遗漏。但是缺点也十分致命,那就是全覆盖的页面,很大一部分是与主题无关的废弃页面,这极大的拖慢了爬虫爬取数据的速度。到后期,爬取数据的速度将是无法接受的。
二、针对URL
上面介绍了浅聚焦爬虫的核心是选定合适的种子URL,这些种子URL主要是主题网站的入口URL。比如北京赶集网担保贷款频道的入口URL:,这个URL透漏给我们很多信息,根据这些信息,我们可以初步预测到这个URL所链接的页面的主题就是担保保险,其地域在北京,其平台是赶集网。由此我们发现,互联网上的网站或者网站的一个模块大部分都是有固定主题的,并且同一网站中同一主题的页面URL,都有一定的规律可循。针对这种情况,通过URL预测页面主题的思路也就自然而生了。除此之外,页面中绝大部分超链接都是带有锚文本的,而锚文本基本可以看做是对目标页面的概括描述。结合对URL的分析和对锚文本的分析,对目标页面进行主题预测的正确率也就相当可观了。显而易见,针对URL的主题预测策略,可以有效的减少不必要的页面下载,节约下载资源,加快下载速度。然而,这种预测结果并不能完全保证丢弃的URL都是与主题无关的,因此会有一些遗漏。同时,这种方式也无法确保通过预测的页面都是与主题相关的,因此需要对通过的预测的URL页面进行页面内容主题提取,再对比与设定的主题做出取舍。
通过上面的分析,得出一般的解决方法。就是先通过URL分析,丢弃部分URL。下载页面后,对页面内容进行主题提取,对比预设定的主题做取舍。最后进行数据清洗。
1.3架构
深聚焦爬虫的一般结构如下图:
六个主要的组成部分【控制中心】【下载模块】【抽取模块】【清洗模块】【消重模块】【资源模块】
控制模块:控制模块由程序出入口、下载调度策略、抽取调度策略、清洗调度策略和URL消重调度策略组成。程序出入口是程序开始、初始化和结束地方。下载调度策略根据当前需要下载的网页,分配IP,COOKIE等下载资源,并根据页面下载器的反馈(失败或成功),决定程序下一步的走向。抽取调度策略根据当前已经下载的页面队列情况,来决定调用抽取模块对某一部分页面进行抽取以及调用抽取模块中的哪一种抽取模式。清洗调度策略根据抽取的文本和URL队列情况,决定其被清洗的优先度,从而有序的清洗数据。URL消重策略根据URL队列情况决定何时调用URL消重器,避免内存中存储过多的URL。
下载模块:根据控制中心传过来的URL,IP,COOKIE等下载资源下载页面,并将下载结果返回给控制中心。
抽取模块:接受控制中心下发的页面源代码和抽取指标,根据抽取指标对源代码进行抽取,并将抽取结果返回控制中心。
清洗模块分为文本清洗和URL清洗,文本清洗根据预设的主题以及相对应的主题相关度算法,决定是舍弃文本,还是将文本保存入库。URL清洗是根据URL分析结果,预测当前URL所链接的页面是否与主题相关,若相关则将URL返回控制中心,反之丢弃此URL。
URL消重模块:针对有些主题突出的页面被许多页面链接,从而导致大量重复下载此页面造成资源浪费和数据质量低下的情况,调用消重模块将重复的URL丢弃,将不重复的URL返回到下载资源模块的URL队列中。
资源模块:保存有下载所需要的所有资源,包括代理IP,COOKIE,URL等信息。
2聚焦爬虫的发展
大数据时代,对数据的多样性和针对性要求越来越高。随之爬虫的架构方式也更加灵活多变。比较常见的开源爬虫框架有Crawler4j、WebMagic、WebCollector、scrapy等。另一方面,针对爬虫的抓取,被抓取网站也制定了相应的防爬虫措施。常见的防爬虫方式有如下几种:
一、针对频繁访问网站的IP设定访问限制。这是最常见的一种放爬虫方式,具体体现是,在一个单位时间内,同一个IP的请求数量达到了网站设计的阀值,这个IP就被限制访问。面对这种情况,可以制定适当的IP访问策略。
二、使用js和ajax技术的动态页面。这样的网页源代码中并没有包含所需的数据,数据包裹存在于二次请求的返回文档中。针对这样的页面,可以分析请求过程,提取二次请求的URL,进而得到想要的数据。
三、其他情况:随着互联网的不断发展,出现了各种各样的防爬虫方式。这就需要人们根据实际情况,针对性的解决问题。比如使用模拟浏览器(htmlunit,selenium)技术等。
总之,没有一成不变的互联网,就没有一成不变的爬虫,拥抱变化,才能让爬虫爬的更远。
3爬虫在互联网金融领域的应用
聚焦爬虫作为数据的主要来源之一,下面就说说聚焦爬虫的应用场景,以我所就职的普惠金融信息服务(上海)有限公司(后面简称普惠)为例。
普惠金融是一家致力于让每一位普通人都享有更公平、更高效、更透明的金融信息服务的金融服务公司。公司的主要业务是微小型贷款。线上有爱钱进和借啊APP,线下各大城市有实体店。现如今的小额贷款公司基本上都是无抵押贷款,这对公司的风险控制提出了很高的要求。如何判定一个人是否有能力并且有意愿还款、如何将那些骗贷的没有信用的人拒之门外成了小额贷款公司生存的首要任务。响应大数据的时代潮流,普惠公司领导人提出了由数据驱动业务发展的先进理念,普惠大数据中心应运而生。
数据驱动,就是得到前来普惠贷款的客户的指定数据,根据这些数据以及相应的一套算法策略,给客户定义一个标签。借贷部门根据客户的标签决定是否贷款给该客户以及贷多少给该客户。通过这种定义标签的方式,普惠大数据中心有效阻止大部分骗贷的发生,从而规避风险。
那么普惠大数据中心是如何判断客户的信用的呢?粗略的分为两个方面:
1、微贷行业中判断一个人是否有能力还贷款有一套传统的方法。那就是查看这个人的购物习惯,客户提供的账单流水信息等。这种方法相信一个人若是经常在网上购物、有详细的银行账单并且有正常的通话记录,那么这个人是一个正常的且有一定的经济能力的人。也就是说,这样的人是有能力还贷款的。相对于发达国家健全的征信系统,在中国这种评价方式在一定时间内,是可行有效的。
2、另一方面,我们相信绝大多数的骗子并不是来普惠贷完款后才变成骗子的。骗子来普惠贷款之前就已经是骗子。那么在骗子的行骗生涯中,或多或少的会在互联网上留下痕迹。比如,有许多专门曝光骗子老赖的网站,也有许多骗子在一些社交网站上有人针对曝光。针对这些曝光的数据,大数据中心使用聚焦爬虫进行爬取,然后将爬取到的数据保存到普惠的黑名单中。
有上面两点可以看出来,不管是爬取交易账单等信息,还是抓取曝光的骗子等数据,都离不开聚焦爬虫的应用。
普惠大数据中心现有百多人的团队在开发和维护风控系统,从成立至今,普惠大数据中心的数据来源由单一的几个网站增长到了现在上百个网站,信用评价指标达到上千个维度。在不断完善,发现和创新中,大数据中心传统方式的风控水平已经到达行业领先水平。
然而,随着互联网的不断发展变化,人们对微贷行业的逐渐了解。一些置身大数据风控的人逐渐发现,通过传统方式做风险控制越来越困难。通过传统方式爬取的数据,基本都是属于一个人的点状数据,并且是片面的点状数据。何为点状数据?若是把所有人看成一个整体数据,那么最形象的结构就是一张人物关系数据网。每个人都是网中的一个节点,即每个人的数据就是一个点状的数据。由于个人隐私的原因,我们无法也不可能得到一个人的全方位数据,只能截取其中的一个或几个片面(交易纪录,信用卡信息等)。通过这些数据来判断一个人的信用等级有两个弊端,一是数据的不全面会导致判断的失准,这个弊端无法避免,只能尽可能多的得到数据,并制定更优化的算法模型;二是点状的数据随着互联网的发展有了更多造假的可能性。比如说电商的交易记录,若是有心造假,很容易就可以制造一批完全符合高信用等级的交易记录。因此,点状数据在未来的风控系统中所占的比重会逐渐减少。
相对应于点状数据的不足,爬虫界有人提出了建立网状数据的可能性。基本想法是,通过聚焦爬虫爬取各大社交网站,根据这些数据建立人物关系网络,在关系网络的结构中,给每个人添加补充各个维度的数据。其理想的数据集合是每个来普惠贷款的人都存在于普惠大数据中心的人物关系网络中。并且我们知道其关系密切的人的标签(画像)。例如张三来普惠贷款,大数据中心不但要知道张三的信用评价,还要知道与张三关系紧密的若干人的信用评价。这有什么用呢?假设张三贷款的场景如下:张三通过大数据中心的传统信用评价方式,得到了信用良好的评价。但是,我们通过关系网络发现与张三关系密切的人中,有多个人在信用评价中得到了信用低下的评价,甚至在普惠的黑名单中。这个时候我们就要怀疑张三的数据是否是精心假造的。根据物以类聚,人以群分的道理,我们相信这种怀疑是很有必要的。
张三的人物关系网络图:
由上张图可以发现,张三信用良好的评价并不可靠。恰恰相反,贷款给张三的风险反而会很大。传统的风控方式显然并不能规避这种风险,但是这种风险会随着骗贷人越来越了解贷款公司的信用评价方式而越来越多。试想,在未来的时间里,由于骗贷人对公司的风控有了大致方向的了解,从而在某一方面或很多方面伪造了良好的记录。大数据中心爬取了这些数据从而错误的判断了信用等级,那贷款公司所承受的风险将会急剧扩大。
针对未来这种风险,人物关系数据网络给出了解决的可能性。若是没有完善且可靠的官方征信系统的出现,人物关系数据网络将是未来无抵押贷款公司风险控制的主流方式。然而建立人物关系数据网络并不是一朝一夕的事情。
4结语
每一个社交网站都有海量的数据,和海量数据成正比的是社交网站的防爬虫策略。这就对爬虫提出了更高更严格的要求,也更细化了不同爬虫之间的差异。然而一成不变不是互联网的主调,依存互联网生存的公司,更要学会拥抱变化,甚至预测变化,方能在未来乘风破浪,越行越远。
(本文系作者原创,如需转载,请注明作者与公共号名称,并附本公共号二维码,非常感谢。)
万翔普惠大数据中心-垂直抓取
主要负责普惠大数据互联网基础数据建设、日常运营,我们不生产数据,我们是数据的搬运工。
查看全部
聚焦爬虫原理及其在互联网金融领域应用前景浅析
导读
马云说,大数据时代来了。现在太多互联网公司都在做大数据,每个公司的数据来源都不止一个,其中占比重较大的一个数据源非网络爬虫莫属。然而不同的公司格局业务背景不同,所需要的数据类型也就不同。不同于搜索网站所用的通用爬虫,聚焦爬虫开始越来越多的被人们提起。
目录
1. 聚焦爬虫的原理
2. 聚焦爬虫的发展
3. 爬虫在互联网金融领域应用
4. 结语
1聚焦爬虫的原理
1.1概念
聚焦爬虫,又称主题爬虫(或专业爬虫),是“面向特定主题”的一种网络爬虫程序。它与我们通常所说的爬虫(通用爬虫)的区别之处就在于,聚焦爬虫在实施网页抓取时要进行主题筛选。它尽量保证只抓取与主题相关的网页信息。
1.2聚焦爬虫的分类
聚焦爬虫主要分为两大类。一类是浅聚焦爬虫,所谓浅聚焦爬虫是指,爬虫程序抓取特定网站的的所有信息。其工作方式和通用爬虫几乎一样,唯一的区别是种子URL的选定确定了抓取内容的一致,其核心是种子URL的选择。另一类是深聚焦爬虫,深聚焦爬虫是指在海量的不同内容网页中,通过主题相关度算法选择主题相近的URL和内容进行爬取。其核心是如何判断所爬取的URL和页面内容是与主题相关的。
关系如下:
由图可见,浅聚焦爬虫可以看成是将通用爬虫局限在了一个单一主题的网站上,因此我们通常所说的聚焦爬虫大多是指深聚焦爬虫。
1.2.1浅聚焦爬虫
浅聚焦爬虫从一个或若干初始网页的URL开始,(例如分类信息网)获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
其工作流程如图:
可见浅聚焦爬虫的基本原理跟通用爬虫的基本原理是一样的,其特点是选定种子URL,例如,要抓取招聘信息,可以将招聘网站的URL作为种子URL。用主题网站保证了抓取内容的主题一致。
1.2.2深聚焦爬虫
深聚焦爬虫最主要的特点是主题一致性。然而在浩如烟海的互联网大数据中要保证所抓取的数据主题一致并不是一件简单的事情。针对不同的数据需求,这其中需要的策略和方式并没有统一的解答。在这里不说具体的解决方法,只讨论一下常见的解决思路。
一、针对页面内容
这种解决方法是不管页面的主题是什么,先将页面爬取下来。对页面进行简单的去噪后,利用主题提取策略(关键字,分类聚类算法等)对处理后的页面内容进行主题提取,最后对比设定好的主题,如果主题一致,或在一定的阀值内,则保存页面进一步进行数据清洗。若主题偏差超过一点阀值,则直接丢弃页面。这种方式的优点是链接页面全覆盖,不会出现数据遗漏。但是缺点也十分致命,那就是全覆盖的页面,很大一部分是与主题无关的废弃页面,这极大的拖慢了爬虫爬取数据的速度。到后期,爬取数据的速度将是无法接受的。
二、针对URL
上面介绍了浅聚焦爬虫的核心是选定合适的种子URL,这些种子URL主要是主题网站的入口URL。比如北京赶集网担保贷款频道的入口URL:,这个URL透漏给我们很多信息,根据这些信息,我们可以初步预测到这个URL所链接的页面的主题就是担保保险,其地域在北京,其平台是赶集网。由此我们发现,互联网上的网站或者网站的一个模块大部分都是有固定主题的,并且同一网站中同一主题的页面URL,都有一定的规律可循。针对这种情况,通过URL预测页面主题的思路也就自然而生了。除此之外,页面中绝大部分超链接都是带有锚文本的,而锚文本基本可以看做是对目标页面的概括描述。结合对URL的分析和对锚文本的分析,对目标页面进行主题预测的正确率也就相当可观了。显而易见,针对URL的主题预测策略,可以有效的减少不必要的页面下载,节约下载资源,加快下载速度。然而,这种预测结果并不能完全保证丢弃的URL都是与主题无关的,因此会有一些遗漏。同时,这种方式也无法确保通过预测的页面都是与主题相关的,因此需要对通过的预测的URL页面进行页面内容主题提取,再对比与设定的主题做出取舍。
通过上面的分析,得出一般的解决方法。就是先通过URL分析,丢弃部分URL。下载页面后,对页面内容进行主题提取,对比预设定的主题做取舍。最后进行数据清洗。
1.3架构
深聚焦爬虫的一般结构如下图:
六个主要的组成部分【控制中心】【下载模块】【抽取模块】【清洗模块】【消重模块】【资源模块】
控制模块:控制模块由程序出入口、下载调度策略、抽取调度策略、清洗调度策略和URL消重调度策略组成。程序出入口是程序开始、初始化和结束地方。下载调度策略根据当前需要下载的网页,分配IP,COOKIE等下载资源,并根据页面下载器的反馈(失败或成功),决定程序下一步的走向。抽取调度策略根据当前已经下载的页面队列情况,来决定调用抽取模块对某一部分页面进行抽取以及调用抽取模块中的哪一种抽取模式。清洗调度策略根据抽取的文本和URL队列情况,决定其被清洗的优先度,从而有序的清洗数据。URL消重策略根据URL队列情况决定何时调用URL消重器,避免内存中存储过多的URL。
下载模块:根据控制中心传过来的URL,IP,COOKIE等下载资源下载页面,并将下载结果返回给控制中心。
抽取模块:接受控制中心下发的页面源代码和抽取指标,根据抽取指标对源代码进行抽取,并将抽取结果返回控制中心。
清洗模块分为文本清洗和URL清洗,文本清洗根据预设的主题以及相对应的主题相关度算法,决定是舍弃文本,还是将文本保存入库。URL清洗是根据URL分析结果,预测当前URL所链接的页面是否与主题相关,若相关则将URL返回控制中心,反之丢弃此URL。
URL消重模块:针对有些主题突出的页面被许多页面链接,从而导致大量重复下载此页面造成资源浪费和数据质量低下的情况,调用消重模块将重复的URL丢弃,将不重复的URL返回到下载资源模块的URL队列中。
资源模块:保存有下载所需要的所有资源,包括代理IP,COOKIE,URL等信息。
2聚焦爬虫的发展
大数据时代,对数据的多样性和针对性要求越来越高。随之爬虫的架构方式也更加灵活多变。比较常见的开源爬虫框架有Crawler4j、WebMagic、WebCollector、scrapy等。另一方面,针对爬虫的抓取,被抓取网站也制定了相应的防爬虫措施。常见的防爬虫方式有如下几种:
一、针对频繁访问网站的IP设定访问限制。这是最常见的一种放爬虫方式,具体体现是,在一个单位时间内,同一个IP的请求数量达到了网站设计的阀值,这个IP就被限制访问。面对这种情况,可以制定适当的IP访问策略。
二、使用js和ajax技术的动态页面。这样的网页源代码中并没有包含所需的数据,数据包裹存在于二次请求的返回文档中。针对这样的页面,可以分析请求过程,提取二次请求的URL,进而得到想要的数据。
三、其他情况:随着互联网的不断发展,出现了各种各样的防爬虫方式。这就需要人们根据实际情况,针对性的解决问题。比如使用模拟浏览器(htmlunit,selenium)技术等。
总之,没有一成不变的互联网,就没有一成不变的爬虫,拥抱变化,才能让爬虫爬的更远。
3爬虫在互联网金融领域的应用
聚焦爬虫作为数据的主要来源之一,下面就说说聚焦爬虫的应用场景,以我所就职的普惠金融信息服务(上海)有限公司(后面简称普惠)为例。
普惠金融是一家致力于让每一位普通人都享有更公平、更高效、更透明的金融信息服务的金融服务公司。公司的主要业务是微小型贷款。线上有爱钱进和借啊APP,线下各大城市有实体店。现如今的小额贷款公司基本上都是无抵押贷款,这对公司的风险控制提出了很高的要求。如何判定一个人是否有能力并且有意愿还款、如何将那些骗贷的没有信用的人拒之门外成了小额贷款公司生存的首要任务。响应大数据的时代潮流,普惠公司领导人提出了由数据驱动业务发展的先进理念,普惠大数据中心应运而生。
数据驱动,就是得到前来普惠贷款的客户的指定数据,根据这些数据以及相应的一套算法策略,给客户定义一个标签。借贷部门根据客户的标签决定是否贷款给该客户以及贷多少给该客户。通过这种定义标签的方式,普惠大数据中心有效阻止大部分骗贷的发生,从而规避风险。
那么普惠大数据中心是如何判断客户的信用的呢?粗略的分为两个方面:
1、微贷行业中判断一个人是否有能力还贷款有一套传统的方法。那就是查看这个人的购物习惯,客户提供的账单流水信息等。这种方法相信一个人若是经常在网上购物、有详细的银行账单并且有正常的通话记录,那么这个人是一个正常的且有一定的经济能力的人。也就是说,这样的人是有能力还贷款的。相对于发达国家健全的征信系统,在中国这种评价方式在一定时间内,是可行有效的。
2、另一方面,我们相信绝大多数的骗子并不是来普惠贷完款后才变成骗子的。骗子来普惠贷款之前就已经是骗子。那么在骗子的行骗生涯中,或多或少的会在互联网上留下痕迹。比如,有许多专门曝光骗子老赖的网站,也有许多骗子在一些社交网站上有人针对曝光。针对这些曝光的数据,大数据中心使用聚焦爬虫进行爬取,然后将爬取到的数据保存到普惠的黑名单中。
有上面两点可以看出来,不管是爬取交易账单等信息,还是抓取曝光的骗子等数据,都离不开聚焦爬虫的应用。
普惠大数据中心现有百多人的团队在开发和维护风控系统,从成立至今,普惠大数据中心的数据来源由单一的几个网站增长到了现在上百个网站,信用评价指标达到上千个维度。在不断完善,发现和创新中,大数据中心传统方式的风控水平已经到达行业领先水平。
然而,随着互联网的不断发展变化,人们对微贷行业的逐渐了解。一些置身大数据风控的人逐渐发现,通过传统方式做风险控制越来越困难。通过传统方式爬取的数据,基本都是属于一个人的点状数据,并且是片面的点状数据。何为点状数据?若是把所有人看成一个整体数据,那么最形象的结构就是一张人物关系数据网。每个人都是网中的一个节点,即每个人的数据就是一个点状的数据。由于个人隐私的原因,我们无法也不可能得到一个人的全方位数据,只能截取其中的一个或几个片面(交易纪录,信用卡信息等)。通过这些数据来判断一个人的信用等级有两个弊端,一是数据的不全面会导致判断的失准,这个弊端无法避免,只能尽可能多的得到数据,并制定更优化的算法模型;二是点状的数据随着互联网的发展有了更多造假的可能性。比如说电商的交易记录,若是有心造假,很容易就可以制造一批完全符合高信用等级的交易记录。因此,点状数据在未来的风控系统中所占的比重会逐渐减少。
相对应于点状数据的不足,爬虫界有人提出了建立网状数据的可能性。基本想法是,通过聚焦爬虫爬取各大社交网站,根据这些数据建立人物关系网络,在关系网络的结构中,给每个人添加补充各个维度的数据。其理想的数据集合是每个来普惠贷款的人都存在于普惠大数据中心的人物关系网络中。并且我们知道其关系密切的人的标签(画像)。例如张三来普惠贷款,大数据中心不但要知道张三的信用评价,还要知道与张三关系紧密的若干人的信用评价。这有什么用呢?假设张三贷款的场景如下:张三通过大数据中心的传统信用评价方式,得到了信用良好的评价。但是,我们通过关系网络发现与张三关系密切的人中,有多个人在信用评价中得到了信用低下的评价,甚至在普惠的黑名单中。这个时候我们就要怀疑张三的数据是否是精心假造的。根据物以类聚,人以群分的道理,我们相信这种怀疑是很有必要的。
张三的人物关系网络图:
由上张图可以发现,张三信用良好的评价并不可靠。恰恰相反,贷款给张三的风险反而会很大。传统的风控方式显然并不能规避这种风险,但是这种风险会随着骗贷人越来越了解贷款公司的信用评价方式而越来越多。试想,在未来的时间里,由于骗贷人对公司的风控有了大致方向的了解,从而在某一方面或很多方面伪造了良好的记录。大数据中心爬取了这些数据从而错误的判断了信用等级,那贷款公司所承受的风险将会急剧扩大。
针对未来这种风险,人物关系数据网络给出了解决的可能性。若是没有完善且可靠的官方征信系统的出现,人物关系数据网络将是未来无抵押贷款公司风险控制的主流方式。然而建立人物关系数据网络并不是一朝一夕的事情。
4结语
每一个社交网站都有海量的数据,和海量数据成正比的是社交网站的防爬虫策略。这就对爬虫提出了更高更严格的要求,也更细化了不同爬虫之间的差异。然而一成不变不是互联网的主调,依存互联网生存的公司,更要学会拥抱变化,甚至预测变化,方能在未来乘风破浪,越行越远。
(本文系作者原创,如需转载,请注明作者与公共号名称,并附本公共号二维码,非常感谢。)
万翔普惠大数据中心-垂直抓取
主要负责普惠大数据互联网基础数据建设、日常运营,我们不生产数据,我们是数据的搬运工。
htmlunit抓取动态网页(Web网络爬虫系统的原理及应用)
网站优化 • 优采云 发表了文章 • 0 个评论 • 68 次浏览 • 2022-04-18 16:35
1、爬虫技术概述
网络爬虫是根据一定的规则自动从万维网上爬取信息的程序或脚本。它们广泛用于互联网搜索引擎或其他类似的网站,它可以自动采集它可以访问的所有页面获取或更新这些网站的内容和检索方法。从功能上来说,爬虫一般分为数据采集、处理、存储三部分。传统爬虫从一个或多个初始网页的URL开始,获取初始网页上的URL。在抓取网页的过程中,它不断地从当前页面中提取新的 URL 并放入队列中,直到满足系统的某些停止条件。焦点爬虫的工作流程比较复杂。它需要按照一定的网页分析算法过滤掉与主题无关的链接,保留有用的链接,并放入等待抓取的URL队列中。然后,它会根据一定的搜索策略从队列中选择下一个要爬取的网页URL,并重复上述过程,直到达到系统的一定条件并停止。此外,爬虫爬取的所有网页都会被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。保留有用的链接并将它们放入等待抓取的 URL 队列中。然后,它会根据一定的搜索策略从队列中选择下一个要爬取的网页URL,并重复上述过程,直到达到系统的一定条件并停止。此外,爬虫爬取的所有网页都会被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。保留有用的链接并将它们放入等待抓取的 URL 队列中。然后,它会根据一定的搜索策略从队列中选择下一个要爬取的网页URL,并重复上述过程,直到达到系统的一定条件并停止。此外,爬虫爬取的所有网页都会被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。爬虫抓取到的所有网页都将被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。爬虫抓取到的所有网页都将被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。
与通用网络爬虫相比,聚焦爬虫还需要解决三个主要问题:
(1) 获取目标的描述或定义;
(2) 网页或数据的分析和过滤;
(3) URL 的搜索策略。
2、爬虫原理
2.1 网络爬虫原理
网络爬虫系统的功能是下载网页数据,为搜索引擎系统提供数据源。许多大型网络搜索引擎系统被称为基于Web数据的搜索引擎系统采集,如Google、百度等。这显示了网络爬虫系统在搜索引擎中的重要性。除了供用户阅读的文字信息外,网页还收录一些超链接信息。网络爬虫系统通过网页中的超链接信息不断获取网络上的其他网页。正是因为这个采集进程像爬虫或者蜘蛛一样在网络上漫游,所以才叫做网络爬虫系统或者网络蜘蛛系统,英文叫Spider或者Crawler。
2.2 网络爬虫系统的工作原理
在网络爬虫的系统框架中,主要流程由控制器、解析器和资源库三部分组成。控制器的主要工作是为多个线程中的每个爬虫线程分配工作任务。解析器的主要工作是下载网页和处理页面,主要是处理一些JS脚本标签、CSS代码内容、空格字符、HTML标签等。爬虫的基本工作是由解析器完成的。资源库用于存储下载的网络资源。通常使用大型数据库,例如 Oracle 数据库来存储和索引它。
控制器
控制器是网络爬虫的中央控制器。主要负责根据系统发送的URL链接分配一个线程,然后启动线程调用爬虫爬取网页。
解析器
解析器负责网络爬虫的主要部分。它的主要任务是:下载网页的功能,处理网页的文本,如过滤,提取特殊的HTML标签,分析数据。
资源库
它主要是一个容器,用于存储从网页下载的数据记录,并为索引生成提供目标源。大中型数据库产品包括:Oracle、Sql Server等。
网络爬虫系统一般会选择一些比较重要的出度(网页中超链接数)网站较大的URL作为种子URL集。网络爬虫系统使用这些种子集作为初始 URL 来开始数据爬取。因为网页中收录链接信息,所以会通过已有网页的URL获取一些新的URL。网页之间的指向结构可以看作是一片森林。每个种子 URL 对应的网页是森林中一棵树的根节点。. 这样,网络爬虫系统就可以按照广度优先算法或深度优先算法遍历所有网页。由于深度优先搜索算法可能导致爬虫系统陷入网站内部,不利于搜索距离网站首页比较近的网页信息,一般采用广度优先搜索算法采集网页。网络爬虫系统首先将种子 URL 放入下载队列,然后简单地从队列头部获取一个 URL 来下载其对应的网页。获取网页内容并存储后,通过解析网页中的链接信息可以得到一些新的URL,并将这些URL加入到下载队列中。然后取出一个URL,下载其对应的网页,然后解析,以此类推,直到遍历全网或者满足某个条件。网络爬虫系统首先将种子 URL 放入下载队列,然后简单地从队列头部获取一个 URL 来下载其对应的网页。获取网页内容并存储后,通过解析网页中的链接信息可以得到一些新的URL,并将这些URL加入到下载队列中。然后取出一个URL,下载其对应的网页,然后解析,以此类推,直到遍历全网或者满足某个条件。网络爬虫系统首先将种子 URL 放入下载队列,然后简单地从队列头部获取一个 URL 来下载其对应的网页。获取网页内容并存储后,通过解析网页中的链接信息可以得到一些新的URL,并将这些URL加入到下载队列中。然后取出一个URL,下载其对应的网页,然后解析,以此类推,直到遍历全网或者满足某个条件。
网络爬虫的基本工作流程如下:
1.首先选择一个精心挑选的种子 URL 的子集;
2.将这些网址放入待抓取的网址队列中;
3. 从待爬取URL队列中取出待爬取的URL,解析DNS,获取主机IP,下载该URL对应的网页,存入下载的网页库中。此外,将这些 URL 放入 Crawl URL 队列。
4.解析URL队列中已经爬取的URL,分析其中的其他URL,将URL放入待爬取的URL队列,从而进入下一个循环。
2.3 爬取策略
在爬虫系统中,待爬取的 URL 队列是一个重要的部分。待爬取的URL队列中的URL的排列顺序也是一个重要的问题,因为它涉及到先爬到哪个页面,再爬到哪个页面。确定这些 URL 排列顺序的方法称为爬取策略。下面重点介绍几种常见的爬取策略:
2.3.1 深度优先遍历策略
深度优先遍历策略是指网络爬虫会从起始页开始,每次一个链接跟踪每个链接,处理完该行后移动到下一个起始页,并继续跟踪该链接。我们以下图为例:
遍历的路径:AFG EHI BCD
2.3.2 广度优先遍历策略
广度优先遍历的基本思想是将新下载的网页中找到的链接直接插入待爬取URL队列的末尾。也就是说,网络爬虫会先爬取起始网页链接的所有网页,然后选择其中一个链接的网页,继续爬取该网页链接的所有网页。或者以上图为例:
遍历路径:ABCDEF GHI
2.3.3 反向链接策略
反向链接数是指从其他网页指向一个网页的链接数。反向链接的数量表示网页内容被他人推荐的程度。因此,在很多情况下,搜索引擎的爬取系统会使用这个指标来评估网页的重要性,从而确定不同网页的爬取顺序。
在真实的网络环境中,由于广告链接和作弊链接的存在,反向链接的数量并不能完全等同于他人的重要性。因此,搜索引擎倾向于考虑一些可靠的反向链接计数。
2.3.4部分PageRank策略
Partial PageRank算法借鉴了PageRank算法的思想:对于下载的网页,与待爬取的URL队列中的URL一起,形成一组网页,计算每个页面的PageRank值. URL 按 PageRank 值排序,并按该顺序抓取页面。
如果每次爬取一个页面都重新计算一次PageRank值,折中的解决方案是:每爬完K个页面,重新计算一次PageRank值。但是这种情况还是有一个问题:对于下载页面中分析的链接,也就是我们前面提到的那部分未知网页,暂时没有PageRank值。为了解决这个问题,给这些页面一个临时的PageRank值:把这个网页的所有传入链接传入的PageRank值聚合起来,从而形成未知页面的PageRank值,从而参与排序. 以下示例说明:
2.3.5OPICStrategy
该算法实际上为页面分配了一个重要性分数。在算法开始之前,所有页面都会获得相同的初始现金。当某个页面P被下载时,P的现金分配给从P分析的所有链接,P的现金被清空。根据现金数量对待爬取URL队列中的所有页面进行排序。
2.3.六大网站优先策略
所有待爬取的URL队列中的网页都按照它们所属的网站进行分类。网站需要下载的页面较多,请先下载。这种策略也称为大站点优先策略。
3、爬虫分类
我应该选择 Nutch、Crawler4j、WebMagic、scrapy、WebCollector 还是其他来开发网络爬虫?上面提到的爬虫类,基本上可以分为三类:
(1)分布式爬虫:Nutch
(2)JAVA 爬虫:Crawler4j、WebMagic、WebCollector
(3)非JAVA爬虫:scrapy(基于Python语言开发)
3.1 分布式爬虫
爬虫使用分布式,主要解决两个问题:
1)海量网址管理
2)网速
现在比较流行的分布式爬虫是Apache的Nutch。但是对于大多数用户来说,Nutch 是这些爬虫中最差的选择,原因如下:
1)Nutch 是为搜索引擎设计的爬虫。大多数用户需要一个爬虫来进行准确的数据爬取(精细提取)。Nutch 运行的三分之二的流程是为搜索引擎设计的。提取意义不大。换句话说,使用 Nutch 进行数据提取会在不必要的计算上浪费大量时间。而如果你试图通过二次开发使Nutch适合提取业务,那你基本上会破坏Nutch的框架,把Nutch改得面目全非,而且有能力修改Nutch,还不如自己写一个新的。分布式爬虫框架。
2)Nutch 依赖hadoop 运行,hadoop 本身消耗大量时间。如果集群机器数量少,爬取速度不如单机爬虫快。
3)虽然Nutch有一套插件机制,但还是作为亮点来宣传的。可以看到一些开源的Nutch插件,提供精准提取功能。但是任何开发过 Nutch 插件的人都知道 Nutch 的插件系统有多糟糕。使用反射机制加载和调用插件,使得程序的编写和调试变得异常困难,更不用说在其上开发复杂的提取系统了。并且 Nutch 没有提供对应的插件挂载点进行精细提取。Nutch的插件只有五六个挂载点,而这五六个挂载点都是给搜索引擎服务的,不提供细提取的挂载点。Nutch 的大部分精炼提取插件都挂载在“页面解析”(parser)挂载点上。这个挂载点其实是用来解析链接(为后续爬取提供URL)和提供一些搜索引擎的。易于提取的网页信息(元信息、网页文本)。
4)使用Nutch进行爬虫的二次开发,编写和调试爬虫所需的时间往往是单机爬虫所需时间的十倍以上。学习 Nutch 源码的成本非常高,更何况团队中的每个人都必须了解 Nutch 源码。在调试过程中,会出现程序本身以外的各种问题(hadoop问题、hbase问题)。
5)很多人说Nutch2有gora,可以将数据持久化到avro文件、hbase、mysql等,其实很多人都误解了。这里所说的持久化数据是指在avro、hbase、mysql中存储URL信息(URL管理所需的数据)。不是您要提取的结构化数据。事实上,对于大多数人来说,URL 信息存在于何处并不重要。
6)Nutch2 的版本目前不适合开发。Nutch的官方稳定版是nutch2.2.1,但是这个版本绑定了gora-0.3。如果要使用hbase和nutch(大多数人使用nutch2是为了使用hbase),只能使用版本0.90左右的hbase,相应地,将hadoop版本降低到hadoop 0.左右@>2。而且nutch2的官方教程也颇具误导性。Nutch2的教程有两个,分别是Nutch1.x和Nutch2.x。Nutch2.x官网是为了支持hbase0.94而写的。但其实这个Nutch2.x是指Nutch2.3之前和Nutch2.2.1之后的一个版本,在官方SVN中不断更新。而且它'
所以,如果你不是搜索引擎,尽量不要选择 Nutch 作为爬虫。一些团队喜欢跟风。他们坚持选择Nutch来开发精制履带。其实是针对Nutch的名声(Nutch的作者是Doug Cutting)。当然,最终的结果往往是项目延期。
如果你在做搜索引擎,Nutch1.x 是一个非常不错的选择。Nutch1.x 和 solr 或 es 可以组成一个非常强大的搜索引擎。如果必须使用 Nutch2,建议等到 Nutch2.3 发布。当前的 Nutch2 是一个非常不稳定的版本。
分布式爬虫平台架构图
3.2 JAVA爬虫
在这里,将JAVA爬虫划分为一个单独的类别,因为JAVA在网络爬虫的生态系统中非常完善。相关资料也是最全的。这里可能有争议,我只是随便说说。
其实开源网络爬虫(框架)的开发很简单,难点和复杂的问题已经被前人解决了(比如DOM树解析定位、字符集检测、海量URL去重),可以说没有技术含量。包括Nutch,其实Nutch的技术难点就是开发hadoop,代码本身也很简单。从某种意义上说,网络爬虫类似于遍历本机的文件以查找文件中的信息。没有任何困难。选择开源爬虫框架的原因是为了省事。比如爬虫的URL管理、线程池等模块,任何人都可以做,但是需要一段时间的调试和修改才能稳定下来。
对于爬虫的功能。用户比较关心的问题往往是:
1)爬虫是否支持多线程,爬虫可以使用代理,爬虫可以抓取重复数据,爬虫可以抓取JS生成的信息吗?
不支持多线程、不支持代理、不能过滤重复URL的不叫开源爬虫,叫循环执行http请求。
js生成的信息能否被爬取与爬虫本身关系不大。爬虫主要负责遍历网站和下载页面。爬取js产生的信息与网页信息提取模块有关,往往需要通过模拟浏览器(htmlunit、selenium)来完成。这些模拟浏览器通常需要花费大量时间来处理一个页面。因此,一种策略是利用这些爬虫遍历网站,当遇到需要解析的页面时,将网页的相关信息提交给模拟浏览器,完成对JS生成信息的提取。
2)爬虫可以抓取ajax信息吗?
网页上有一些异步加载的数据。爬取这个数据有两种方式:使用模拟浏览器(问题1中描述),或者分析ajax的http请求,自己生成ajax请求的url,获取返回的数据。如果你自己生成ajax请求,那么使用开源爬虫有什么意义呢?其实就是利用开源爬虫的线程池和URL管理功能(比如断点爬取)。
如果我已经可以生成我需要的ajax请求(列表),我该如何使用这些爬虫来爬取这些请求呢?
爬虫往往被设计成广度遍历或深度遍历的方式来遍历静态或动态页面。爬取ajax信息属于深网(deep web)的范畴,虽然大部分爬虫并不直接支持。但它也可以通过某些方式完成。例如,WebCollector 使用广度遍历来遍历 网站。爬虫的第一轮爬取就是爬取种子集(seeds)中的所有url。简单来说就是将生成的ajax请求作为种子,放入爬虫中。使用爬虫对这些种子进行深度为 1 的广度遍历(默认为广度遍历)。
3)爬虫如何爬取待登录的网站?
这些开源爬虫都支持在爬取时指定cookies,而模拟登录主要依赖cookies。至于如何获取cookies,就不是爬虫管理的问题了。您可以手动获取cookies,使用http请求模拟登录,或者使用模拟浏览器自动登录。
4)爬虫如何从网页中提取信息?
开源爬虫一般会集成网页提取工具。主要支持两种规范:CSS SELECTOR 和 XPATH。至于哪个更好,我这里就不评论了。
5)爬虫是如何保存网页信息的?
有一些爬虫带有一个负责持久性的模块。例如,webmagic 有一个名为 pipeline 的模块。通过简单的配置,爬虫提取的信息可以持久化到文件、数据库等。还有一些爬虫不直接为用户提供数据持久化模块。比如 crawler4j 和 webcollector。让用户在网页处理模块中添加提交数据库的操作。至于用管道模块好不好,就类似于用ORM操作数据库好不好的问题,看你的业务。
6)爬虫被网站拦截了怎么办?
爬虫被网站阻塞,可以通过使用多个代理(随机代理)来解决。但是这些开源爬虫一般不直接支持随机代理的切换。因此,用户经常需要将获取到的agent放入一个全局数组中,并编写一段代码让agent随机获取(从数组中)。
7)网页可以调用爬虫吗?
爬虫的调用是在Web的服务器端调用的。您可以按照平时使用的方式使用它。可以使用这些爬虫。
8)爬虫速度怎么样?
单机开源爬虫的速度基本可以用到本地网速的极限。爬虫速度慢往往是因为用户减少了线程数,网速慢,或者数据持久化时与数据库的交互慢。而这些东西往往是由用户的机器和二次开发的代码决定的。这些开源爬虫的速度非常好。
9) 明明代码写对了,但是数据爬不出来。爬虫有问题吗?不同的爬虫可以解决吗?
如果代码写得正确,无法爬取数据,其他爬虫也将无法爬取。在这种情况下,要么是 网站 阻止了您,要么您抓取的数据是由 javascript 生成的。如果无法爬取数据,则无法通过更改爬虫来解决。
10)哪个爬虫可以判断网站是否已经爬完,哪个爬虫可以根据主题爬取?
爬虫无法判断网站是否已经爬完,只能尽量覆盖。
至于根据主题爬,爬虫把内容爬下来后就知道主题是什么了。因此,通常是整体爬下来,然后对内容进行过滤。如果爬取的范围太广,可以通过限制 URL 正则化来缩小范围。
11)哪个爬虫的设计模式和架构比较好?
设计模式是胡说八道。都说软件设计模式不错,软件开发后总结了几种设计模式。设计模式对软件开发没有指导意义。使用设计模式设计爬虫只会让爬虫的设计更加臃肿。
至于架构,目前开源爬虫主要是设计详细的数据结构,比如爬取线程池、任务队列等,大家都可以控制。爬虫的业务太简单了,用任何框架都谈不上。
所以对于 JAVA 开源爬虫,我认为,只要找到一个运行良好的。如果业务复杂,使用哪个爬虫,只能通过复杂的二次开发来满足需求。
3.3 非JAVA爬虫
在非JAVA语言编写的爬虫中,不乏优秀的爬虫。这里提取为一个类别,不是为了讨论爬虫本身的好坏,而是为了讨论larbin、scrapy等爬虫对开发成本的影响。
先说python爬虫,python用30行代码就可以完成JAVA 50行代码的任务。Python写代码确实很快,但是在调试代码阶段,调试python代码所消耗的时间往往比编码阶段节省的时间要多得多。使用python开发,为了保证程序的正确性和稳定性,需要编写更多的测试模块。当然,如果爬取规模不大,爬取业务也不复杂,用scrapy还是不错的,可以轻松完成爬取任务。
上图是Scrapy的架构图。绿线是数据流。从初始 URL 开始,Scheduler 会将其交给 Downloader 进行下载。下载完成后交给 Spider 进行分析,将要保存的数据发送到 Item Pipeline ,也就是对数据进行后处理。此外,可以在数据流通道中安装各种中间件,进行必要的处理。因此,在开发爬虫时,最好先规划好各个模块。我的做法是分别规划下载模块、爬取模块、调度模块、数据存储模块。
对于C++爬虫来说,学习成本会比较大。而且不能只计算一个人的学习成本。如果软件需要一个团队来开发或者移交,那就是很多人的学习成本。软件调试不是那么容易。
还有一些ruby和php爬虫,这里就不多评价了。确实有一些非常小的data采集任务,在ruby或者php中都用得上。但是,要选择这些语言的开源爬虫,一方面需要调查相关的生态系统,另一方面,这些开源爬虫可能存在一些你找不到的bug(很少有人使用它们,而且信息也较少)
4、反爬虫技术
由于搜索引擎的普及,网络爬虫已经成为一种非常流行的网络技术。除了专注于搜索的谷歌、雅虎、微软和百度之外,几乎每个大型门户网站网站都有自己的搜索引擎,无论大小。可以叫的名字有几十种,不知道的种类有上万种。对于一个内容驱动的网站,难免会被网络爬虫光顾。
一些智能搜索引擎爬虫的爬取频率比较合理,资源消耗也比较小,但是很多不良网络爬虫对网页的爬取能力较差,经常会循环重复上百个请求。拿,这种爬虫对中小型网站来说往往是毁灭性的打击,尤其是一些缺乏爬虫编写经验的程序员编写的爬虫,破坏性极大,导致网站访问压力会很大非常大,这将导致 网站 访问缓慢甚至无法访问。
一般网站反爬虫从三个方面:用户请求的头文件、用户行为、网站目录和数据加载方式。前两种比较容易遇到,从这些角度来看,大部分网站都是反爬虫。会使用第三种使用ajax的网站,增加了爬取的难度。
4.1 反爬虫通过Headers
反爬取用户请求的头部是最常见的反爬取策略。很多网站会检测Headers的User-Agent,有的网站会检测Referer(有些资源的防盗链网站就是检测Referer)。如果遇到这种反爬虫机制,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值改为目标网站域名【注释:往往容易被Ignore,通过对请求的抓包分析,确定referer,在模拟访问请求的header中添加】在节目中。对于检测Headers的反爬虫,在爬虫中修改或添加Headers可以很好的绕过。
4.2 基于用户行为的反爬虫
网站的另一部分是检测用户行为,比如同一个IP在短时间内多次访问同一个页面,或者同一个账号在短时间内多次执行相同的操作。【这个反爬需要有足够的ip来处理】
大多数网站都是前一种情况,使用IP代理就可以了。可以专门写一个爬虫来爬取网上公开的代理ip,检测到后全部保存。这样的代理ip爬虫经常使用,最好自己准备一个。有大量代理IP,可以每隔几次更换一个IP,这在requests或者urllib2中很容易做到,这样就可以轻松绕过第一个反爬虫。[评论:动态拨号也是一种解决方案]
对于第二种情况,下一个请求可以在每个请求之后以几秒的随机间隔发出。一些有逻辑漏洞的网站可以通过多次请求、注销、重新登录、继续请求的方式绕过同一账号短时间内不能多次请求的限制。【点评:账号反爬限制一般比较难处理,随机几秒的请求可能经常被屏蔽。如果可以有多个账号,切换使用,效果会更好】
4.3 动态页面的反爬虫
以上情况大多出现在静态页面中,也有一些网站,我们需要爬取的数据是通过ajax请求获取的,或者通过Java生成的。一、使用Firebug或者HttpFox分析网络请求【点评:我感觉Google和IE的网络请求分析和使用也很不错】。如果我们能找到ajax请求并分析出具体参数和响应的具体含义,就可以使用上面的方法,直接使用requests或者urllib2来模拟ajax请求,分析响应json得到需要的数据。
能够直接模拟ajax请求获取数据是很棒的,但是有的网站把ajax请求的所有参数都加密了。我们根本无法构造对我们需要的数据的请求。我这几天爬的网站就是这样的。除了对ajax参数进行加密外,还封装了一些基础功能,都是调用自己的接口,接口参数是加密的。遇到这样的网站,我们就不能使用上面的方法了。我使用selenium+phantomJS框架调用浏览器内核,使用phantomJS执行js模拟人类操作,触发页面中的js脚本。从填表到点击按钮再到页面滚动,都可以模拟,不管具体的请求和响应过程,只是一个完整的模拟人们浏览页面获取数据的过程。[评论:支持phantomJS]
使用这个框架几乎可以绕过大部分反爬虫,因为它不是冒充浏览器获取数据(上面提到的添加header在一定程度上是冒充浏览器),它本身就是浏览器,而且phantomJS 是一个没有界面的浏览器,但控制浏览器的不是人。使用selenium+phantomJS可以做很多事情,比如识别touch-type(12306)或者滑动验证码,暴力破解页面表单等)。它还将在自动化渗透中发挥重要作用,并将在未来发挥作用。提到这一点。 查看全部
htmlunit抓取动态网页(Web网络爬虫系统的原理及应用)
1、爬虫技术概述
网络爬虫是根据一定的规则自动从万维网上爬取信息的程序或脚本。它们广泛用于互联网搜索引擎或其他类似的网站,它可以自动采集它可以访问的所有页面获取或更新这些网站的内容和检索方法。从功能上来说,爬虫一般分为数据采集、处理、存储三部分。传统爬虫从一个或多个初始网页的URL开始,获取初始网页上的URL。在抓取网页的过程中,它不断地从当前页面中提取新的 URL 并放入队列中,直到满足系统的某些停止条件。焦点爬虫的工作流程比较复杂。它需要按照一定的网页分析算法过滤掉与主题无关的链接,保留有用的链接,并放入等待抓取的URL队列中。然后,它会根据一定的搜索策略从队列中选择下一个要爬取的网页URL,并重复上述过程,直到达到系统的一定条件并停止。此外,爬虫爬取的所有网页都会被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。保留有用的链接并将它们放入等待抓取的 URL 队列中。然后,它会根据一定的搜索策略从队列中选择下一个要爬取的网页URL,并重复上述过程,直到达到系统的一定条件并停止。此外,爬虫爬取的所有网页都会被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。保留有用的链接并将它们放入等待抓取的 URL 队列中。然后,它会根据一定的搜索策略从队列中选择下一个要爬取的网页URL,并重复上述过程,直到达到系统的一定条件并停止。此外,爬虫爬取的所有网页都会被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。爬虫抓取到的所有网页都将被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。爬虫抓取到的所有网页都将被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。
与通用网络爬虫相比,聚焦爬虫还需要解决三个主要问题:
(1) 获取目标的描述或定义;
(2) 网页或数据的分析和过滤;
(3) URL 的搜索策略。
2、爬虫原理
2.1 网络爬虫原理
网络爬虫系统的功能是下载网页数据,为搜索引擎系统提供数据源。许多大型网络搜索引擎系统被称为基于Web数据的搜索引擎系统采集,如Google、百度等。这显示了网络爬虫系统在搜索引擎中的重要性。除了供用户阅读的文字信息外,网页还收录一些超链接信息。网络爬虫系统通过网页中的超链接信息不断获取网络上的其他网页。正是因为这个采集进程像爬虫或者蜘蛛一样在网络上漫游,所以才叫做网络爬虫系统或者网络蜘蛛系统,英文叫Spider或者Crawler。
2.2 网络爬虫系统的工作原理
在网络爬虫的系统框架中,主要流程由控制器、解析器和资源库三部分组成。控制器的主要工作是为多个线程中的每个爬虫线程分配工作任务。解析器的主要工作是下载网页和处理页面,主要是处理一些JS脚本标签、CSS代码内容、空格字符、HTML标签等。爬虫的基本工作是由解析器完成的。资源库用于存储下载的网络资源。通常使用大型数据库,例如 Oracle 数据库来存储和索引它。
控制器
控制器是网络爬虫的中央控制器。主要负责根据系统发送的URL链接分配一个线程,然后启动线程调用爬虫爬取网页。
解析器
解析器负责网络爬虫的主要部分。它的主要任务是:下载网页的功能,处理网页的文本,如过滤,提取特殊的HTML标签,分析数据。
资源库
它主要是一个容器,用于存储从网页下载的数据记录,并为索引生成提供目标源。大中型数据库产品包括:Oracle、Sql Server等。
网络爬虫系统一般会选择一些比较重要的出度(网页中超链接数)网站较大的URL作为种子URL集。网络爬虫系统使用这些种子集作为初始 URL 来开始数据爬取。因为网页中收录链接信息,所以会通过已有网页的URL获取一些新的URL。网页之间的指向结构可以看作是一片森林。每个种子 URL 对应的网页是森林中一棵树的根节点。. 这样,网络爬虫系统就可以按照广度优先算法或深度优先算法遍历所有网页。由于深度优先搜索算法可能导致爬虫系统陷入网站内部,不利于搜索距离网站首页比较近的网页信息,一般采用广度优先搜索算法采集网页。网络爬虫系统首先将种子 URL 放入下载队列,然后简单地从队列头部获取一个 URL 来下载其对应的网页。获取网页内容并存储后,通过解析网页中的链接信息可以得到一些新的URL,并将这些URL加入到下载队列中。然后取出一个URL,下载其对应的网页,然后解析,以此类推,直到遍历全网或者满足某个条件。网络爬虫系统首先将种子 URL 放入下载队列,然后简单地从队列头部获取一个 URL 来下载其对应的网页。获取网页内容并存储后,通过解析网页中的链接信息可以得到一些新的URL,并将这些URL加入到下载队列中。然后取出一个URL,下载其对应的网页,然后解析,以此类推,直到遍历全网或者满足某个条件。网络爬虫系统首先将种子 URL 放入下载队列,然后简单地从队列头部获取一个 URL 来下载其对应的网页。获取网页内容并存储后,通过解析网页中的链接信息可以得到一些新的URL,并将这些URL加入到下载队列中。然后取出一个URL,下载其对应的网页,然后解析,以此类推,直到遍历全网或者满足某个条件。
网络爬虫的基本工作流程如下:
1.首先选择一个精心挑选的种子 URL 的子集;
2.将这些网址放入待抓取的网址队列中;
3. 从待爬取URL队列中取出待爬取的URL,解析DNS,获取主机IP,下载该URL对应的网页,存入下载的网页库中。此外,将这些 URL 放入 Crawl URL 队列。
4.解析URL队列中已经爬取的URL,分析其中的其他URL,将URL放入待爬取的URL队列,从而进入下一个循环。
2.3 爬取策略
在爬虫系统中,待爬取的 URL 队列是一个重要的部分。待爬取的URL队列中的URL的排列顺序也是一个重要的问题,因为它涉及到先爬到哪个页面,再爬到哪个页面。确定这些 URL 排列顺序的方法称为爬取策略。下面重点介绍几种常见的爬取策略:
2.3.1 深度优先遍历策略
深度优先遍历策略是指网络爬虫会从起始页开始,每次一个链接跟踪每个链接,处理完该行后移动到下一个起始页,并继续跟踪该链接。我们以下图为例:
遍历的路径:AFG EHI BCD
2.3.2 广度优先遍历策略
广度优先遍历的基本思想是将新下载的网页中找到的链接直接插入待爬取URL队列的末尾。也就是说,网络爬虫会先爬取起始网页链接的所有网页,然后选择其中一个链接的网页,继续爬取该网页链接的所有网页。或者以上图为例:
遍历路径:ABCDEF GHI
2.3.3 反向链接策略
反向链接数是指从其他网页指向一个网页的链接数。反向链接的数量表示网页内容被他人推荐的程度。因此,在很多情况下,搜索引擎的爬取系统会使用这个指标来评估网页的重要性,从而确定不同网页的爬取顺序。
在真实的网络环境中,由于广告链接和作弊链接的存在,反向链接的数量并不能完全等同于他人的重要性。因此,搜索引擎倾向于考虑一些可靠的反向链接计数。
2.3.4部分PageRank策略
Partial PageRank算法借鉴了PageRank算法的思想:对于下载的网页,与待爬取的URL队列中的URL一起,形成一组网页,计算每个页面的PageRank值. URL 按 PageRank 值排序,并按该顺序抓取页面。
如果每次爬取一个页面都重新计算一次PageRank值,折中的解决方案是:每爬完K个页面,重新计算一次PageRank值。但是这种情况还是有一个问题:对于下载页面中分析的链接,也就是我们前面提到的那部分未知网页,暂时没有PageRank值。为了解决这个问题,给这些页面一个临时的PageRank值:把这个网页的所有传入链接传入的PageRank值聚合起来,从而形成未知页面的PageRank值,从而参与排序. 以下示例说明:
2.3.5OPICStrategy
该算法实际上为页面分配了一个重要性分数。在算法开始之前,所有页面都会获得相同的初始现金。当某个页面P被下载时,P的现金分配给从P分析的所有链接,P的现金被清空。根据现金数量对待爬取URL队列中的所有页面进行排序。
2.3.六大网站优先策略
所有待爬取的URL队列中的网页都按照它们所属的网站进行分类。网站需要下载的页面较多,请先下载。这种策略也称为大站点优先策略。
3、爬虫分类
我应该选择 Nutch、Crawler4j、WebMagic、scrapy、WebCollector 还是其他来开发网络爬虫?上面提到的爬虫类,基本上可以分为三类:
(1)分布式爬虫:Nutch
(2)JAVA 爬虫:Crawler4j、WebMagic、WebCollector
(3)非JAVA爬虫:scrapy(基于Python语言开发)
3.1 分布式爬虫
爬虫使用分布式,主要解决两个问题:
1)海量网址管理
2)网速
现在比较流行的分布式爬虫是Apache的Nutch。但是对于大多数用户来说,Nutch 是这些爬虫中最差的选择,原因如下:
1)Nutch 是为搜索引擎设计的爬虫。大多数用户需要一个爬虫来进行准确的数据爬取(精细提取)。Nutch 运行的三分之二的流程是为搜索引擎设计的。提取意义不大。换句话说,使用 Nutch 进行数据提取会在不必要的计算上浪费大量时间。而如果你试图通过二次开发使Nutch适合提取业务,那你基本上会破坏Nutch的框架,把Nutch改得面目全非,而且有能力修改Nutch,还不如自己写一个新的。分布式爬虫框架。
2)Nutch 依赖hadoop 运行,hadoop 本身消耗大量时间。如果集群机器数量少,爬取速度不如单机爬虫快。
3)虽然Nutch有一套插件机制,但还是作为亮点来宣传的。可以看到一些开源的Nutch插件,提供精准提取功能。但是任何开发过 Nutch 插件的人都知道 Nutch 的插件系统有多糟糕。使用反射机制加载和调用插件,使得程序的编写和调试变得异常困难,更不用说在其上开发复杂的提取系统了。并且 Nutch 没有提供对应的插件挂载点进行精细提取。Nutch的插件只有五六个挂载点,而这五六个挂载点都是给搜索引擎服务的,不提供细提取的挂载点。Nutch 的大部分精炼提取插件都挂载在“页面解析”(parser)挂载点上。这个挂载点其实是用来解析链接(为后续爬取提供URL)和提供一些搜索引擎的。易于提取的网页信息(元信息、网页文本)。
4)使用Nutch进行爬虫的二次开发,编写和调试爬虫所需的时间往往是单机爬虫所需时间的十倍以上。学习 Nutch 源码的成本非常高,更何况团队中的每个人都必须了解 Nutch 源码。在调试过程中,会出现程序本身以外的各种问题(hadoop问题、hbase问题)。
5)很多人说Nutch2有gora,可以将数据持久化到avro文件、hbase、mysql等,其实很多人都误解了。这里所说的持久化数据是指在avro、hbase、mysql中存储URL信息(URL管理所需的数据)。不是您要提取的结构化数据。事实上,对于大多数人来说,URL 信息存在于何处并不重要。
6)Nutch2 的版本目前不适合开发。Nutch的官方稳定版是nutch2.2.1,但是这个版本绑定了gora-0.3。如果要使用hbase和nutch(大多数人使用nutch2是为了使用hbase),只能使用版本0.90左右的hbase,相应地,将hadoop版本降低到hadoop 0.左右@>2。而且nutch2的官方教程也颇具误导性。Nutch2的教程有两个,分别是Nutch1.x和Nutch2.x。Nutch2.x官网是为了支持hbase0.94而写的。但其实这个Nutch2.x是指Nutch2.3之前和Nutch2.2.1之后的一个版本,在官方SVN中不断更新。而且它'
所以,如果你不是搜索引擎,尽量不要选择 Nutch 作为爬虫。一些团队喜欢跟风。他们坚持选择Nutch来开发精制履带。其实是针对Nutch的名声(Nutch的作者是Doug Cutting)。当然,最终的结果往往是项目延期。
如果你在做搜索引擎,Nutch1.x 是一个非常不错的选择。Nutch1.x 和 solr 或 es 可以组成一个非常强大的搜索引擎。如果必须使用 Nutch2,建议等到 Nutch2.3 发布。当前的 Nutch2 是一个非常不稳定的版本。
分布式爬虫平台架构图
3.2 JAVA爬虫
在这里,将JAVA爬虫划分为一个单独的类别,因为JAVA在网络爬虫的生态系统中非常完善。相关资料也是最全的。这里可能有争议,我只是随便说说。
其实开源网络爬虫(框架)的开发很简单,难点和复杂的问题已经被前人解决了(比如DOM树解析定位、字符集检测、海量URL去重),可以说没有技术含量。包括Nutch,其实Nutch的技术难点就是开发hadoop,代码本身也很简单。从某种意义上说,网络爬虫类似于遍历本机的文件以查找文件中的信息。没有任何困难。选择开源爬虫框架的原因是为了省事。比如爬虫的URL管理、线程池等模块,任何人都可以做,但是需要一段时间的调试和修改才能稳定下来。
对于爬虫的功能。用户比较关心的问题往往是:
1)爬虫是否支持多线程,爬虫可以使用代理,爬虫可以抓取重复数据,爬虫可以抓取JS生成的信息吗?
不支持多线程、不支持代理、不能过滤重复URL的不叫开源爬虫,叫循环执行http请求。
js生成的信息能否被爬取与爬虫本身关系不大。爬虫主要负责遍历网站和下载页面。爬取js产生的信息与网页信息提取模块有关,往往需要通过模拟浏览器(htmlunit、selenium)来完成。这些模拟浏览器通常需要花费大量时间来处理一个页面。因此,一种策略是利用这些爬虫遍历网站,当遇到需要解析的页面时,将网页的相关信息提交给模拟浏览器,完成对JS生成信息的提取。
2)爬虫可以抓取ajax信息吗?
网页上有一些异步加载的数据。爬取这个数据有两种方式:使用模拟浏览器(问题1中描述),或者分析ajax的http请求,自己生成ajax请求的url,获取返回的数据。如果你自己生成ajax请求,那么使用开源爬虫有什么意义呢?其实就是利用开源爬虫的线程池和URL管理功能(比如断点爬取)。
如果我已经可以生成我需要的ajax请求(列表),我该如何使用这些爬虫来爬取这些请求呢?
爬虫往往被设计成广度遍历或深度遍历的方式来遍历静态或动态页面。爬取ajax信息属于深网(deep web)的范畴,虽然大部分爬虫并不直接支持。但它也可以通过某些方式完成。例如,WebCollector 使用广度遍历来遍历 网站。爬虫的第一轮爬取就是爬取种子集(seeds)中的所有url。简单来说就是将生成的ajax请求作为种子,放入爬虫中。使用爬虫对这些种子进行深度为 1 的广度遍历(默认为广度遍历)。
3)爬虫如何爬取待登录的网站?
这些开源爬虫都支持在爬取时指定cookies,而模拟登录主要依赖cookies。至于如何获取cookies,就不是爬虫管理的问题了。您可以手动获取cookies,使用http请求模拟登录,或者使用模拟浏览器自动登录。
4)爬虫如何从网页中提取信息?
开源爬虫一般会集成网页提取工具。主要支持两种规范:CSS SELECTOR 和 XPATH。至于哪个更好,我这里就不评论了。
5)爬虫是如何保存网页信息的?
有一些爬虫带有一个负责持久性的模块。例如,webmagic 有一个名为 pipeline 的模块。通过简单的配置,爬虫提取的信息可以持久化到文件、数据库等。还有一些爬虫不直接为用户提供数据持久化模块。比如 crawler4j 和 webcollector。让用户在网页处理模块中添加提交数据库的操作。至于用管道模块好不好,就类似于用ORM操作数据库好不好的问题,看你的业务。
6)爬虫被网站拦截了怎么办?
爬虫被网站阻塞,可以通过使用多个代理(随机代理)来解决。但是这些开源爬虫一般不直接支持随机代理的切换。因此,用户经常需要将获取到的agent放入一个全局数组中,并编写一段代码让agent随机获取(从数组中)。
7)网页可以调用爬虫吗?
爬虫的调用是在Web的服务器端调用的。您可以按照平时使用的方式使用它。可以使用这些爬虫。
8)爬虫速度怎么样?
单机开源爬虫的速度基本可以用到本地网速的极限。爬虫速度慢往往是因为用户减少了线程数,网速慢,或者数据持久化时与数据库的交互慢。而这些东西往往是由用户的机器和二次开发的代码决定的。这些开源爬虫的速度非常好。
9) 明明代码写对了,但是数据爬不出来。爬虫有问题吗?不同的爬虫可以解决吗?
如果代码写得正确,无法爬取数据,其他爬虫也将无法爬取。在这种情况下,要么是 网站 阻止了您,要么您抓取的数据是由 javascript 生成的。如果无法爬取数据,则无法通过更改爬虫来解决。
10)哪个爬虫可以判断网站是否已经爬完,哪个爬虫可以根据主题爬取?
爬虫无法判断网站是否已经爬完,只能尽量覆盖。
至于根据主题爬,爬虫把内容爬下来后就知道主题是什么了。因此,通常是整体爬下来,然后对内容进行过滤。如果爬取的范围太广,可以通过限制 URL 正则化来缩小范围。
11)哪个爬虫的设计模式和架构比较好?
设计模式是胡说八道。都说软件设计模式不错,软件开发后总结了几种设计模式。设计模式对软件开发没有指导意义。使用设计模式设计爬虫只会让爬虫的设计更加臃肿。
至于架构,目前开源爬虫主要是设计详细的数据结构,比如爬取线程池、任务队列等,大家都可以控制。爬虫的业务太简单了,用任何框架都谈不上。
所以对于 JAVA 开源爬虫,我认为,只要找到一个运行良好的。如果业务复杂,使用哪个爬虫,只能通过复杂的二次开发来满足需求。
3.3 非JAVA爬虫
在非JAVA语言编写的爬虫中,不乏优秀的爬虫。这里提取为一个类别,不是为了讨论爬虫本身的好坏,而是为了讨论larbin、scrapy等爬虫对开发成本的影响。
先说python爬虫,python用30行代码就可以完成JAVA 50行代码的任务。Python写代码确实很快,但是在调试代码阶段,调试python代码所消耗的时间往往比编码阶段节省的时间要多得多。使用python开发,为了保证程序的正确性和稳定性,需要编写更多的测试模块。当然,如果爬取规模不大,爬取业务也不复杂,用scrapy还是不错的,可以轻松完成爬取任务。
上图是Scrapy的架构图。绿线是数据流。从初始 URL 开始,Scheduler 会将其交给 Downloader 进行下载。下载完成后交给 Spider 进行分析,将要保存的数据发送到 Item Pipeline ,也就是对数据进行后处理。此外,可以在数据流通道中安装各种中间件,进行必要的处理。因此,在开发爬虫时,最好先规划好各个模块。我的做法是分别规划下载模块、爬取模块、调度模块、数据存储模块。
对于C++爬虫来说,学习成本会比较大。而且不能只计算一个人的学习成本。如果软件需要一个团队来开发或者移交,那就是很多人的学习成本。软件调试不是那么容易。
还有一些ruby和php爬虫,这里就不多评价了。确实有一些非常小的data采集任务,在ruby或者php中都用得上。但是,要选择这些语言的开源爬虫,一方面需要调查相关的生态系统,另一方面,这些开源爬虫可能存在一些你找不到的bug(很少有人使用它们,而且信息也较少)
4、反爬虫技术
由于搜索引擎的普及,网络爬虫已经成为一种非常流行的网络技术。除了专注于搜索的谷歌、雅虎、微软和百度之外,几乎每个大型门户网站网站都有自己的搜索引擎,无论大小。可以叫的名字有几十种,不知道的种类有上万种。对于一个内容驱动的网站,难免会被网络爬虫光顾。
一些智能搜索引擎爬虫的爬取频率比较合理,资源消耗也比较小,但是很多不良网络爬虫对网页的爬取能力较差,经常会循环重复上百个请求。拿,这种爬虫对中小型网站来说往往是毁灭性的打击,尤其是一些缺乏爬虫编写经验的程序员编写的爬虫,破坏性极大,导致网站访问压力会很大非常大,这将导致 网站 访问缓慢甚至无法访问。
一般网站反爬虫从三个方面:用户请求的头文件、用户行为、网站目录和数据加载方式。前两种比较容易遇到,从这些角度来看,大部分网站都是反爬虫。会使用第三种使用ajax的网站,增加了爬取的难度。
4.1 反爬虫通过Headers
反爬取用户请求的头部是最常见的反爬取策略。很多网站会检测Headers的User-Agent,有的网站会检测Referer(有些资源的防盗链网站就是检测Referer)。如果遇到这种反爬虫机制,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值改为目标网站域名【注释:往往容易被Ignore,通过对请求的抓包分析,确定referer,在模拟访问请求的header中添加】在节目中。对于检测Headers的反爬虫,在爬虫中修改或添加Headers可以很好的绕过。
4.2 基于用户行为的反爬虫
网站的另一部分是检测用户行为,比如同一个IP在短时间内多次访问同一个页面,或者同一个账号在短时间内多次执行相同的操作。【这个反爬需要有足够的ip来处理】
大多数网站都是前一种情况,使用IP代理就可以了。可以专门写一个爬虫来爬取网上公开的代理ip,检测到后全部保存。这样的代理ip爬虫经常使用,最好自己准备一个。有大量代理IP,可以每隔几次更换一个IP,这在requests或者urllib2中很容易做到,这样就可以轻松绕过第一个反爬虫。[评论:动态拨号也是一种解决方案]
对于第二种情况,下一个请求可以在每个请求之后以几秒的随机间隔发出。一些有逻辑漏洞的网站可以通过多次请求、注销、重新登录、继续请求的方式绕过同一账号短时间内不能多次请求的限制。【点评:账号反爬限制一般比较难处理,随机几秒的请求可能经常被屏蔽。如果可以有多个账号,切换使用,效果会更好】
4.3 动态页面的反爬虫
以上情况大多出现在静态页面中,也有一些网站,我们需要爬取的数据是通过ajax请求获取的,或者通过Java生成的。一、使用Firebug或者HttpFox分析网络请求【点评:我感觉Google和IE的网络请求分析和使用也很不错】。如果我们能找到ajax请求并分析出具体参数和响应的具体含义,就可以使用上面的方法,直接使用requests或者urllib2来模拟ajax请求,分析响应json得到需要的数据。
能够直接模拟ajax请求获取数据是很棒的,但是有的网站把ajax请求的所有参数都加密了。我们根本无法构造对我们需要的数据的请求。我这几天爬的网站就是这样的。除了对ajax参数进行加密外,还封装了一些基础功能,都是调用自己的接口,接口参数是加密的。遇到这样的网站,我们就不能使用上面的方法了。我使用selenium+phantomJS框架调用浏览器内核,使用phantomJS执行js模拟人类操作,触发页面中的js脚本。从填表到点击按钮再到页面滚动,都可以模拟,不管具体的请求和响应过程,只是一个完整的模拟人们浏览页面获取数据的过程。[评论:支持phantomJS]
使用这个框架几乎可以绕过大部分反爬虫,因为它不是冒充浏览器获取数据(上面提到的添加header在一定程度上是冒充浏览器),它本身就是浏览器,而且phantomJS 是一个没有界面的浏览器,但控制浏览器的不是人。使用selenium+phantomJS可以做很多事情,比如识别touch-type(12306)或者滑动验证码,暴力破解页面表单等)。它还将在自动化渗透中发挥重要作用,并将在未来发挥作用。提到这一点。
htmlunit抓取动态网页(动态网页的缺点主要表现在下面两个方面:缺点 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 78 次浏览 • 2022-04-15 01:04
)
什么是动态网页?
动态网页不代表网页是动态的,如FLASH、GIF动画图片等JS动态图片。
所谓动态网页,是指通过ASP、PHP、Cold Fusion、CGI等程序动态生成的页面,网页中的大部分数据内容来自于网站所连接的数据库。这个页面实际上在网络空间中并不存在,所以有些人看到某个页面的内容,想下载,但自然找不到资源。动态网页只有在接收到用户的访问请求后才会生成并传输到用户的浏览器中,而且由于访问者可以实时获得他们想要的数据,动态网页往往很容易给人留下深刻的印象。此外,动态网页还具有易于维护和更新的优点。
一些细心的朋友会发现,很多网页文件的扩展名不再只是“.htm”,还有“.php”、“.asp”等,都是动态网页技术产生的。
比如一部电影网站的播放页面,一部电影网站有上千部电影,每部电影有不止一集。如果一部电影有播放页面,恐怕服务器空间放这些页面也是个问题。事实上,大多数电影网站只有一个播放页面。网页中的所有内容都是从数据库中获取的。有一天如果页面不合适,你可以只修改这样一个页面。您不需要修改每个单独的页面。静态页面。可见,动态网页占用的服务器空间较小,易于更新和维护,对管理员来说非常方便。
动态网页的缺点是什么?
动态网页的缺点主要表现在以下两个方面:
一、首先,动态网页在访问速度上并不占优势
动态网页首先获取用户的指令,然后网页将指令带到数据库中,找到该指令对应的数据,然后传输给服务器。用户看到网页。问题就出来了。每次访问网页时,都必须经过这样一个过程。这个过程至少需要几秒钟。当访问者数量较多时,页面的加载速度会变慢,这也是服务器的负担。; 从用户的角度来看,网页加载缓慢,没有响应。下次谁会访问你的 网站。
静态网页很简单。静态网页实际上是存在的,没有经过服务器编译,直接加载到客户端的浏览器中显示。
可以看出,动态网页在访问速度上并不占优势。
二、在搜索引擎中不占优势收录
上面我是从服务器和用户体验的角度讲的,下面从搜索引擎的角度讲收录。动态网页是用户输入指令后形成的页面。这个页面不存在,搜索引擎只会爬现成的,不会自己打字,网站在搜索引擎收录中没有优势。搜索引擎仍然更喜欢静态页面。
但是,搜索引擎正在不断改进。到目前为止,绝大多数搜索引擎都支持动态页面的爬取。
流行的动态网页新技术
早期的动态网页主要采用CGI技术,CGI即Common Gateway Interface(公共网关接口)。您可以使用不同的程序编写合适的 CGI 程序,例如 Visual Basic、Delphi 或 C/C++ 等。由于编程难度大、效率低、修改复杂,有逐渐被新技术取代的趋势。
以下是目前备受关注的一些比较流行的新技术:
1、PHP 是超文本预处理器,是当今 Internet 上最流行的脚本语言。它的语法借鉴了C、Java、PERL等语言,但只需要一点编程知识。可以使用 PHP 构建一个真正的交互式网站。它对HTML语言有很好的兼容性,用户可以直接在脚本代码中添加HTML标签,或者在HTML标签中添加脚本代码,更好地实现页面控制。PHP提供标准的数据库接口,数据库连接方便,兼容性强;扩展性强;可以进行面向对象的编程。
2、ASP 是活动服务器页面。它是微软开发的HTML(超文本标记语言)、脚本(Script)和CGI(通用网关接口)的组合。它不提供自己的特殊编程语言。,但允许用户使用许多现有的脚本语言编写 ASP 应用程序。ASP 编程比 HTML 更方便、更灵活。它运行在 Web 服务器端,然后将运行结果以 HTML 格式发送到客户端的浏览器。因此,ASP 比一般的脚本语言安全得多。
ASP最大的优点是可以收录HTML标签,还可以直接访问数据库,使用无限扩展的ActiveX控件,所以在编程上比HTML更方便、更灵活。通过使用ASP的组件和对象技术,用户可以直接使用ActiveX控件,调用对象方法和属性,以简单的方式实现强大的交互功能。缺点是因为基本上受限于微软的操作系统平台,主要的工作环境是微软的IIS应用程序结构,而且由于ActiveX对象具有平台特性,ASP技术在跨平台的Web服务器中不能轻易实现。在工作。
3、JSP代表Java Server Pages,是1999年6月推出的一项新技术,是一种基于Java Servlet和整个Java系统的Web开发技术。JSP和ASP在技术上有很多相似之处,但是来自不同的技术规范组织,所以ASP一般只用在Windows NT/2000平台上,而JSP可以运行在85%以上的服务器上,并且是基于JSP技术的应用程序比基于 ASP 的应用程序更易于维护和管理,因此被许多人认为是未来最有前途的动态 网站 技术。
查看全部
htmlunit抓取动态网页(动态网页的缺点主要表现在下面两个方面:缺点
)
什么是动态网页?
动态网页不代表网页是动态的,如FLASH、GIF动画图片等JS动态图片。
所谓动态网页,是指通过ASP、PHP、Cold Fusion、CGI等程序动态生成的页面,网页中的大部分数据内容来自于网站所连接的数据库。这个页面实际上在网络空间中并不存在,所以有些人看到某个页面的内容,想下载,但自然找不到资源。动态网页只有在接收到用户的访问请求后才会生成并传输到用户的浏览器中,而且由于访问者可以实时获得他们想要的数据,动态网页往往很容易给人留下深刻的印象。此外,动态网页还具有易于维护和更新的优点。
一些细心的朋友会发现,很多网页文件的扩展名不再只是“.htm”,还有“.php”、“.asp”等,都是动态网页技术产生的。
比如一部电影网站的播放页面,一部电影网站有上千部电影,每部电影有不止一集。如果一部电影有播放页面,恐怕服务器空间放这些页面也是个问题。事实上,大多数电影网站只有一个播放页面。网页中的所有内容都是从数据库中获取的。有一天如果页面不合适,你可以只修改这样一个页面。您不需要修改每个单独的页面。静态页面。可见,动态网页占用的服务器空间较小,易于更新和维护,对管理员来说非常方便。
动态网页的缺点是什么?
动态网页的缺点主要表现在以下两个方面:
一、首先,动态网页在访问速度上并不占优势
动态网页首先获取用户的指令,然后网页将指令带到数据库中,找到该指令对应的数据,然后传输给服务器。用户看到网页。问题就出来了。每次访问网页时,都必须经过这样一个过程。这个过程至少需要几秒钟。当访问者数量较多时,页面的加载速度会变慢,这也是服务器的负担。; 从用户的角度来看,网页加载缓慢,没有响应。下次谁会访问你的 网站。
静态网页很简单。静态网页实际上是存在的,没有经过服务器编译,直接加载到客户端的浏览器中显示。
可以看出,动态网页在访问速度上并不占优势。
二、在搜索引擎中不占优势收录
上面我是从服务器和用户体验的角度讲的,下面从搜索引擎的角度讲收录。动态网页是用户输入指令后形成的页面。这个页面不存在,搜索引擎只会爬现成的,不会自己打字,网站在搜索引擎收录中没有优势。搜索引擎仍然更喜欢静态页面。
但是,搜索引擎正在不断改进。到目前为止,绝大多数搜索引擎都支持动态页面的爬取。
流行的动态网页新技术
早期的动态网页主要采用CGI技术,CGI即Common Gateway Interface(公共网关接口)。您可以使用不同的程序编写合适的 CGI 程序,例如 Visual Basic、Delphi 或 C/C++ 等。由于编程难度大、效率低、修改复杂,有逐渐被新技术取代的趋势。
以下是目前备受关注的一些比较流行的新技术:
1、PHP 是超文本预处理器,是当今 Internet 上最流行的脚本语言。它的语法借鉴了C、Java、PERL等语言,但只需要一点编程知识。可以使用 PHP 构建一个真正的交互式网站。它对HTML语言有很好的兼容性,用户可以直接在脚本代码中添加HTML标签,或者在HTML标签中添加脚本代码,更好地实现页面控制。PHP提供标准的数据库接口,数据库连接方便,兼容性强;扩展性强;可以进行面向对象的编程。
2、ASP 是活动服务器页面。它是微软开发的HTML(超文本标记语言)、脚本(Script)和CGI(通用网关接口)的组合。它不提供自己的特殊编程语言。,但允许用户使用许多现有的脚本语言编写 ASP 应用程序。ASP 编程比 HTML 更方便、更灵活。它运行在 Web 服务器端,然后将运行结果以 HTML 格式发送到客户端的浏览器。因此,ASP 比一般的脚本语言安全得多。
ASP最大的优点是可以收录HTML标签,还可以直接访问数据库,使用无限扩展的ActiveX控件,所以在编程上比HTML更方便、更灵活。通过使用ASP的组件和对象技术,用户可以直接使用ActiveX控件,调用对象方法和属性,以简单的方式实现强大的交互功能。缺点是因为基本上受限于微软的操作系统平台,主要的工作环境是微软的IIS应用程序结构,而且由于ActiveX对象具有平台特性,ASP技术在跨平台的Web服务器中不能轻易实现。在工作。
3、JSP代表Java Server Pages,是1999年6月推出的一项新技术,是一种基于Java Servlet和整个Java系统的Web开发技术。JSP和ASP在技术上有很多相似之处,但是来自不同的技术规范组织,所以ASP一般只用在Windows NT/2000平台上,而JSP可以运行在85%以上的服务器上,并且是基于JSP技术的应用程序比基于 ASP 的应用程序更易于维护和管理,因此被许多人认为是未来最有前途的动态 网站 技术。

htmlunit抓取动态网页(关于静态与动态的网页设计的全部内容设计为您整理)
网站优化 • 优采云 发表了文章 • 0 个评论 • 87 次浏览 • 2022-04-15 01:01
静态网页设计初期的网页都是静态的,例如只有文字、图形、图像等,用户只能被动地接受这些信息。那时,网页的核心是 HTML(一种标记语言)。写起来很方便,不需要特定的语言环境。它可以用任何编辑器编写。然后,您可以将其放在浏览器中以查看结果。现在HTML有很多专门的编辑软件,如FrontPage、Hotdog、Dreamweaver等。原来的Web是完全静态的,只提供大量的信息服务,没有服务器/客户端的概念。“静态”是指网站 的网页内容是“固定的”。当用户' 浏览器通过 Internet 的 HTTP(超文本传输协议)协议请求 Web 服务器提供网页内容,服务器只是将原本设计的静态 HTML 文档传输给用户的浏览器。其页面内容仅使用标准 HTML 代码。加上GIF格式的动态图片。如果 网站 维护者想要更新页面的内容,他们必须手动更新他们所有的 HTML 文档。这对于小的个人页面来说不是问题,但是对于非常大的商业 网站 逐页更改将是一件非常困难的事情。对于不能满足要求的技术,被替代是不变的趋势。动态网页设计 随着互联网的发展,目前的网页已不再只是静态的。人们更加关注动态网页。所以。什么是动态网页?简单来说,服务器通过HTML表单采集用户的信息,用户也可以通过网页获取自己想要的信息。图1-1所示的表格是一个表格。
如前所述,HTML 是编写网页的语言,但不能只用 HTML 编写动态网页。所以。这里有一些用于编写动态网页的语言。以上是武汉天湖设计小编为您整理的静态和动态网页设计的全部内容 查看全部
htmlunit抓取动态网页(关于静态与动态的网页设计的全部内容设计为您整理)
静态网页设计初期的网页都是静态的,例如只有文字、图形、图像等,用户只能被动地接受这些信息。那时,网页的核心是 HTML(一种标记语言)。写起来很方便,不需要特定的语言环境。它可以用任何编辑器编写。然后,您可以将其放在浏览器中以查看结果。现在HTML有很多专门的编辑软件,如FrontPage、Hotdog、Dreamweaver等。原来的Web是完全静态的,只提供大量的信息服务,没有服务器/客户端的概念。“静态”是指网站 的网页内容是“固定的”。当用户' 浏览器通过 Internet 的 HTTP(超文本传输协议)协议请求 Web 服务器提供网页内容,服务器只是将原本设计的静态 HTML 文档传输给用户的浏览器。其页面内容仅使用标准 HTML 代码。加上GIF格式的动态图片。如果 网站 维护者想要更新页面的内容,他们必须手动更新他们所有的 HTML 文档。这对于小的个人页面来说不是问题,但是对于非常大的商业 网站 逐页更改将是一件非常困难的事情。对于不能满足要求的技术,被替代是不变的趋势。动态网页设计 随着互联网的发展,目前的网页已不再只是静态的。人们更加关注动态网页。所以。什么是动态网页?简单来说,服务器通过HTML表单采集用户的信息,用户也可以通过网页获取自己想要的信息。图1-1所示的表格是一个表格。

如前所述,HTML 是编写网页的语言,但不能只用 HTML 编写动态网页。所以。这里有一些用于编写动态网页的语言。以上是武汉天湖设计小编为您整理的静态和动态网页设计的全部内容
htmlunit抓取动态网页(创建新浪网站实例通过表达式获取你想获取的标签元素)
网站优化 • 优采云 发表了文章 • 0 个评论 • 86 次浏览 • 2022-04-14 19:26
本文是我自己对技术的总结描述,不是很官方,可能会有一些问题,欢迎指正
1. 什么是 HtmlUnit?
HtmlUnit 是一个无界面的浏览器 Java 程序。它为 HTML 文档建模并提供用于调用页面、填写表单、单击链接等的 API。就像您在浏览器中所做的一样。HtmlUnit 有不错的 JavaScript 支持(不断改进),甚至可以使用相当复杂的 Ajax 库来模拟 Chrome、Firefox 或 Internet Explorer 等浏览器,具体取决于配置。HtmlUnit 通常用于测试或从网站检索信息。
2. 它能做什么?
它可以读取页面的所有元素
eg:现在有一个需求,客户给一个.chm描述文件,里面记录了表和字段的关系和注释。现在需要将评论添加到数据库中。首先可以通过工具将chm文件转换成html文件,然后我们可以通过爬取html文件来实现这个功能;
可以模拟用户点击,该功能可以实现登录、跳转页面等;
eg:现在有个需求,客户这边有一个系统,里面有很多数据,但是因为安全问题,我们的系统不能直接连接到它的数据库,所以现在需要显示客户的数据系统实时。做吗?您可以通过爬虫制作“适配器”。其一般原理是当用户点击我们的系统并点击查看“个人信息”时,我们的系统通过爬虫实时获取客户系统页面上的数据,并返回给我们的系统进行展示。.
3. 一般流程
需求:现在想通过Java程序爬取新浪新闻的一些内容
创建新浪实例网站通过表达式4.获取你要获取的标签元素项目代码
.pom 文件
net.sourceforge.htmlunit
htmlunit
2.23
复制代码
项目代码
public class XinLangNews {
public static void main(String args[]) throws Exception {
//创建web客户端
WebClient webClient = new WebClient(BrowserVersion.CHROME);//新建一个模拟谷歌Chrome浏览器的浏览器客户端对象
webClient.getOptions().setThrowExceptionOnScriptError(false);//当JS执行出错的时候是否抛出异常, 这里选择不需要
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);//当HTTP的状态非200时是否抛出异常, 这里选择不需要
webClient.getOptions().setActiveXNative(false);
webClient.getOptions().setCssEnabled(false);//是否启用CSS, 因为不需要展现页面, 所以不需要启用
webClient.getOptions().setJavaScriptEnabled(true); //很重要,启用JS
webClient.setAjaxController(new NicelyResynchronizingAjaxController());//很重要,设置支持AJAX
webClient.waitForBackgroundJavaScript(30000);//异步JS执行需要耗时,所以这里线程要阻塞30秒,等待异步JS执行结束
//设置链接地址,并返回网站实例
HtmlPage page = webClient.getPage("https://news.sina.com.cn/");
// 获取里边所有的span
List byXPath = (List) page.getByXPath("//*[@id=\"blk_cNav2_01\"]/div/a/span");
// 遍历所有span并打印出里边的内容
byXPath.forEach((x) -> {
System.out.println(x.getTextContent());
});
}
}
复制代码
注意:运行时控制台可能会出现很多错误,不要慌,这些错误是js在html页面报错
说明:下面三个步骤很重要,可以读取js和ajax动态加载的内容
webClient.getOptions().setJavaScriptEnabled(true); //很重要,启用JS
webClient.setAjaxController(new NicelyResynchronizingAjaxController());//很重要,设置支持AJAX
webClient.waitForBackgroundJavaScript(30000);//异步JS执行需要耗时,所以这里线程要阻塞30秒,等待异步JS执行结束,具体时间可以根据网页js加载效率动态调整,如果有页面元素获取不到的情况,可能是这里出问题了
复制代码
5. 奇怪的把戏
用HtmlUnit编写爬虫项目时,创建WebClient客户端基本是固定格式。最麻烦的是获取dom元素。这里我将介绍一种非常方便的获取dom元素的方法;这里我通过上述新浪新闻网站的介绍;
先打开chrome,然后回车,按F12打开开发者模式,找到你要获取的页面元素,此时在chrome的Elements模块中选择你要获取的元素,点击“右键”,选择复制-->Copy XPath ,此时获取该元素在整个页面中的xpath路径。图中“滚动”的xpath路径为//[@id="blk_cNav2_01"]/div/a[1]/span,因为我要获取所有span(即滚动、排名、政务等) .),因此您可以将上面复制的xpath路径重写为//[@id="blk_cNav2_01"]/div/a/span,并将a[1]更改为a。,你就完成了。您可以使用此方法快速准确地定位元素
6. 待续
比如Jsoup、WebClient、HttpClient都可以实现页面爬虫的效果,但是它们有什么区别呢?这个文章将在下一期公布;
本文使用 mdnice 排版 查看全部
htmlunit抓取动态网页(创建新浪网站实例通过表达式获取你想获取的标签元素)
本文是我自己对技术的总结描述,不是很官方,可能会有一些问题,欢迎指正
1. 什么是 HtmlUnit?
HtmlUnit 是一个无界面的浏览器 Java 程序。它为 HTML 文档建模并提供用于调用页面、填写表单、单击链接等的 API。就像您在浏览器中所做的一样。HtmlUnit 有不错的 JavaScript 支持(不断改进),甚至可以使用相当复杂的 Ajax 库来模拟 Chrome、Firefox 或 Internet Explorer 等浏览器,具体取决于配置。HtmlUnit 通常用于测试或从网站检索信息。
2. 它能做什么?
它可以读取页面的所有元素
eg:现在有一个需求,客户给一个.chm描述文件,里面记录了表和字段的关系和注释。现在需要将评论添加到数据库中。首先可以通过工具将chm文件转换成html文件,然后我们可以通过爬取html文件来实现这个功能;
可以模拟用户点击,该功能可以实现登录、跳转页面等;
eg:现在有个需求,客户这边有一个系统,里面有很多数据,但是因为安全问题,我们的系统不能直接连接到它的数据库,所以现在需要显示客户的数据系统实时。做吗?您可以通过爬虫制作“适配器”。其一般原理是当用户点击我们的系统并点击查看“个人信息”时,我们的系统通过爬虫实时获取客户系统页面上的数据,并返回给我们的系统进行展示。.
3. 一般流程
需求:现在想通过Java程序爬取新浪新闻的一些内容
创建新浪实例网站通过表达式4.获取你要获取的标签元素项目代码
.pom 文件
net.sourceforge.htmlunit
htmlunit
2.23
复制代码
项目代码
public class XinLangNews {
public static void main(String args[]) throws Exception {
//创建web客户端
WebClient webClient = new WebClient(BrowserVersion.CHROME);//新建一个模拟谷歌Chrome浏览器的浏览器客户端对象
webClient.getOptions().setThrowExceptionOnScriptError(false);//当JS执行出错的时候是否抛出异常, 这里选择不需要
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);//当HTTP的状态非200时是否抛出异常, 这里选择不需要
webClient.getOptions().setActiveXNative(false);
webClient.getOptions().setCssEnabled(false);//是否启用CSS, 因为不需要展现页面, 所以不需要启用
webClient.getOptions().setJavaScriptEnabled(true); //很重要,启用JS
webClient.setAjaxController(new NicelyResynchronizingAjaxController());//很重要,设置支持AJAX
webClient.waitForBackgroundJavaScript(30000);//异步JS执行需要耗时,所以这里线程要阻塞30秒,等待异步JS执行结束
//设置链接地址,并返回网站实例
HtmlPage page = webClient.getPage("https://news.sina.com.cn/");
// 获取里边所有的span
List byXPath = (List) page.getByXPath("//*[@id=\"blk_cNav2_01\"]/div/a/span");
// 遍历所有span并打印出里边的内容
byXPath.forEach((x) -> {
System.out.println(x.getTextContent());
});
}
}
复制代码
注意:运行时控制台可能会出现很多错误,不要慌,这些错误是js在html页面报错
说明:下面三个步骤很重要,可以读取js和ajax动态加载的内容
webClient.getOptions().setJavaScriptEnabled(true); //很重要,启用JS
webClient.setAjaxController(new NicelyResynchronizingAjaxController());//很重要,设置支持AJAX
webClient.waitForBackgroundJavaScript(30000);//异步JS执行需要耗时,所以这里线程要阻塞30秒,等待异步JS执行结束,具体时间可以根据网页js加载效率动态调整,如果有页面元素获取不到的情况,可能是这里出问题了
复制代码
5. 奇怪的把戏
用HtmlUnit编写爬虫项目时,创建WebClient客户端基本是固定格式。最麻烦的是获取dom元素。这里我将介绍一种非常方便的获取dom元素的方法;这里我通过上述新浪新闻网站的介绍;
先打开chrome,然后回车,按F12打开开发者模式,找到你要获取的页面元素,此时在chrome的Elements模块中选择你要获取的元素,点击“右键”,选择复制-->Copy XPath ,此时获取该元素在整个页面中的xpath路径。图中“滚动”的xpath路径为//[@id="blk_cNav2_01"]/div/a[1]/span,因为我要获取所有span(即滚动、排名、政务等) .),因此您可以将上面复制的xpath路径重写为//[@id="blk_cNav2_01"]/div/a/span,并将a[1]更改为a。,你就完成了。您可以使用此方法快速准确地定位元素
6. 待续
比如Jsoup、WebClient、HttpClient都可以实现页面爬虫的效果,但是它们有什么区别呢?这个文章将在下一期公布;
本文使用 mdnice 排版
htmlunit抓取动态网页(做前台页面设计会用到的工具与ASP的区别)
网站优化 • 优采云 发表了文章 • 0 个评论 • 76 次浏览 • 2022-04-13 15:18
如果你做前端页面设计,你会用到工具:firework、flash、ps、coreldraw。如果是做后台编程,会使用:asp、PHP等语言。环境调试好后,与ASP的区别1、不同的开发语言ASP仅限于使用脚本语言进行开发,容易导致代码混乱。允许用户选择和使用功能齐全的编程语言Framework。 2、运行机制不同。 ASP是一个解释和运行的编程框架,所以执行效率低。编译执行,提高程序效率。 3、开发方式ASP混合了界面设计和程序设计,维护难度大。将界面设计和程序设计分离到不同的文件中,提高了可重用性和可维护性。工作原理 浏览器向WEB服务器发送HTTP请求; WEB服务器解析HTTP请求,如果请求的网页文件名后缀为aspx,则程序;如果该程序之前没有执行过,则编译它,然后执行该程序;否则直接执行编译好的程序。获取 HTML 结果; WEB服务器将HTML结果作为HTTP响应发送回用户浏览器;客户端浏览器收到响应后,将 HTML 结果显示为 WEB 页面。运行环境需要安装以下软件: 框架静态页面和动态页面1、静态网页(1)概述:纯HTML格式网页,即.htm、.html、.shtml, .xml等后缀。
在HTML格式的网页上,还可以出现各种动态效果,比如GIF格式的动画、FLASH、滚动字幕等。这些“动态效果”只是视觉上的,这些“动态效果”都有HTML页面,仍然是静态网页。 (2)特点:①静态网页是预先编写好的,每个静态网页的内容在网站服务器上保持不变;②静态网页的内容比较稳定,所以很容易被搜索引擎检索;③静态网页没有数据库的支持,网站制作和维护的工作量比较大;④静态网页交互性较差,在功能上限制较大。< @2、动态网页(1)概述:动态网页不仅有HTML标签,还收录程序代码、连接数据库的网页。常见的动态网页后缀为.asp、. aspx、.jsp、.php等(2)特点:①动态网页的内容是在服务器上运行后生成的,不是预先写好的;②动态网页往往基于数据库技术;③动态网页交互性更强并使用动态网页技术网站可以实现更多功能,比如用户注册化,用户登录。 4dreamweaver中数据库的连接要创建一个动态网页,我们首先要把数据库(Access)和网页连接起来,这样我们在网页上就可以很轻松了。很容易调用数据库中的内容并在网页上显示。这在 Dreamweaver 中是如何实现的?有很多方法。
ESS数据库的几种方法:例如自定义连接一个客串的方法如下:选择“窗口菜单”->“数据库”,打开数据库面板,在弹出的窗口中选择“自定义连接字符串” -up “自定义连接” 在“字符串”对话框中,在连接名称框中输入“conn”,在连接字符串框中输入如下字符串“”Driver={essDriver(*.mdb)};DBQ=" &Server.MapPath("/myweb/xsda.mdb")”[1][2],注意不要出错。其中“/myweb/xsda.mdb”是站点中数据库的路径。在下方的“Dreamweaver 应连接”选项中选择“使用来自测试服务器的驱动程序”。输入完成后,点击旁边的“测试”按钮,如果弹出“连接脚本成功”对话框,则表示数据库连接成功。如果有错误,请检查您刚才输入的以下字符串是否正确。 5 特定页面制作 脚本连接成功后,接下来的工作就是创建特定页面。在制作特定页面之前,请务必 查看全部
htmlunit抓取动态网页(做前台页面设计会用到的工具与ASP的区别)
如果你做前端页面设计,你会用到工具:firework、flash、ps、coreldraw。如果是做后台编程,会使用:asp、PHP等语言。环境调试好后,与ASP的区别1、不同的开发语言ASP仅限于使用脚本语言进行开发,容易导致代码混乱。允许用户选择和使用功能齐全的编程语言Framework。 2、运行机制不同。 ASP是一个解释和运行的编程框架,所以执行效率低。编译执行,提高程序效率。 3、开发方式ASP混合了界面设计和程序设计,维护难度大。将界面设计和程序设计分离到不同的文件中,提高了可重用性和可维护性。工作原理 浏览器向WEB服务器发送HTTP请求; WEB服务器解析HTTP请求,如果请求的网页文件名后缀为aspx,则程序;如果该程序之前没有执行过,则编译它,然后执行该程序;否则直接执行编译好的程序。获取 HTML 结果; WEB服务器将HTML结果作为HTTP响应发送回用户浏览器;客户端浏览器收到响应后,将 HTML 结果显示为 WEB 页面。运行环境需要安装以下软件: 框架静态页面和动态页面1、静态网页(1)概述:纯HTML格式网页,即.htm、.html、.shtml, .xml等后缀。
在HTML格式的网页上,还可以出现各种动态效果,比如GIF格式的动画、FLASH、滚动字幕等。这些“动态效果”只是视觉上的,这些“动态效果”都有HTML页面,仍然是静态网页。 (2)特点:①静态网页是预先编写好的,每个静态网页的内容在网站服务器上保持不变;②静态网页的内容比较稳定,所以很容易被搜索引擎检索;③静态网页没有数据库的支持,网站制作和维护的工作量比较大;④静态网页交互性较差,在功能上限制较大。< @2、动态网页(1)概述:动态网页不仅有HTML标签,还收录程序代码、连接数据库的网页。常见的动态网页后缀为.asp、. aspx、.jsp、.php等(2)特点:①动态网页的内容是在服务器上运行后生成的,不是预先写好的;②动态网页往往基于数据库技术;③动态网页交互性更强并使用动态网页技术网站可以实现更多功能,比如用户注册化,用户登录。 4dreamweaver中数据库的连接要创建一个动态网页,我们首先要把数据库(Access)和网页连接起来,这样我们在网页上就可以很轻松了。很容易调用数据库中的内容并在网页上显示。这在 Dreamweaver 中是如何实现的?有很多方法。
ESS数据库的几种方法:例如自定义连接一个客串的方法如下:选择“窗口菜单”->“数据库”,打开数据库面板,在弹出的窗口中选择“自定义连接字符串” -up “自定义连接” 在“字符串”对话框中,在连接名称框中输入“conn”,在连接字符串框中输入如下字符串“”Driver={essDriver(*.mdb)};DBQ=" &Server.MapPath("/myweb/xsda.mdb")”[1][2],注意不要出错。其中“/myweb/xsda.mdb”是站点中数据库的路径。在下方的“Dreamweaver 应连接”选项中选择“使用来自测试服务器的驱动程序”。输入完成后,点击旁边的“测试”按钮,如果弹出“连接脚本成功”对话框,则表示数据库连接成功。如果有错误,请检查您刚才输入的以下字符串是否正确。 5 特定页面制作 脚本连接成功后,接下来的工作就是创建特定页面。在制作特定页面之前,请务必
htmlunit抓取动态网页(别的项目组什么项目突然心血来潮想研究一下爬虫、分析的简单原型)
网站优化 • 优采云 发表了文章 • 0 个评论 • 82 次浏览 • 2022-04-13 15:17
由于其他项目组都在做舆情预测项目,我只是手头没有项目,突然心血来潮想研究一个简单的爬虫原型和分析。网上这方面的资料很多,看得我眼花缭乱。对于我这样的新手,想做一个简单的爬虫程序,所以HttpClient + jsoup是个不错的选择。前者是用来管理请求的,后者是用来解析页面的,主要是后者的select语法和jquery很像,对我这个用js的人来说太方便了。
昨天和他们聊天时,他们使用了几个知名的开源框架。聊了几句,他们发现自己根本无法爬取动态网页,尤其是一些重要的数字,比如评论数和回复数。还有很多。我有一个大致的了解。比如TRS的爬虫需要为js调用编写js脚本,但分析量巨大。他们的技术人员告诉我们,如果他们匹配这样的模板,他们每天只能匹配2到3个。,更何况我们这些中途修士。碰巧是一个相当大的挑战,所以我昨天答应他们,看看他们是否能找到一个相对简单的解决方案,当然,不管效率如何。
举个简单的例子,如下图
“我有话要说”后面的1307是后载的,但这些数字往往对舆情分析更重要。
对需求有了大致的了解后,我们来分析如何解决它们。通常,我们对请求得到的响应中收录js代码和html元素,所以像jsoup这样的html解析器很难在这里利用,因为它所能得到的html,1307还没有生成。这时候就需要一个可以运行js的平台,运行js代码后的页面会被html解析,这样才能正确得到结果。
因为懒,一开始写脚本的方式被我抛弃了,因为分析一个页面太痛苦了,代码乱成一锅粥。看的太累了。所以我的首要任务是,为什么我不能让这个地址在某个浏览器中运行,然后将运行结果交给html解析器解析,那么整个问题就解决了。这样,我的临时解决方案是在爬虫服务器上打开一个后台浏览器,或者是有浏览器内核的程序,把url地址交给它去请求,然后从浏览器中取出页面的元素给它到 html 解析器进行解析以获取您想要的信息。
没错,最后我还是用 Selenium 来实现我在上一篇文章中提到的问题。我没有尝试其他任何东西。我只试过火狐引擎。整体效果我还是可以接受的。
继续昨天的话题,既然我们要实现上一篇提到的问题,就需要一个可以执行js代码的框架。我的首选是htmlunit,先简单介绍一下htmlunit。以下段落摘自互联网。
htmlunit 是一个开源的java页面分析工具。启动htmlunit后,会在底层启动一个非界面浏览器。用户可以指定浏览器类型:firefox、ie等,不指定则默认使用INTERNET_EXPLORER_7:
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
只需调用:
HtmlPage 页面 = webClient.getPage(url);
可以获取页面的 HtmlPage 表示,然后通过:
InputStream 是 = targetPage.getWebResponse().getContentAsStream()
可以获取页面的输入流,从而获取页面的源代码,对于网络爬虫项目非常有用。
当然,你也可以从page中获取更多的页面元素。
重要的是,HtmlUnit 支持执行:
page.executeJavaScript()
执行js后,返回一个ScriptResult对象,通过该对象可以获取执行js后的页面等信息。默认情况下,执行完js后,内部浏览器会进行页面跳转,跳转到执行完js后生成的新页面。如果js执行失败,则不会执行页面跳转。
最后可以通过page.executeJavaScript().getNewPage()获取执行的页面。也就是说,这里需要人工执行,这显然不符合我的初衷。另外可能是我水平太差了,爬新浪新闻的页面总是出错。根据上面查询的结果,最可能的错误原因是htmlunit在执行一些带参数的请求时,由于参数顺序或者编码问题,请求失败,报错。关键是,运行它后我没有得到我需要的结果。
然后我寻找另一种解决方案。这时,我找到了 SeleniumWebDriver,这是我需要的解决方案。
参考资料和例子,就可以开始使用了。示例代码如下。
<p> 1 File pathToBinary = new File("D:\Program Files (x86)\Mozilla Firefox\firefox.exe");
2 FirefoxBinary ffBinary = new FirefoxBinary(pathToBinary);
3 FirefoxProfile firefoxProfile = new FirefoxProfile();
4 FirefoxDriver driver = new FirefoxDriver(ffBinary,firefoxProfile);
5
6
7 driver.get("http://cq.qq.com/baoliao/detail.htm?294064");
8
9 ArrayList list = new ArrayList();
10 list.add("http://www.sina.com.cn");
11 list.add("http://www.sohu.com");
12 list.add("http://www.163.com");
13 list.add("http://www.qq.com");
14
15 long start,end;
16
17 for(int i=0;i 查看全部
htmlunit抓取动态网页(别的项目组什么项目突然心血来潮想研究一下爬虫、分析的简单原型)
由于其他项目组都在做舆情预测项目,我只是手头没有项目,突然心血来潮想研究一个简单的爬虫原型和分析。网上这方面的资料很多,看得我眼花缭乱。对于我这样的新手,想做一个简单的爬虫程序,所以HttpClient + jsoup是个不错的选择。前者是用来管理请求的,后者是用来解析页面的,主要是后者的select语法和jquery很像,对我这个用js的人来说太方便了。
昨天和他们聊天时,他们使用了几个知名的开源框架。聊了几句,他们发现自己根本无法爬取动态网页,尤其是一些重要的数字,比如评论数和回复数。还有很多。我有一个大致的了解。比如TRS的爬虫需要为js调用编写js脚本,但分析量巨大。他们的技术人员告诉我们,如果他们匹配这样的模板,他们每天只能匹配2到3个。,更何况我们这些中途修士。碰巧是一个相当大的挑战,所以我昨天答应他们,看看他们是否能找到一个相对简单的解决方案,当然,不管效率如何。
举个简单的例子,如下图
“我有话要说”后面的1307是后载的,但这些数字往往对舆情分析更重要。
对需求有了大致的了解后,我们来分析如何解决它们。通常,我们对请求得到的响应中收录js代码和html元素,所以像jsoup这样的html解析器很难在这里利用,因为它所能得到的html,1307还没有生成。这时候就需要一个可以运行js的平台,运行js代码后的页面会被html解析,这样才能正确得到结果。
因为懒,一开始写脚本的方式被我抛弃了,因为分析一个页面太痛苦了,代码乱成一锅粥。看的太累了。所以我的首要任务是,为什么我不能让这个地址在某个浏览器中运行,然后将运行结果交给html解析器解析,那么整个问题就解决了。这样,我的临时解决方案是在爬虫服务器上打开一个后台浏览器,或者是有浏览器内核的程序,把url地址交给它去请求,然后从浏览器中取出页面的元素给它到 html 解析器进行解析以获取您想要的信息。
没错,最后我还是用 Selenium 来实现我在上一篇文章中提到的问题。我没有尝试其他任何东西。我只试过火狐引擎。整体效果我还是可以接受的。
继续昨天的话题,既然我们要实现上一篇提到的问题,就需要一个可以执行js代码的框架。我的首选是htmlunit,先简单介绍一下htmlunit。以下段落摘自互联网。
htmlunit 是一个开源的java页面分析工具。启动htmlunit后,会在底层启动一个非界面浏览器。用户可以指定浏览器类型:firefox、ie等,不指定则默认使用INTERNET_EXPLORER_7:
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
只需调用:
HtmlPage 页面 = webClient.getPage(url);
可以获取页面的 HtmlPage 表示,然后通过:
InputStream 是 = targetPage.getWebResponse().getContentAsStream()
可以获取页面的输入流,从而获取页面的源代码,对于网络爬虫项目非常有用。
当然,你也可以从page中获取更多的页面元素。
重要的是,HtmlUnit 支持执行:
page.executeJavaScript()
执行js后,返回一个ScriptResult对象,通过该对象可以获取执行js后的页面等信息。默认情况下,执行完js后,内部浏览器会进行页面跳转,跳转到执行完js后生成的新页面。如果js执行失败,则不会执行页面跳转。
最后可以通过page.executeJavaScript().getNewPage()获取执行的页面。也就是说,这里需要人工执行,这显然不符合我的初衷。另外可能是我水平太差了,爬新浪新闻的页面总是出错。根据上面查询的结果,最可能的错误原因是htmlunit在执行一些带参数的请求时,由于参数顺序或者编码问题,请求失败,报错。关键是,运行它后我没有得到我需要的结果。
然后我寻找另一种解决方案。这时,我找到了 SeleniumWebDriver,这是我需要的解决方案。
参考资料和例子,就可以开始使用了。示例代码如下。
<p> 1 File pathToBinary = new File("D:\Program Files (x86)\Mozilla Firefox\firefox.exe");
2 FirefoxBinary ffBinary = new FirefoxBinary(pathToBinary);
3 FirefoxProfile firefoxProfile = new FirefoxProfile();
4 FirefoxDriver driver = new FirefoxDriver(ffBinary,firefoxProfile);
5
6
7 driver.get("http://cq.qq.com/baoliao/detail.htm?294064");
8
9 ArrayList list = new ArrayList();
10 list.add("http://www.sina.com.cn");
11 list.add("http://www.sohu.com");
12 list.add("http://www.163.com");
13 list.add("http://www.qq.com");
14
15 long start,end;
16
17 for(int i=0;i
htmlunit抓取动态网页(搜狗微信公众号更新公告(2015.03.23) )
网站优化 • 优采云 发表了文章 • 0 个评论 • 112 次浏览 • 2022-04-13 14:31
)
最后更新于 2018.1.3
只为自己留个记录
要添加的功能:
1.获取历史中的所有消息
2. 爬取10多条数据
3.公众号信息自定义抓取
下面是搜狗微信公众号搜索微信公众号的例子!
搜狗微信公众号作为分析入口:[此处填写公众号]&ie=utf8&sug=n&sug_type=
DEMO 中的完整 URL 为:%E6%AF%8F%E6%97%A5%E8%8A%82%E5%A5%8F&ie=utf8&sug=n&sug_type=
package cc.buckler.test;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.junit.Test;
import java.io.IOException;
public class TestData {
private String ENTRY_URL = "http://weixin.sogou.com/weixin ... %3B//入口地址
private String QUERY_WORD = "DOTA每日节奏";//查询参数
private String BASE_URL = "";//从入口进入公众号后的公众号地址
private String WE_CHAT_URL = "http://mp.weixin.qq.com";//微信公众号官方入口
private int NEW_MSG_ID = 0;//最新msgId
private int MSG_NUM = 20;//需要获取的数量
@Test
public void getData() {
String url = String.format(ENTRY_URL, QUERY_WORD);
//System.out.println(url);
WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setRedirectEnabled(true);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setTimeout(50000);
Document doc = null;
try {
//首先用jsoup获取搜狗入口公众号连接
doc = Jsoup.connect(url).get();
//System.out.println("doc:" + doc);
BASE_URL = doc.select("p a").attr("href");
//System.out.println(BASE_URL);
//使用htmlunit加载公众号文章列表
HtmlPage htmlPage = webClient.getPage(BASE_URL);
webClient.waitForBackgroundJavaScript(10000);
doc = Jsoup.parse(htmlPage.asXml());
//System.out.println("doc:" + doc);
//获取最新文章msgid,之后的循环用msgid-1
String lastMsgId = doc.select(".weui_media_box").attr("msgid");
NEW_MSG_ID = Integer.parseInt(lastMsgId);
//System.out.println(NEW_MSG_ID);
for (int i = NEW_MSG_ID; i >= NEW_MSG_ID - MSG_NUM; i--) {
String articalPrev = "#WXAPPMSG";
String articalId = articalPrev + i;
String h4 = articalId + " h4";
String weui_media_desc = articalId + " .weui_media_desc";
String weui_media_extra_info = articalId + " .weui_media_extra_info";
System.out.println(articalId);
String title = doc.select(h4).text();
System.out.println(title);
String detailUrl = doc.select(h4).attr("hrefs");//2018.1.3 ok
System.out.println(WE_CHAT_URL + detailUrl);
String note = doc.select(weui_media_desc).text();//2018.1.3 ok
if (note.compareToIgnoreCase("") == 0) {
continue;
}
System.out.println(note);
String releaseDate = doc.select(weui_media_extra_info).text().toString();//2018.1.3 ok
if (releaseDate.compareToIgnoreCase("") == 0) {
continue;
}
System.out.println(releaseDate);
}
webClient.close();
} catch (IOException e) {
e.printStackTrace();
webClient.close();
}
}
} 查看全部
htmlunit抓取动态网页(搜狗微信公众号更新公告(2015.03.23)
)
最后更新于 2018.1.3
只为自己留个记录
要添加的功能:
1.获取历史中的所有消息
2. 爬取10多条数据
3.公众号信息自定义抓取
下面是搜狗微信公众号搜索微信公众号的例子!
搜狗微信公众号作为分析入口:[此处填写公众号]&ie=utf8&sug=n&sug_type=
DEMO 中的完整 URL 为:%E6%AF%8F%E6%97%A5%E8%8A%82%E5%A5%8F&ie=utf8&sug=n&sug_type=
package cc.buckler.test;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.junit.Test;
import java.io.IOException;
public class TestData {
private String ENTRY_URL = "http://weixin.sogou.com/weixin ... %3B//入口地址
private String QUERY_WORD = "DOTA每日节奏";//查询参数
private String BASE_URL = "";//从入口进入公众号后的公众号地址
private String WE_CHAT_URL = "http://mp.weixin.qq.com";//微信公众号官方入口
private int NEW_MSG_ID = 0;//最新msgId
private int MSG_NUM = 20;//需要获取的数量
@Test
public void getData() {
String url = String.format(ENTRY_URL, QUERY_WORD);
//System.out.println(url);
WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setRedirectEnabled(true);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setTimeout(50000);
Document doc = null;
try {
//首先用jsoup获取搜狗入口公众号连接
doc = Jsoup.connect(url).get();
//System.out.println("doc:" + doc);
BASE_URL = doc.select("p a").attr("href");
//System.out.println(BASE_URL);
//使用htmlunit加载公众号文章列表
HtmlPage htmlPage = webClient.getPage(BASE_URL);
webClient.waitForBackgroundJavaScript(10000);
doc = Jsoup.parse(htmlPage.asXml());
//System.out.println("doc:" + doc);
//获取最新文章msgid,之后的循环用msgid-1
String lastMsgId = doc.select(".weui_media_box").attr("msgid");
NEW_MSG_ID = Integer.parseInt(lastMsgId);
//System.out.println(NEW_MSG_ID);
for (int i = NEW_MSG_ID; i >= NEW_MSG_ID - MSG_NUM; i--) {
String articalPrev = "#WXAPPMSG";
String articalId = articalPrev + i;
String h4 = articalId + " h4";
String weui_media_desc = articalId + " .weui_media_desc";
String weui_media_extra_info = articalId + " .weui_media_extra_info";
System.out.println(articalId);
String title = doc.select(h4).text();
System.out.println(title);
String detailUrl = doc.select(h4).attr("hrefs");//2018.1.3 ok
System.out.println(WE_CHAT_URL + detailUrl);
String note = doc.select(weui_media_desc).text();//2018.1.3 ok
if (note.compareToIgnoreCase("") == 0) {
continue;
}
System.out.println(note);
String releaseDate = doc.select(weui_media_extra_info).text().toString();//2018.1.3 ok
if (releaseDate.compareToIgnoreCase("") == 0) {
continue;
}
System.out.println(releaseDate);
}
webClient.close();
} catch (IOException e) {
e.printStackTrace();
webClient.close();
}
}
}
htmlunit抓取动态网页(这是视频怎么广告投放合js引擎来解决这个问题,怎么办 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 104 次浏览 • 2022-04-12 22:35
)
最近在写爬虫的时候,使用httpclient爬取一些网页出现了一些问题,即检索到的内容中含有大量的加密文本(通过javascript脚本),无法获取真实内容获得(即用浏览器打开网页)渲染的内容)。所以一般需要搭配短视频和js引擎来解决这个问题。经过搜索,我发现工具 htmlunit 可以提供帮助。在了解和使用的过程中,我发现这是一个非常强大的开源工具。虽然名气不如httpclient,但实力不容小觑。少八卦。可以从这里下载:/htmlunit/files/htmlunit/2.15/
String url="http://outofmemory.cn/";//想采集的网址
String refer="诚信通托管推广;http://open-open.com/";
URL link=new URL(url);
WebClient wc=new WebClient();
WebRequest request=new WebRequest(link);
request.setCharset("UTF-8");
request.setProxyHost("120.120.120.x");
request.setProxyPort(8080);
request.setAdditionalHeader("Referer", refer);//设置请求报文头里的refer字段
////设置请求报文头里的User-Agent字段
request.setAdditionalHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");
//wc.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");
//wc.addRequestHeader和request.setAdditionalHeader功能应该是一样的。选择一个即可。
//其他报文头字段可以根据需要添加
wc.getCookieManager().setCookiesEnabled(true);//开启cookie管理
wc.getOptions().setJavaScriptEnabled(true);//开启js解析。对于变态网页,这个是必须的
wc.getOptions().setCssEnabled(true);//开启css解析。对于变态网页,这个是必须的。
wc.getOptions().setThrowExceptionOnFailingStatusCode(false);
wc.getOptions().setThrowExceptionOnScriptError(false);
wc.getOptions().setTimeout(10000);
//设置cookie。如果你有cookie,可以在这里设置
Set cookies=null;
Iterator i = cookies.iterator();
while (i.hasNext())
{
wc.getCookieManager().addCookie(i.next());
}
//准备工作已经做好了
HtmlPage page=null;
page = wc.getPage(request);
if(page==null)
{
System.out.println("采集 "+url+" 失败!!!");
return ;
}
String content=page.asText();//网页内容保存在content里
if(content==null)
{
System.out.println("采集 "+url+" 失败!!!");
return ;
}
//搞定了
CookieManager CM = wc.getCookieManager(); //WC = Your WebClients name
Set cookies_ret = CM.getCookies();//返回的Cookie在这里,下次请求的时候可能可以用上啦。
查看全部
htmlunit抓取动态网页(这是视频怎么广告投放合js引擎来解决这个问题,怎么办
)
最近在写爬虫的时候,使用httpclient爬取一些网页出现了一些问题,即检索到的内容中含有大量的加密文本(通过javascript脚本),无法获取真实内容获得(即用浏览器打开网页)渲染的内容)。所以一般需要搭配短视频和js引擎来解决这个问题。经过搜索,我发现工具 htmlunit 可以提供帮助。在了解和使用的过程中,我发现这是一个非常强大的开源工具。虽然名气不如httpclient,但实力不容小觑。少八卦。可以从这里下载:/htmlunit/files/htmlunit/2.15/
String url="http://outofmemory.cn/";//想采集的网址
String refer="诚信通托管推广;http://open-open.com/";
URL link=new URL(url);
WebClient wc=new WebClient();
WebRequest request=new WebRequest(link);
request.setCharset("UTF-8");
request.setProxyHost("120.120.120.x");
request.setProxyPort(8080);
request.setAdditionalHeader("Referer", refer);//设置请求报文头里的refer字段
////设置请求报文头里的User-Agent字段
request.setAdditionalHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");
//wc.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");
//wc.addRequestHeader和request.setAdditionalHeader功能应该是一样的。选择一个即可。
//其他报文头字段可以根据需要添加
wc.getCookieManager().setCookiesEnabled(true);//开启cookie管理
wc.getOptions().setJavaScriptEnabled(true);//开启js解析。对于变态网页,这个是必须的
wc.getOptions().setCssEnabled(true);//开启css解析。对于变态网页,这个是必须的。
wc.getOptions().setThrowExceptionOnFailingStatusCode(false);
wc.getOptions().setThrowExceptionOnScriptError(false);
wc.getOptions().setTimeout(10000);
//设置cookie。如果你有cookie,可以在这里设置
Set cookies=null;
Iterator i = cookies.iterator();
while (i.hasNext())
{
wc.getCookieManager().addCookie(i.next());
}
//准备工作已经做好了
HtmlPage page=null;
page = wc.getPage(request);
if(page==null)
{
System.out.println("采集 "+url+" 失败!!!");
return ;
}
String content=page.asText();//网页内容保存在content里
if(content==null)
{
System.out.println("采集 "+url+" 失败!!!");
return ;
}
//搞定了
CookieManager CM = wc.getCookieManager(); //WC = Your WebClients name
Set cookies_ret = CM.getCookies();//返回的Cookie在这里,下次请求的时候可能可以用上啦。

htmlunit抓取动态网页(HtmlUnit+Jsoup另外遇到以下棘手问题(未解决)背景)
网站优化 • 优采云 发表了文章 • 0 个评论 • 82 次浏览 • 2022-04-11 15:17
HtmlUnit + Jsoup
另外遇到以下棘手问题(未解决)
背景
在开发爬虫用动态规则爬取数据的时候,遇到HtmlUnit登录后无法访问cookie的情况,网上的一系列文章都失效了;
HtmlUnit
可以理解为一个沙盒浏览器,会得到整个网页的最终显示代码(包括动态加载数据的js),人眼看到的就是你得到的
汤
只访问网页内容(不包括js执行后的动态内容),优点是可以通过jquery选择器提取元素,如#id、.class等htmlUnit只能提取document的原生js
问题描述
html单元代码
1/** HtmlUnit请求web页面 */
2 WebClient wc = new WebClient(BrowserVersion.CHROME);
3 wc.getOptions().setUseInsecureSSL(true);
4 wc.getOptions().setJavaScriptEnabled(true); // 启用JS解释器,默认为true
5 wc.getOptions().setCssEnabled(false); // 禁用css支持
6 wc.getOptions().setThrowExceptionOnScriptError(false); // js运行错误时,是否抛出异常
7 wc.getOptions().setTimeout(10 * 1000); // 设置连接超时时间 ,这里是10S。如果为0,则无限期等待
8 wc.waitForBackgroundJavaScript(10 * 1000); // 等待js后台执行30秒
9wc.getOptions().setDoNotTrackEnabled(false);
10//其他文章一贯的cookie设置方式-无效
11//wc.getCookieManager().addCookie(new Cookie("domain域名","JSESSIONID","11"));
12//改为以下方式
13wc.addCookie("Cookie value长串不需要切割",new URL("目标网址"),"domain域名");
14HtmlPage page = wc.getPage("目标网址");
15
16
另外遇到以下棘手问题(未解决)
<p>1//失败:通过改变支持ajax支持方式
2 wc.setAjaxControllr(new NicelyResynchronizingAjaxController());
3
4 //失败:循环判断内容,增加js-ajax执行时间
5 for (int i = 0; i 查看全部
htmlunit抓取动态网页(HtmlUnit+Jsoup另外遇到以下棘手问题(未解决)背景)
HtmlUnit + Jsoup
另外遇到以下棘手问题(未解决)
背景
在开发爬虫用动态规则爬取数据的时候,遇到HtmlUnit登录后无法访问cookie的情况,网上的一系列文章都失效了;
HtmlUnit
可以理解为一个沙盒浏览器,会得到整个网页的最终显示代码(包括动态加载数据的js),人眼看到的就是你得到的
汤
只访问网页内容(不包括js执行后的动态内容),优点是可以通过jquery选择器提取元素,如#id、.class等htmlUnit只能提取document的原生js
问题描述
html单元代码
1/** HtmlUnit请求web页面 */
2 WebClient wc = new WebClient(BrowserVersion.CHROME);
3 wc.getOptions().setUseInsecureSSL(true);
4 wc.getOptions().setJavaScriptEnabled(true); // 启用JS解释器,默认为true
5 wc.getOptions().setCssEnabled(false); // 禁用css支持
6 wc.getOptions().setThrowExceptionOnScriptError(false); // js运行错误时,是否抛出异常
7 wc.getOptions().setTimeout(10 * 1000); // 设置连接超时时间 ,这里是10S。如果为0,则无限期等待
8 wc.waitForBackgroundJavaScript(10 * 1000); // 等待js后台执行30秒
9wc.getOptions().setDoNotTrackEnabled(false);
10//其他文章一贯的cookie设置方式-无效
11//wc.getCookieManager().addCookie(new Cookie("domain域名","JSESSIONID","11"));
12//改为以下方式
13wc.addCookie("Cookie value长串不需要切割",new URL("目标网址"),"domain域名");
14HtmlPage page = wc.getPage("目标网址");
15
16
另外遇到以下棘手问题(未解决)
<p>1//失败:通过改变支持ajax支持方式
2 wc.setAjaxControllr(new NicelyResynchronizingAjaxController());
3
4 //失败:循环判断内容,增加js-ajax执行时间
5 for (int i = 0; i
htmlunit抓取动态网页( :我输入一个之前从来没搜索过的型号却没有数据返回)
网站优化 • 优采云 发表了文章 • 0 个评论 • 102 次浏览 • 2022-04-11 14:23
:我输入一个之前从来没搜索过的型号却没有数据返回)
问题
- - - - - - - - - - - - - 更新 - - - - - - - - - - - - ------
谢谢你的想法。我想通过分析网页的交互是否可以找到方法。我仔细查看了elements中的网页代码,发现搜索结果是通过AJAX返回的一个链接的内容,即()我用python爬取这个链接可以从中得到我想要的。但是我又遇到了一个问题:我在浏览器中搜索过设备型号,比如SC1894,python可以通过上面的链接爬取内容(浏览器也可以直接进入这个getup链接)。如果我输入一个以前从未搜索过的模型并且没有返回数据怎么办?在此之前我错过了什么吗?
----------------------原来的问题-------------- ---
最近在学习爬取动态网页,想咨询一下:
对比chrome F12的元素,我用下面的代码抓取的网页内容缺少了我想要的内容,比如
搜索结果后,我在网上搜索了内容。看来我有时间使用 JavaScript。我需要怎么做才能抓住它?我想征求意见。
import urllib.request
weburl = 'http://search.ickey.cn/?keyword=SC1894&num='
webheader = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = urllib.request.Request(url = weburl, headers = webheader)
webPage = urllib.request.urlopen(req)
data = webPage.read()
data = data.decode('UTF-8')
print(data)
解决方案
网页是动态生成的。在爬取页面数据之前,思路应该是想办法获取动态生成的网页内容。如果你想这样做,你可以使用 PhantomJS 先加载相应的网页,然后再加载。然后把好的内容扔给 Python,然后 Python 开始解析。
补充:
其实每个网站的爬取规则都不一样。如果你不使用无头浏览器(我上面提到的方法),那么在分析API的时候,一定要看清楚API请求当时收录的参数(最基础的),请求方法,是否携带一些具体的http标头等。 查看全部
htmlunit抓取动态网页(
:我输入一个之前从来没搜索过的型号却没有数据返回)

问题
- - - - - - - - - - - - - 更新 - - - - - - - - - - - - ------
谢谢你的想法。我想通过分析网页的交互是否可以找到方法。我仔细查看了elements中的网页代码,发现搜索结果是通过AJAX返回的一个链接的内容,即()我用python爬取这个链接可以从中得到我想要的。但是我又遇到了一个问题:我在浏览器中搜索过设备型号,比如SC1894,python可以通过上面的链接爬取内容(浏览器也可以直接进入这个getup链接)。如果我输入一个以前从未搜索过的模型并且没有返回数据怎么办?在此之前我错过了什么吗?
----------------------原来的问题-------------- ---
最近在学习爬取动态网页,想咨询一下:
对比chrome F12的元素,我用下面的代码抓取的网页内容缺少了我想要的内容,比如
搜索结果后,我在网上搜索了内容。看来我有时间使用 JavaScript。我需要怎么做才能抓住它?我想征求意见。
import urllib.request
weburl = 'http://search.ickey.cn/?keyword=SC1894&num='
webheader = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = urllib.request.Request(url = weburl, headers = webheader)
webPage = urllib.request.urlopen(req)
data = webPage.read()
data = data.decode('UTF-8')
print(data)
解决方案
网页是动态生成的。在爬取页面数据之前,思路应该是想办法获取动态生成的网页内容。如果你想这样做,你可以使用 PhantomJS 先加载相应的网页,然后再加载。然后把好的内容扔给 Python,然后 Python 开始解析。
补充:
其实每个网站的爬取规则都不一样。如果你不使用无头浏览器(我上面提到的方法),那么在分析API的时候,一定要看清楚API请求当时收录的参数(最基础的),请求方法,是否携带一些具体的http标头等。
htmlunit抓取动态网页(现实世界中的问题:我的应用托管在Heroku上)
网站优化 • 优采云 发表了文章 • 0 个评论 • 57 次浏览 • 2022-04-11 05:29
现实世界的问题:
我的应用程序托管在 Heroku 上,据我所知,Heroku 无法提供将无头(无 GUI)浏览器(例如 HTMLUnit)作为 Googlebot 运行的解决方案
生成 HTML 快照以索引我的 AJAX 内容。
我建议的解决方案:
如果您还没有,我建议您阅读 Google 的
“使 AJAX 应用程序可抓取
规格齐全”。
想象一下我有:
注意:Hash Bang (#!) 是 google
规范的一部分。
我想构建一个简单的“托管在 Google App Engine (GAE) 上”
Web 服务”,即:
接受 URL 参数,例如 ://#!tab=TabA&subtab=SubTab3 (URL 参数应该是 URLEncoded) 运行 HTMLUnit 到 #!tab=TabA&subtab=SubTab3 以在服务器上打开和运行客户端 JavaScript。一切完成后(或大约 45 秒后),HTMLUnit 返回到 DOM。返回的内容可以通过 JSON/JSONP 发回,或者将 URL 返回到生成并存储在 google 应用引擎服务器上的文件(用于基于文件的“缓存”结果)......这里欢迎提出建议。如果返回文件的 URL,则可以使用 CURL 获取源代码(也称为 HTML 快照)。
我的应用程序需要管理对...的调用,基本上:
捕获对 Googlebots %26subtab=SubTab3 的调用(googlebot 抓取工具会转义某些字符,例如 %26=&)。从后端向 ://#!tab=TabA&subtab=SubTab3 发送请求(URL 参数应为 URLEncoded),以将返回的 HTML 快照呈现到前端。谷歌索引内容,我们很高兴!
我没有使用 Google App Engine 或 Java 或 HTMLUnit 的经验。
我也许能弄清楚……如果可以的话,我会发布我的结果。
否则,我认为对于某人来说这是一个非常好的机会来写一个踢屁股的博客 文章 概述一个关于新手如何构建这样一个 Web 服务的分步指南。
这将向更多人介绍出色的(免费)Google App
引擎。毫无疑问,这也将鼓励更多地采用 Google 的可抓取 AJAX 内容规范……我们都可以从中受益!
随着 Google 的规范获得更多接受,设置无头浏览器的“障碍”将离开许多
开发者谷歌寻找答案!立即获得名望与荣耀的答案!(编辑:至少我会赞美你)。
@_chrisjacob 如果您想讨论解决方案,请在 Twitter 上联系我。 查看全部
htmlunit抓取动态网页(现实世界中的问题:我的应用托管在Heroku上)
现实世界的问题:
我的应用程序托管在 Heroku 上,据我所知,Heroku 无法提供将无头(无 GUI)浏览器(例如 HTMLUnit)作为 Googlebot 运行的解决方案
生成 HTML 快照以索引我的 AJAX 内容。
我建议的解决方案:
如果您还没有,我建议您阅读 Google 的
“使 AJAX 应用程序可抓取
规格齐全”。
想象一下我有:
注意:Hash Bang (#!) 是 google
规范的一部分。
我想构建一个简单的“托管在 Google App Engine (GAE) 上”
Web 服务”,即:
接受 URL 参数,例如 ://#!tab=TabA&subtab=SubTab3 (URL 参数应该是 URLEncoded) 运行 HTMLUnit 到 #!tab=TabA&subtab=SubTab3 以在服务器上打开和运行客户端 JavaScript。一切完成后(或大约 45 秒后),HTMLUnit 返回到 DOM。返回的内容可以通过 JSON/JSONP 发回,或者将 URL 返回到生成并存储在 google 应用引擎服务器上的文件(用于基于文件的“缓存”结果)......这里欢迎提出建议。如果返回文件的 URL,则可以使用 CURL 获取源代码(也称为 HTML 快照)。
我的应用程序需要管理对...的调用,基本上:
捕获对 Googlebots %26subtab=SubTab3 的调用(googlebot 抓取工具会转义某些字符,例如 %26=&)。从后端向 ://#!tab=TabA&subtab=SubTab3 发送请求(URL 参数应为 URLEncoded),以将返回的 HTML 快照呈现到前端。谷歌索引内容,我们很高兴!
我没有使用 Google App Engine 或 Java 或 HTMLUnit 的经验。
我也许能弄清楚……如果可以的话,我会发布我的结果。
否则,我认为对于某人来说这是一个非常好的机会来写一个踢屁股的博客 文章 概述一个关于新手如何构建这样一个 Web 服务的分步指南。
这将向更多人介绍出色的(免费)Google App
引擎。毫无疑问,这也将鼓励更多地采用 Google 的可抓取 AJAX 内容规范……我们都可以从中受益!
随着 Google 的规范获得更多接受,设置无头浏览器的“障碍”将离开许多
开发者谷歌寻找答案!立即获得名望与荣耀的答案!(编辑:至少我会赞美你)。
@_chrisjacob 如果您想讨论解决方案,请在 Twitter 上联系我。
htmlunit抓取动态网页(1.想要制作动态网页,首先需要了解动态语言制作的特征)
网站优化 • 优采云 发表了文章 • 0 个评论 • 74 次浏览 • 2022-04-09 02:06
1.要做动态网页,首先要了解动态网页的特点。动态网页的第一个特点是使用动态语言,如PHP、ASP、JSP等。以对应的动态语言为后缀,如.php、.asp等,我们称之为制作的网页这种动态语言动态网页。2.动态网页一般基于数据库技术。网页之所以是静态的和动态的,就是看数据是否能实时更新,而能够完成这项工作的正是数据库。交互,从而达到及时更新数据的目的,也大大减少了网站的维护工作。3.动态网页需要服务器的支持。双击以html结尾的文件可以正常打开。即使没有服务器,也不会影响浏览页面。但是动态网页不同,需要服务器的支持。同时,服务器也必须支持这种动态语言才能正常浏览。4.首先需要安装服务器,可以使用windows自带的iis服务器,当然也可以使用比较流行的apache服务器,这个需要根据自己的动态来决定语言,asp选择IIS,php选择apache(当然不是绝对的)。5.接下来是数据库的选择,也需要根据自己的动态语言来选择。如果你使用 ASP 动态语言,你可以选择 ACCESS 数据库。如果你选择PHP,那么你可以选择MYSQL数据库,当然还有其他的数据库选项,视情况而定。6.然后将动态语言和服务器数据库结合起来,不同的结合方式不同。7.上述过程也称为匹配环境,是实现动态网页的必要步骤。可以使用集成环境,windows下可以安装wamp,linux下可以安装xampp。都是一键安装,没有任何难度。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站 并且不同的组合以不同的方式组合。7.上述过程也称为匹配环境,是实现动态网页的必要步骤。可以使用集成环境,windows下可以安装wamp,linux下可以安装xampp。都是一键安装,没有任何难度。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站 并且不同的组合以不同的方式组合。7.上述过程也称为匹配环境,是实现动态网页的必要步骤。可以使用集成环境,windows下可以安装wamp,linux下可以安装xampp。都是一键安装,没有任何难度。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站 没有任何困难。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站 没有任何困难。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站 查看全部
htmlunit抓取动态网页(1.想要制作动态网页,首先需要了解动态语言制作的特征)
1.要做动态网页,首先要了解动态网页的特点。动态网页的第一个特点是使用动态语言,如PHP、ASP、JSP等。以对应的动态语言为后缀,如.php、.asp等,我们称之为制作的网页这种动态语言动态网页。2.动态网页一般基于数据库技术。网页之所以是静态的和动态的,就是看数据是否能实时更新,而能够完成这项工作的正是数据库。交互,从而达到及时更新数据的目的,也大大减少了网站的维护工作。3.动态网页需要服务器的支持。双击以html结尾的文件可以正常打开。即使没有服务器,也不会影响浏览页面。但是动态网页不同,需要服务器的支持。同时,服务器也必须支持这种动态语言才能正常浏览。4.首先需要安装服务器,可以使用windows自带的iis服务器,当然也可以使用比较流行的apache服务器,这个需要根据自己的动态来决定语言,asp选择IIS,php选择apache(当然不是绝对的)。5.接下来是数据库的选择,也需要根据自己的动态语言来选择。如果你使用 ASP 动态语言,你可以选择 ACCESS 数据库。如果你选择PHP,那么你可以选择MYSQL数据库,当然还有其他的数据库选项,视情况而定。6.然后将动态语言和服务器数据库结合起来,不同的结合方式不同。7.上述过程也称为匹配环境,是实现动态网页的必要步骤。可以使用集成环境,windows下可以安装wamp,linux下可以安装xampp。都是一键安装,没有任何难度。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站 并且不同的组合以不同的方式组合。7.上述过程也称为匹配环境,是实现动态网页的必要步骤。可以使用集成环境,windows下可以安装wamp,linux下可以安装xampp。都是一键安装,没有任何难度。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站 并且不同的组合以不同的方式组合。7.上述过程也称为匹配环境,是实现动态网页的必要步骤。可以使用集成环境,windows下可以安装wamp,linux下可以安装xampp。都是一键安装,没有任何难度。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站 没有任何困难。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站 没有任何困难。8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,即网站
htmlunit抓取动态网页(给出一个PHP动态生成HTML方法,极大降低服务器CPU负荷)
网站优化 • 优采云 发表了文章 • 0 个评论 • 53 次浏览 • 2022-04-08 00:29
最近在研究PHP的一些开发技术,发现PHP有很多ASP没有的优秀功能。它可以完成一些以前无法完成的功能,比如动态生成HTML静态页面,以减少服务器CPU的负载,提高用户访问速度。 .
我们知道PHP读取MYSQL动态显示,在流量大的情况下,会出现很多性能问题,如果租用别人的虚拟主机,CPU会因为CPU消耗过多而受限,导致无法访问网页 。这里我给出一个PHP动态生成HTML的方法,可以大大降低服务器CPU负载。
首先设置.htaccess文件,将动态调用的参数转换为静态HTML URL地址,例如将post目录下的文件转发到根目录下的wp-post.php文件,并添加语句类似于:
重写规则 ^post/([a-z0-9\-]+\.html)$wp-post.php?$1$2
然后修改wp-post.php文件,在文件开头添加如下PHP代码:
ob_start();
$qstring = isset($_SERVER["QUERY_STRING"]) ? $_SERVER["QUERY_STRING"] : "";
define("HTML_FILE",$_SERVER['DOCUMENT_ROOT']."/post/".$qstring);
如果(文件存在(HTML_FILE))
{
$lcft = filemtime(HTML_FILE);
if (($lcft + 3600) > time())//判断最后生成的HTML文件是否超过1小时,如果不是,直接输出文件内容
{
echo(file_get_contents(HTML_FILE));
退出(0);
}
}
在现有 PHP 代码之后,在当前代码末尾添加以下 PHP 代码:
define("HTMLMETA","");
$buffer = ob_get_flush();
$fp = fopen(HTML_FILE, "w");
如果 ($fp)
{
fwrite($fp, $buffer.HTMLMETA);
fclose($fp);
}
好的,然后查看您的静态 HTML 页面。如果页面末尾出现注释行,则表示静态 HTML 文件已成功创建。 查看全部
htmlunit抓取动态网页(给出一个PHP动态生成HTML方法,极大降低服务器CPU负荷)
最近在研究PHP的一些开发技术,发现PHP有很多ASP没有的优秀功能。它可以完成一些以前无法完成的功能,比如动态生成HTML静态页面,以减少服务器CPU的负载,提高用户访问速度。 .
我们知道PHP读取MYSQL动态显示,在流量大的情况下,会出现很多性能问题,如果租用别人的虚拟主机,CPU会因为CPU消耗过多而受限,导致无法访问网页 。这里我给出一个PHP动态生成HTML的方法,可以大大降低服务器CPU负载。
首先设置.htaccess文件,将动态调用的参数转换为静态HTML URL地址,例如将post目录下的文件转发到根目录下的wp-post.php文件,并添加语句类似于:
重写规则 ^post/([a-z0-9\-]+\.html)$wp-post.php?$1$2
然后修改wp-post.php文件,在文件开头添加如下PHP代码:
ob_start();
$qstring = isset($_SERVER["QUERY_STRING"]) ? $_SERVER["QUERY_STRING"] : "";
define("HTML_FILE",$_SERVER['DOCUMENT_ROOT']."/post/".$qstring);
如果(文件存在(HTML_FILE))
{
$lcft = filemtime(HTML_FILE);
if (($lcft + 3600) > time())//判断最后生成的HTML文件是否超过1小时,如果不是,直接输出文件内容
{
echo(file_get_contents(HTML_FILE));
退出(0);
}
}
在现有 PHP 代码之后,在当前代码末尾添加以下 PHP 代码:
define("HTMLMETA","");
$buffer = ob_get_flush();
$fp = fopen(HTML_FILE, "w");
如果 ($fp)
{
fwrite($fp, $buffer.HTMLMETA);
fclose($fp);
}
好的,然后查看您的静态 HTML 页面。如果页面末尾出现注释行,则表示静态 HTML 文件已成功创建。
htmlunit抓取动态网页(我们自己解析url数据访问你的api好了(组图) )
网站优化 • 优采云 发表了文章 • 0 个评论 • 84 次浏览 • 2022-04-07 17:03
)
最近会先抓取大量的数据并存储起来,然后再讨论现有的历史数据。其中,东方财富网有很多数据,其中之一就是机构研究的数据。
我们要抓取的是js生成的表格。
这种用js爬的网站可没那么简单。它基本上分为几种方法。一种是观察页面,有的有json数据,有的有js代码解析目标url;一是使用渲染工具;另一种是使用工具点击相关按钮抓取url进行进一步分析。
今天我们使用第三个。
我们希望爬取表格中的数据,但是仔细看html代码会发现,这其实是js生成的,下图是源代码截图。
这很尴尬,我该怎么办?让我们自己解析url数据来访问你的api。
我们用浏览器自带的解析功能试试吧。首先,我们打开网络,chrome内核好像是这样叫的。
然后我们点击第二页和第三页,观察js代码访问了哪些后台url。事实是这样
YnQNqDYj¶m=&sortRule=-1&sortType=0&rt=50585869
strLvpoP¶m=&sortRule=-1&sortType=0&rt=50585871
ggPyhcCU¶m=&sortRule=-1&sortType=0&rt=50585871
SjIkKWnA¶m=&sortRule=-1&sortType=0&rt=50585872
我们可以找到模式,本质上是改变paee后面的数字。至于最后一个数字,目前猜测是计数标记,在所有API中设置相同即可。
接下来,我们可以使用urllib来获取api后面的json内容,例如:
查看全部
htmlunit抓取动态网页(我们自己解析url数据访问你的api好了(组图)
)
最近会先抓取大量的数据并存储起来,然后再讨论现有的历史数据。其中,东方财富网有很多数据,其中之一就是机构研究的数据。
我们要抓取的是js生成的表格。
这种用js爬的网站可没那么简单。它基本上分为几种方法。一种是观察页面,有的有json数据,有的有js代码解析目标url;一是使用渲染工具;另一种是使用工具点击相关按钮抓取url进行进一步分析。
今天我们使用第三个。
我们希望爬取表格中的数据,但是仔细看html代码会发现,这其实是js生成的,下图是源代码截图。
这很尴尬,我该怎么办?让我们自己解析url数据来访问你的api。
我们用浏览器自带的解析功能试试吧。首先,我们打开网络,chrome内核好像是这样叫的。
然后我们点击第二页和第三页,观察js代码访问了哪些后台url。事实是这样
YnQNqDYj¶m=&sortRule=-1&sortType=0&rt=50585869
strLvpoP¶m=&sortRule=-1&sortType=0&rt=50585871
ggPyhcCU¶m=&sortRule=-1&sortType=0&rt=50585871
SjIkKWnA¶m=&sortRule=-1&sortType=0&rt=50585872
我们可以找到模式,本质上是改变paee后面的数字。至于最后一个数字,目前猜测是计数标记,在所有API中设置相同即可。
接下来,我们可以使用urllib来获取api后面的json内容,例如:
htmlunit抓取动态网页(你对动态网页制作过程感兴趣吗?自助建站系统)
网站优化 • 优采云 发表了文章 • 0 个评论 • 69 次浏览 • 2022-04-01 14:18
当今社会属于互联网时代,网站设计是互联网行业的重点,你对动态网页的创作过程感兴趣吗?下面小编就为大家带来网站设计和动态网页制作的全过程,希望大家喜欢。
网站设计制作全过程
一、准备域名、主机、自助建站系统。
1、 域源
① 从IDC服务商处购买,com域名约60/年;
②寻找免费二级域名,网上有一些网站提供免费二级域名;或者可以找认识的站长朋友找二级域名;
③在国外寻找免费的顶级域名,比如dot.tk的TK域名。注意:TK域名百度不会收录哦~或者在其他小国找一些免费域名。
2、主机源
① 使用自己的电脑配置相关的网络环境,并要求自己了解这方面的情况;
② 从IDC服务商处购买,简单方便,花钱购买服务即可;
③ 找一个免费的主机。国内外有很多IDC服务商提供免费主机(主要是推广自己的付费主机)。国内的免费主机,我用的最好的是主机房,其他的基本都是乱七八糟的。
3.自助建站系统
PageAdmincms(PageAdmin网站管理系统)
特点:基于开发,灵活易用,可扩展性强,PageAdmin是一个非常独特的系统。不使用主流的html模板进行设计,而是采用背景布局和框架组合设计,简单易用。可用性是pageadmin近年来一直处于cms第一阵营的原因。很多像我这样懒惰不愿意写html界面的用户都会非常喜欢。在企业、学校、政府网站这块基本是首选。
评论:我个人非常喜欢这个系统。我基本上从 2.1 到 3.0 都使用过。一路走来,功能不断给用户带来惊喜,自定义表单和自定义模型的设计非常好。如果您熟悉它,您可以使用该系统扩展许多功能。我用这个系统为一个客户做一个专业的物流管理系统。简而言之,这是一个具有良好基因的系统。如果您有兴趣,请下载它。快来亲自试试吧。
二、配置网站
1、登录域名管理面板,将域名解析到你的主机;
2、登录你的主机管理面板,绑定域名到主机;
3、将网站 源代码上传到您的主机。推荐使用ftp工具上传。如果您不懂外语,建议使用 8Uftp 工具。
三、安装网站源码(如果是简单的网页,这一步可以省略)
四、输入要访问的域名网站。以后可以根据自己的需要修改网站。
制作动态网页的全过程
1.要做动态网页,首先要了解动态网页的特点。动态网页的第一个特点是使用动态语言,如PHP、ASP、JSP等。以对应的动态语言为后缀,如.php、.asp等,我们称之为制作的网页这种动态语言动态网页。
2.动态网页一般基于数据库技术。网页之所以是静态的,是动态的,就是看数据是否能实时更新,而能够完成这项工作的是数据库。交互,从而达到及时更新数据的目的,也大大减少了网站的维护工作。
3.动态网页需要服务器的支持。双击以html结尾的文件可以正常打开。即使没有服务器,也不会影响浏览页面。但是动态网页不同,需要服务器的支持。同时,服务器也必须支持这种动态语言才能正常浏览。
4.首先需要安装服务器,可以使用windows自带的IIS服务器,当然也可以使用比较流行的apache服务器,这个需要根据自己的动态来决定语言,asp选择IIS,php选择apache(当然不是绝对的)。
5.接下来是数据库的选择,也需要根据自己的动态语言来选择。如果你使用ASP动态语言,那么你可以选择ACCESS数据库,如果你选择PHP,那么你可以选择MYSQL数据库,当然还有其他数据库选项,视情况而定。
6.然后将动态语言和服务器数据库结合起来,不同的结合方式不同。
7.上述过程也称为匹配环境,是实现动态网页的必要步骤。可以使用集成环境,windows下可以安装wamp,linux下可以安装xampp。都是一键安装,没有任何难度。
8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,也就是网站的根目录,还有以后存放网页的目录(当然可以改),然后新建一个以php结尾的文件,打开编辑后保存,输入localhost/刚刚创建的文件名在浏览器中,如果出现刚才写的字,就证明已经成功了。
创建个人的过程网站
1.写网站模板,首页模板,内容页,列表页等。
2.根据不同的cms系统(网站后端)调用模板中的数据。
3.测试服务器与各种浏览器的兼容性。
4.购买域名和服务器。
5.在线操作。
猜猜你还对什么感兴趣:
1.网站如何制作图片旋转效果
2.关于网页制作培训报告体验
3.如何在excel表格中制作动态图表
4.ps制作网页效果图教程
5.网页设计布局 查看全部
htmlunit抓取动态网页(你对动态网页制作过程感兴趣吗?自助建站系统)
当今社会属于互联网时代,网站设计是互联网行业的重点,你对动态网页的创作过程感兴趣吗?下面小编就为大家带来网站设计和动态网页制作的全过程,希望大家喜欢。

网站设计制作全过程
一、准备域名、主机、自助建站系统。
1、 域源
① 从IDC服务商处购买,com域名约60/年;
②寻找免费二级域名,网上有一些网站提供免费二级域名;或者可以找认识的站长朋友找二级域名;
③在国外寻找免费的顶级域名,比如dot.tk的TK域名。注意:TK域名百度不会收录哦~或者在其他小国找一些免费域名。
2、主机源
① 使用自己的电脑配置相关的网络环境,并要求自己了解这方面的情况;
② 从IDC服务商处购买,简单方便,花钱购买服务即可;
③ 找一个免费的主机。国内外有很多IDC服务商提供免费主机(主要是推广自己的付费主机)。国内的免费主机,我用的最好的是主机房,其他的基本都是乱七八糟的。
3.自助建站系统
PageAdmincms(PageAdmin网站管理系统)
特点:基于开发,灵活易用,可扩展性强,PageAdmin是一个非常独特的系统。不使用主流的html模板进行设计,而是采用背景布局和框架组合设计,简单易用。可用性是pageadmin近年来一直处于cms第一阵营的原因。很多像我这样懒惰不愿意写html界面的用户都会非常喜欢。在企业、学校、政府网站这块基本是首选。
评论:我个人非常喜欢这个系统。我基本上从 2.1 到 3.0 都使用过。一路走来,功能不断给用户带来惊喜,自定义表单和自定义模型的设计非常好。如果您熟悉它,您可以使用该系统扩展许多功能。我用这个系统为一个客户做一个专业的物流管理系统。简而言之,这是一个具有良好基因的系统。如果您有兴趣,请下载它。快来亲自试试吧。
二、配置网站
1、登录域名管理面板,将域名解析到你的主机;
2、登录你的主机管理面板,绑定域名到主机;
3、将网站 源代码上传到您的主机。推荐使用ftp工具上传。如果您不懂外语,建议使用 8Uftp 工具。
三、安装网站源码(如果是简单的网页,这一步可以省略)
四、输入要访问的域名网站。以后可以根据自己的需要修改网站。
制作动态网页的全过程
1.要做动态网页,首先要了解动态网页的特点。动态网页的第一个特点是使用动态语言,如PHP、ASP、JSP等。以对应的动态语言为后缀,如.php、.asp等,我们称之为制作的网页这种动态语言动态网页。
2.动态网页一般基于数据库技术。网页之所以是静态的,是动态的,就是看数据是否能实时更新,而能够完成这项工作的是数据库。交互,从而达到及时更新数据的目的,也大大减少了网站的维护工作。
3.动态网页需要服务器的支持。双击以html结尾的文件可以正常打开。即使没有服务器,也不会影响浏览页面。但是动态网页不同,需要服务器的支持。同时,服务器也必须支持这种动态语言才能正常浏览。
4.首先需要安装服务器,可以使用windows自带的IIS服务器,当然也可以使用比较流行的apache服务器,这个需要根据自己的动态来决定语言,asp选择IIS,php选择apache(当然不是绝对的)。
5.接下来是数据库的选择,也需要根据自己的动态语言来选择。如果你使用ASP动态语言,那么你可以选择ACCESS数据库,如果你选择PHP,那么你可以选择MYSQL数据库,当然还有其他数据库选项,视情况而定。
6.然后将动态语言和服务器数据库结合起来,不同的结合方式不同。
7.上述过程也称为匹配环境,是实现动态网页的必要步骤。可以使用集成环境,windows下可以安装wamp,linux下可以安装xampp。都是一键安装,没有任何难度。
8.安装完成后,找到安装目录(以wamp为例),双击后会找到一个www目录,也就是网站的根目录,还有以后存放网页的目录(当然可以改),然后新建一个以php结尾的文件,打开编辑后保存,输入localhost/刚刚创建的文件名在浏览器中,如果出现刚才写的字,就证明已经成功了。
创建个人的过程网站
1.写网站模板,首页模板,内容页,列表页等。
2.根据不同的cms系统(网站后端)调用模板中的数据。
3.测试服务器与各种浏览器的兼容性。
4.购买域名和服务器。
5.在线操作。
猜猜你还对什么感兴趣:
1.网站如何制作图片旋转效果
2.关于网页制作培训报告体验
3.如何在excel表格中制作动态图表
4.ps制作网页效果图教程
5.网页设计布局
htmlunit抓取动态网页(-scrapinghtmlunit使用htmlunit-的网页上的javascript办法)
网站优化 • 优采云 发表了文章 • 0 个评论 • 74 次浏览 • 2022-03-31 11:22
标签:javajavascriptscreen-scrapinghtmlunit
在使用 htmlunit 抓取网页时,我偶尔会注意到这些警告充斥着控制台输出。
Jul 24, 2011 5:12:59 PM com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter warning
WARNING: warning: message=[Calling eval() with anything other than a primitive string value
will simply return the value. Is this what you intended?] sourceName=[http://ad.doubleclick.net/adj/ ... 40%3F] line=[356] lineSource=[null] lineOffset=[0]
有没有办法让htmlunit忽略
javascript
就算了
再次,有没有办法让 htmlunit 只解释收录特定子字符串或匹配正则表达式的网页上的 javascript?
1 个回答:
答案 0 :( 得分:2)
您可以通过实现自己的 javascript 来删除不需要的 JavaScriptScriptPreProcessor。您的 ScriptPreProcessor 可以检测到您不想执行的 jsvascript,而不是将其从 网站 中删除。
我没有尝试过,但它可能会起作用。 查看全部
htmlunit抓取动态网页(-scrapinghtmlunit使用htmlunit-的网页上的javascript办法)
标签:javajavascriptscreen-scrapinghtmlunit
在使用 htmlunit 抓取网页时,我偶尔会注意到这些警告充斥着控制台输出。
Jul 24, 2011 5:12:59 PM com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter warning
WARNING: warning: message=[Calling eval() with anything other than a primitive string value
will simply return the value. Is this what you intended?] sourceName=[http://ad.doubleclick.net/adj/ ... 40%3F] line=[356] lineSource=[null] lineOffset=[0]
有没有办法让htmlunit忽略
javascript
就算了
再次,有没有办法让 htmlunit 只解释收录特定子字符串或匹配正则表达式的网页上的 javascript?
1 个回答:
答案 0 :( 得分:2)
您可以通过实现自己的 javascript 来删除不需要的 JavaScriptScriptPreProcessor。您的 ScriptPreProcessor 可以检测到您不想执行的 jsvascript,而不是将其从 网站 中删除。
我没有尝试过,但它可能会起作用。