
htmlunit抓取动态网页
htmlunit抓取动态网页(如何实现静态页面名字和动态页面的映射(图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 93 次浏览 • 2021-09-23 18:07
动态生成的网页在网站真实大规模网页的构建中不可或缺。然而,动态页面的名称(即其URL)通常缺乏明确的含义。例如,名为product的页面。ASP?Id=4不如名为/应用程序/洗碗机/Model3809.Htm页面很容易记住。介绍了如何实现静态页面名与动态页面名的映射
概述
除了静态页面名称具有更清晰含义的优势外,静态页面名称的另一个优势是搜索引擎可以为这些页面编制索引。大多数搜索引擎,如Alta Vista和Yahoo,都不会检索URL中带有问号的页面,因为它们担心进入无尽的链接迷宫。将动态页面名称转换为静态页面名称后,搜索引擎将对这些页面进行索引和分类,以便网站带来更多流量
要使用本文介绍的方法将动态名称转换为静态名称,必须使用Windows 2000和IIS5.0.IIS5.0的两个改进使我们能够实现这种转换:使用服务器的“自定义错误消息”功能。传输和使用服务器的能力。在ASP页面中传输。虽然IIS4.0它还支持用户定义的错误消息,但使用响应。重定向,这是无用的。因此,此方法需要IIS5.0.Response.redirect是无用的,因为搜索引擎不会跟随重定向
使用本文描述的方法,网站developers首先链接实际上不存在静态URL的页面。然后设置IIS服务器并告诉它使用指定的ASP页(404.ASP)来处理@ASP上的所有404错误网站.在这个404.在ASP页面中,原创URL被转换为正式的动态URL,由服务器执行。传输目标页面并将其返回到用户浏览器
假设以下URL:
当网站被域名替换时,URL将返回404错误。我们需要做的第一件事是使用专用的.ASP页面来处理所有这些404错误。这可以使用IIS5.0的“自定义错误消息”功能。设置此功能的过程如下:
● 在MMC中打开IIS服务器管理器
● 右击Web网站Node并选择属性
● 单击“自定义错误消息”页面
● 向下滚动直到找到404错误
● 双击404错误以打开“错误映射属性”对话框
● 将消息类型更改为URL
● 在URL框中输入“/”404.asp”
● 单击“确定”关闭窗口
现在404错误已经被删除404.ASP已处理。当IIS调用404.ASP page,它将提供导致404错误的URL,这对我们非常有用
错误处理页
接下来,我们创建一个用于处理错误的404.ASP page。要做的第一件事是获取导致404错误的页面名称。以下代码行从查询字符串中提取此页面的名称:
'获取页面名称
strQ=Request.ServerVariables(“查询字符串”)
%>
那么strq中什么是重要的呢?在上面的示例中,它应该是这样的:/applications/dishchiners/Kenmore/Model3809.htm。我们真正需要的是型号3809(产品型号),因为这是产品数据库中唯一的密钥。以下代码行根据产品型号查找产品ID(编号):
'计算产品模型
nIndex=InStrRev(strQ,“/”)
如果(nIndex>;0)Then
strModelNumber=右侧(strQ,Len(strQ)-nIndex)
strQ=左(strQ,nIndex-1)
如果结束
'从产品型号中删除.HTM后缀
如果((Mid(strPageName),Len(strPageName),1)=“m”)和_
(Mid(strPageName),Len(strPageName)_
(Mid(strPageName),Len(strPageName)_
(Mid(strPageName,(strPageName)-3,1)=“.”)然后
strModelNumber=左(strPageName,Len(strModelNumber)-4)
如果结束
'从产品数据库中查找产品编号
strSQL=“从产品中选择产品\u Id”_
&;“其中Product_Model=”&;strModelNumber&;“”
设置oRS=oConn.Execute(strSQL)
如果(不是oRS.EOF),则
lProductId=oRS(“产品Id”)
如果结束
%>
现在我们有了产品编号,在转换到正确的ASP页面之前必须保存它。我们无法通过server.transfer(这是IIS的限制)在查询字符串中传递产品编号,因此必须通过会话对象传递它
会话(“Id”)=lProductId
Server.Transfer(“/product.asp”)
%>
执行此页面时,浏览器地址栏中的内容如下:
由于使用了server.transfer,浏览器地址栏中的URL不会更改。同样,浏览器不需要再次与服务器交互,这与response.redirect不同
此外,请注意URL中的目录根本不存在。事实上,除服务器名称外,URL的其余部分根本不起作用。例如,以下URL将返回到同一页面
那么为什么要添加这么多目录呢?这些目录将提高搜索引擎对网站的评价。一些搜索引擎认为URL中的单词在搜索关键词时更重要,所以目录名非常重要
调用不存在的页面
我们已经讨论了将不存在的URL转换为有效的动态URL的技术。然而,为了使搜索引擎能够索引这些页面,我们还需要链接这些不存在的URL。换句话说,只有当我们链接Model3809.Htm页面,然后搜索引擎才能找到它
在过去,当链接此页面时,我们只需要按如下方式给出产品编号:“product.ASP?Id=4”。现在,让我们构造一个函数,以产品编号作为参数返回相应的URL
函数CreateProductURL(lProductId)
strSQL=“从产品中选择产品型号”,其中Product\u Id=“&;lProductId
设置oRS=oConn.Execute(strSQL)
如果(不是oRS.EOF),则
标准模型=oRS(“产品模型”)
如果结束
CreateProductURL=“/”&;strModel&;“.htm”
端函数
%>
现在,如果我们想添加一个URL,我们只需要按如下方式进行:
“>;洗碗机
在本例中,我们假设我们不知道产品型号名称,但我们必须查询数据库才能知道。然而,事实上,情况可能并非如此。我们知道产品型号名称,可以直接创建URL,而无需再次访问数据库
性能问题
本文中描述的方法将显著影响性能。首先,为了创建静态URL,它需要一个数据库调用。其次,为了从404的URL中获得正确的URL,它还需要添加一个额外的数据库调用。最后,两个server.Transfer需要大量开销
但是,一些性能问题可以通过Xcache()解决。Xcache可以将带有404错误的URL转换为正确的页面,并缓存信息以供后续请求使用
实例
请访问。这是应用此技术的一个示例。大多数分支页面(如餐厅和餐厅评论)都使用此技术,以便在搜索引擎中获得更高的评价。也使用Xcache
总结
使用IIS5.0自定义错误消息功能控制404个错误,可以为动态页面创建静态页面样式的URL。只要不需要为这些静态URL创建目录和文件,应该说创建有利于营销和搜索引擎排名的URL相对简单 查看全部
htmlunit抓取动态网页(如何实现静态页面名字和动态页面的映射(图))
动态生成的网页在网站真实大规模网页的构建中不可或缺。然而,动态页面的名称(即其URL)通常缺乏明确的含义。例如,名为product的页面。ASP?Id=4不如名为/应用程序/洗碗机/Model3809.Htm页面很容易记住。介绍了如何实现静态页面名与动态页面名的映射
概述
除了静态页面名称具有更清晰含义的优势外,静态页面名称的另一个优势是搜索引擎可以为这些页面编制索引。大多数搜索引擎,如Alta Vista和Yahoo,都不会检索URL中带有问号的页面,因为它们担心进入无尽的链接迷宫。将动态页面名称转换为静态页面名称后,搜索引擎将对这些页面进行索引和分类,以便网站带来更多流量
要使用本文介绍的方法将动态名称转换为静态名称,必须使用Windows 2000和IIS5.0.IIS5.0的两个改进使我们能够实现这种转换:使用服务器的“自定义错误消息”功能。传输和使用服务器的能力。在ASP页面中传输。虽然IIS4.0它还支持用户定义的错误消息,但使用响应。重定向,这是无用的。因此,此方法需要IIS5.0.Response.redirect是无用的,因为搜索引擎不会跟随重定向
使用本文描述的方法,网站developers首先链接实际上不存在静态URL的页面。然后设置IIS服务器并告诉它使用指定的ASP页(404.ASP)来处理@ASP上的所有404错误网站.在这个404.在ASP页面中,原创URL被转换为正式的动态URL,由服务器执行。传输目标页面并将其返回到用户浏览器
假设以下URL:
当网站被域名替换时,URL将返回404错误。我们需要做的第一件事是使用专用的.ASP页面来处理所有这些404错误。这可以使用IIS5.0的“自定义错误消息”功能。设置此功能的过程如下:
● 在MMC中打开IIS服务器管理器
● 右击Web网站Node并选择属性
● 单击“自定义错误消息”页面
● 向下滚动直到找到404错误
● 双击404错误以打开“错误映射属性”对话框
● 将消息类型更改为URL
● 在URL框中输入“/”404.asp”
● 单击“确定”关闭窗口
现在404错误已经被删除404.ASP已处理。当IIS调用404.ASP page,它将提供导致404错误的URL,这对我们非常有用
错误处理页
接下来,我们创建一个用于处理错误的404.ASP page。要做的第一件事是获取导致404错误的页面名称。以下代码行从查询字符串中提取此页面的名称:
'获取页面名称
strQ=Request.ServerVariables(“查询字符串”)
%>
那么strq中什么是重要的呢?在上面的示例中,它应该是这样的:/applications/dishchiners/Kenmore/Model3809.htm。我们真正需要的是型号3809(产品型号),因为这是产品数据库中唯一的密钥。以下代码行根据产品型号查找产品ID(编号):
'计算产品模型
nIndex=InStrRev(strQ,“/”)
如果(nIndex>;0)Then
strModelNumber=右侧(strQ,Len(strQ)-nIndex)
strQ=左(strQ,nIndex-1)
如果结束
'从产品型号中删除.HTM后缀
如果((Mid(strPageName),Len(strPageName),1)=“m”)和_
(Mid(strPageName),Len(strPageName)_
(Mid(strPageName),Len(strPageName)_
(Mid(strPageName,(strPageName)-3,1)=“.”)然后
strModelNumber=左(strPageName,Len(strModelNumber)-4)
如果结束
'从产品数据库中查找产品编号
strSQL=“从产品中选择产品\u Id”_
&;“其中Product_Model=”&;strModelNumber&;“”
设置oRS=oConn.Execute(strSQL)
如果(不是oRS.EOF),则
lProductId=oRS(“产品Id”)
如果结束
%>
现在我们有了产品编号,在转换到正确的ASP页面之前必须保存它。我们无法通过server.transfer(这是IIS的限制)在查询字符串中传递产品编号,因此必须通过会话对象传递它
会话(“Id”)=lProductId
Server.Transfer(“/product.asp”)
%>
执行此页面时,浏览器地址栏中的内容如下:
由于使用了server.transfer,浏览器地址栏中的URL不会更改。同样,浏览器不需要再次与服务器交互,这与response.redirect不同
此外,请注意URL中的目录根本不存在。事实上,除服务器名称外,URL的其余部分根本不起作用。例如,以下URL将返回到同一页面
那么为什么要添加这么多目录呢?这些目录将提高搜索引擎对网站的评价。一些搜索引擎认为URL中的单词在搜索关键词时更重要,所以目录名非常重要
调用不存在的页面
我们已经讨论了将不存在的URL转换为有效的动态URL的技术。然而,为了使搜索引擎能够索引这些页面,我们还需要链接这些不存在的URL。换句话说,只有当我们链接Model3809.Htm页面,然后搜索引擎才能找到它
在过去,当链接此页面时,我们只需要按如下方式给出产品编号:“product.ASP?Id=4”。现在,让我们构造一个函数,以产品编号作为参数返回相应的URL
函数CreateProductURL(lProductId)
strSQL=“从产品中选择产品型号”,其中Product\u Id=“&;lProductId
设置oRS=oConn.Execute(strSQL)
如果(不是oRS.EOF),则
标准模型=oRS(“产品模型”)
如果结束
CreateProductURL=“/”&;strModel&;“.htm”
端函数
%>
现在,如果我们想添加一个URL,我们只需要按如下方式进行:
“>;洗碗机
在本例中,我们假设我们不知道产品型号名称,但我们必须查询数据库才能知道。然而,事实上,情况可能并非如此。我们知道产品型号名称,可以直接创建URL,而无需再次访问数据库
性能问题
本文中描述的方法将显著影响性能。首先,为了创建静态URL,它需要一个数据库调用。其次,为了从404的URL中获得正确的URL,它还需要添加一个额外的数据库调用。最后,两个server.Transfer需要大量开销
但是,一些性能问题可以通过Xcache()解决。Xcache可以将带有404错误的URL转换为正确的页面,并缓存信息以供后续请求使用
实例
请访问。这是应用此技术的一个示例。大多数分支页面(如餐厅和餐厅评论)都使用此技术,以便在搜索引擎中获得更高的评价。也使用Xcache
总结
使用IIS5.0自定义错误消息功能控制404个错误,可以为动态页面创建静态页面样式的URL。只要不需要为这些静态URL创建目录和文件,应该说创建有利于营销和搜索引擎排名的URL相对简单
htmlunit抓取动态网页(何为Ajax动态网页,我想不用我多说了吧 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 154 次浏览 • 2021-09-23 02:02
)
什么是ajax动态网页,我不想让我多说,如果你甚至不知道Ajax是,那么你会去谷歌学习Ajax。有了,我将解释此页面作为抓取此页面的示例。 Web链接如下:
很明显,我们必须抓住的数据是
打开Google浏览器开发人员工具,我们会发现他实际上是用Ajax动态加载的,并且jsonp跨域模式返回,分析如图所示:
可以推断出页面部分信息通过JavaScript插入DOM。如果模拟HTTP请求获取Web信息,则只需获取Web信息,您得到的内容就不完整。 htmlunit可以做到。
好的,回到主题,也许你还是要听到一个HTMLUnit这个地方,也许你早点听到了,但我仍然认为是对最大权威的官方解释,我不会是无知的BB,看看图片:
总之,HTMLUnit实际上是一个测试工具,方便测试员执行功能测试,可以模拟常见的主流浏览器(如Google浏览器),Firefox浏览器,即浏览器的行为。不多胡说八道,我直接演示:
/**
* 上海证券交易所数据抓取测试
* @since 1.0
* @author Lanxiaowei@citic-finance.com
* @date 2015-8-27下午6:16:14
*
*/
public class ShangHaiStockTest {
public static void main(String[] args) throws Exception {
downloadListPage();
}
public static void downloadListPage() throws Exception {
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_38);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setActiveXNative(false);
webClient.getOptions().setAppletEnabled(false);
webClient.getOptions().setRedirectEnabled(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setUseInsecureSSL(false);
webClient.getOptions().setTimeout(10000000);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
int totalPage = 22;
boolean first = true;
HtmlPage page = null;
do {
if(first) {
page = (HtmlPage)webClient.getPage("http://www.sse.com.cn/assortme ... 6quot;);
FileUtils.writeFile(page.asXml(), "C:/shh/list/" + totalPage + ".html", "UTF-8", false);
first = false;
} else {
HtmlAnchor anchor = null;
if(totalPage == 22 -1) {
anchor = (HtmlAnchor) page.getHtmlElementById("xsgf_next");
} else {
anchor = (HtmlAnchor) page.getHtmlElementById("dateList_container_next");
}
page = (HtmlPage) anchor.click();
FileUtils.writeFile(page.asXml(), "C:/shh/list/" + totalPage + ".html", "UTF-8", false);
}
totalPage--;
} while(totalPage > 0);
//关闭模拟窗口
webClient.closeAllWindows();
}
}
关键点:
1. webclient.getOptions()。 setjavascripten(true);
启用JavaScript
2. webclient.setajaxcontroller(new nicelyresynchronizingajaxcontroller());
设置Ajax异步处理控制器以启用AJAX支持
3. webclient.getOptions()。 SetThrowExceptiononFailingStatuscode(false);
webclient.getOptions()。 setthrowexceptiononscripterror(false);
这两个句子很重要。当出现HTTP错误时,程序不会丢弃过程,后者意味着当JavaScript执行异常时,Java代码将直接抛出,程序被中断。
演示在演示代码中,如何通过单击“下一步”超链接获取每个页面的页面内容以获取页面内容,然后写入磁盘指定目录。程序非常简单,我希望抛出玉,所示的程序依赖罐包:
查看全部
htmlunit抓取动态网页(何为Ajax动态网页,我想不用我多说了吧
)
什么是ajax动态网页,我不想让我多说,如果你甚至不知道Ajax是,那么你会去谷歌学习Ajax。有了,我将解释此页面作为抓取此页面的示例。 Web链接如下:
很明显,我们必须抓住的数据是

打开Google浏览器开发人员工具,我们会发现他实际上是用Ajax动态加载的,并且jsonp跨域模式返回,分析如图所示:



可以推断出页面部分信息通过JavaScript插入DOM。如果模拟HTTP请求获取Web信息,则只需获取Web信息,您得到的内容就不完整。 htmlunit可以做到。
好的,回到主题,也许你还是要听到一个HTMLUnit这个地方,也许你早点听到了,但我仍然认为是对最大权威的官方解释,我不会是无知的BB,看看图片:

总之,HTMLUnit实际上是一个测试工具,方便测试员执行功能测试,可以模拟常见的主流浏览器(如Google浏览器),Firefox浏览器,即浏览器的行为。不多胡说八道,我直接演示:
/**
* 上海证券交易所数据抓取测试
* @since 1.0
* @author Lanxiaowei@citic-finance.com
* @date 2015-8-27下午6:16:14
*
*/
public class ShangHaiStockTest {
public static void main(String[] args) throws Exception {
downloadListPage();
}
public static void downloadListPage() throws Exception {
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_38);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setActiveXNative(false);
webClient.getOptions().setAppletEnabled(false);
webClient.getOptions().setRedirectEnabled(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setUseInsecureSSL(false);
webClient.getOptions().setTimeout(10000000);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
int totalPage = 22;
boolean first = true;
HtmlPage page = null;
do {
if(first) {
page = (HtmlPage)webClient.getPage("http://www.sse.com.cn/assortme ... 6quot;);
FileUtils.writeFile(page.asXml(), "C:/shh/list/" + totalPage + ".html", "UTF-8", false);
first = false;
} else {
HtmlAnchor anchor = null;
if(totalPage == 22 -1) {
anchor = (HtmlAnchor) page.getHtmlElementById("xsgf_next");
} else {
anchor = (HtmlAnchor) page.getHtmlElementById("dateList_container_next");
}
page = (HtmlPage) anchor.click();
FileUtils.writeFile(page.asXml(), "C:/shh/list/" + totalPage + ".html", "UTF-8", false);
}
totalPage--;
} while(totalPage > 0);
//关闭模拟窗口
webClient.closeAllWindows();
}
}
关键点:
1. webclient.getOptions()。 setjavascripten(true);
启用JavaScript
2. webclient.setajaxcontroller(new nicelyresynchronizingajaxcontroller());
设置Ajax异步处理控制器以启用AJAX支持
3. webclient.getOptions()。 SetThrowExceptiononFailingStatuscode(false);
webclient.getOptions()。 setthrowexceptiononscripterror(false);
这两个句子很重要。当出现HTTP错误时,程序不会丢弃过程,后者意味着当JavaScript执行异常时,Java代码将直接抛出,程序被中断。
演示在演示代码中,如何通过单击“下一步”超链接获取每个页面的页面内容以获取页面内容,然后写入磁盘指定目录。程序非常简单,我希望抛出玉,所示的程序依赖罐包:

htmlunit抓取动态网页(设计与内容指南网站应具有清晰的层次结构和文本链接)
网站优化 • 优采云 发表了文章 • 0 个评论 • 73 次浏览 • 2021-09-22 12:16
设计和内容指南
网站应该有一个明确的层次结构和文本链接。每个网页应至少为打开一个静态文本链接。文本链接与其他代码生成的链接不同,例如JavaScript。下面的“打印”不是由下面的文本链接实现的。
为用户提供网站 map,列出到网站重要零件的链接。如果网站映射上的链接超过或大约100,则需要将网站 map拆分为多个网页。
网站应该是实用且丰富的,Web文本应该清晰准确地表达沟通的内容。
您是否要使用用户使用哪些单词来查找网页,请确保网站确实收录这些文本。深入了解这一点,将使您受益。
尝试使用文本而不是图形来显示重要的名称,内容或链接。 Google爬网工具无法识别图表中收录的文本。特别是对于友谊链接,如果您要提供PR和排名,则您对文本链接非常重要。
确保标题和Alt标记属性的描述和表达式是准确的。记得是网页加上alt描述的图片,这是一个放置关键词的好地方。
检查链接是否损坏并确保HTML格式正确。请使用Google 网站 Administrator Tools查看您的网站链接,如果您损坏,请注意删除或更正。
如果您决定采用动态页面(即“(即)在URL中的字符),请注意,并非所有搜索引擎都可以抓住抓取静态网页的动态网页。缩短参数的长度,并减少参数的数量有助于动态页面。建议使用URL重写技术动态链接静态。
在合理的金额(小于100)内限制特定网页上的链接。正如本页,不超过100个内部链接和外部链接。
网站准备好后准备
链接其他相关网站到网站。那是找到友情链接。
提交网站 google,网址:http:// www。谷歌。 com / addurl。 HTML。
提交网站地图作为Google 网站 Administrator工具的一部分。谷歌使用您的网站地图了解网站的结构,并增加网页的抓取率。
确保应该了解您的网页的所有网站 网站已经在线。这是指向你的网站,你需要正常,不是伤害。
将您的网站提交到相关目录,例如,OpendirectoryProject和yahoo!,以及其他特定行业的专业网站 K14 网站。从中获悉:DMOZ - 打开目录 查看全部
htmlunit抓取动态网页(设计与内容指南网站应具有清晰的层次结构和文本链接)
设计和内容指南
网站应该有一个明确的层次结构和文本链接。每个网页应至少为打开一个静态文本链接。文本链接与其他代码生成的链接不同,例如JavaScript。下面的“打印”不是由下面的文本链接实现的。
为用户提供网站 map,列出到网站重要零件的链接。如果网站映射上的链接超过或大约100,则需要将网站 map拆分为多个网页。
网站应该是实用且丰富的,Web文本应该清晰准确地表达沟通的内容。
您是否要使用用户使用哪些单词来查找网页,请确保网站确实收录这些文本。深入了解这一点,将使您受益。
尝试使用文本而不是图形来显示重要的名称,内容或链接。 Google爬网工具无法识别图表中收录的文本。特别是对于友谊链接,如果您要提供PR和排名,则您对文本链接非常重要。
确保标题和Alt标记属性的描述和表达式是准确的。记得是网页加上alt描述的图片,这是一个放置关键词的好地方。
检查链接是否损坏并确保HTML格式正确。请使用Google 网站 Administrator Tools查看您的网站链接,如果您损坏,请注意删除或更正。
如果您决定采用动态页面(即“(即)在URL中的字符),请注意,并非所有搜索引擎都可以抓住抓取静态网页的动态网页。缩短参数的长度,并减少参数的数量有助于动态页面。建议使用URL重写技术动态链接静态。
在合理的金额(小于100)内限制特定网页上的链接。正如本页,不超过100个内部链接和外部链接。
网站准备好后准备
链接其他相关网站到网站。那是找到友情链接。
提交网站 google,网址:http:// www。谷歌。 com / addurl。 HTML。
提交网站地图作为Google 网站 Administrator工具的一部分。谷歌使用您的网站地图了解网站的结构,并增加网页的抓取率。
确保应该了解您的网页的所有网站 网站已经在线。这是指向你的网站,你需要正常,不是伤害。
将您的网站提交到相关目录,例如,OpendirectoryProject和yahoo!,以及其他特定行业的专业网站 K14 网站。从中获悉:DMOZ - 打开目录
htmlunit抓取动态网页(Java编写的代码:之后click(),我的问题)
网站优化 • 优采云 发表了文章 • 0 个评论 • 96 次浏览 • 2021-09-22 12:15
htmlUnit是一个伟大的Java库,允许您填写并在编程中提交Web表单。我目前正在保障在ASP中编写的一个相当旧的系统,而不是每月手动填写网络形式,但试图找到一种自动化整个任务的方法,因为我被遗忘了。这是一个表,它检索在一个月内采集的数据。到目前为止,这是我写的代码:
WebClient client = new WebClient();
HtmlPage page = client.getPage("http://urlOfTheWebsite.com/search.aspx");
HtmlForm form = page.getFormByName("aspnetForm");
HtmlSelect frMonth = form.getSelectByName("ctl00$cphContent$ddlStartMonth");
HtmlSelect frDay = form.getSelectByName("ctl00$cphContent$ddlStartDay");
HtmlSelect frYear = form.getSelectByName("ctl00$cphContent$ddlStartYear");
HtmlSelect toMonth = form.getSelectByName("ctl00$cphContent$ddlEndMonth");
HtmlSelect toDay = form.getSelectByName("ctl00$cphContent$ddlEndDay");
HtmlSelect toYear = form.getSelectByName("ctl00$cphContent$ddlEndYear");
HtmlCheckBoxInput games = form.getInputByName("ctl00$cphContent$chkListLottoGame$0");
HtmlSubmitInput submit = form.getInputByName("ctl00$cphContent$btnSearch");
frMonth.setSelectedAttribute("1", true);
frDay.setSelectedAttribute("1", true);
frYear.setSelectedAttribute("2012", true);
toMonth.setSelectedAttribute("1", true);
toDay.setSelectedAttribute("31", true);
toYear.setSelectedAttribute("2012", true);
games.setChecked(true);
submit.click();
单击()后,我应该等待确切的页面完成重新加载,因为某些表中有一个表,显示了我的搜索结果。然后,当加载页面时,我需要将其作为HTML文件下载(非常类似于“您喜欢的”浏览器中的页面),因为我将抓住数据来计算总和,我已经使用了JSoup完成了图书馆。
我的问题是:1.如何制作一个编程方式来完成HTMLUnit的加载? 2.如何将生成的网页编程为编程中的HTML文件?
我已经研究了HTMLUnit文档,找不到适合我的课程。 查看全部
htmlunit抓取动态网页(Java编写的代码:之后click(),我的问题)
htmlUnit是一个伟大的Java库,允许您填写并在编程中提交Web表单。我目前正在保障在ASP中编写的一个相当旧的系统,而不是每月手动填写网络形式,但试图找到一种自动化整个任务的方法,因为我被遗忘了。这是一个表,它检索在一个月内采集的数据。到目前为止,这是我写的代码:
WebClient client = new WebClient();
HtmlPage page = client.getPage("http://urlOfTheWebsite.com/search.aspx");
HtmlForm form = page.getFormByName("aspnetForm");
HtmlSelect frMonth = form.getSelectByName("ctl00$cphContent$ddlStartMonth");
HtmlSelect frDay = form.getSelectByName("ctl00$cphContent$ddlStartDay");
HtmlSelect frYear = form.getSelectByName("ctl00$cphContent$ddlStartYear");
HtmlSelect toMonth = form.getSelectByName("ctl00$cphContent$ddlEndMonth");
HtmlSelect toDay = form.getSelectByName("ctl00$cphContent$ddlEndDay");
HtmlSelect toYear = form.getSelectByName("ctl00$cphContent$ddlEndYear");
HtmlCheckBoxInput games = form.getInputByName("ctl00$cphContent$chkListLottoGame$0");
HtmlSubmitInput submit = form.getInputByName("ctl00$cphContent$btnSearch");
frMonth.setSelectedAttribute("1", true);
frDay.setSelectedAttribute("1", true);
frYear.setSelectedAttribute("2012", true);
toMonth.setSelectedAttribute("1", true);
toDay.setSelectedAttribute("31", true);
toYear.setSelectedAttribute("2012", true);
games.setChecked(true);
submit.click();
单击()后,我应该等待确切的页面完成重新加载,因为某些表中有一个表,显示了我的搜索结果。然后,当加载页面时,我需要将其作为HTML文件下载(非常类似于“您喜欢的”浏览器中的页面),因为我将抓住数据来计算总和,我已经使用了JSoup完成了图书馆。
我的问题是:1.如何制作一个编程方式来完成HTMLUnit的加载? 2.如何将生成的网页编程为编程中的HTML文件?
我已经研究了HTMLUnit文档,找不到适合我的课程。
htmlunit抓取动态网页(,ajax动态加载数据的网页并提取网页信息(组图) )
网站优化 • 优采云 发表了文章 • 0 个评论 • 76 次浏览 • 2021-09-22 12:13
)
对于采集的页面有几个:
1.网
2.动态网页(js,ajax动态加载数据)
3.需要模拟登录到采集网
4.加入的网</p
p3,4个解决方案和想法将陈述/p
p在随后的博客中/p
p现在只有1,2个解决方案和想法:/p
p一.网/p
p对于静态页面的采集解析方法! java,python提供了很多工具包或框架,如java httpclient,htmlUnit,jsoup,htmlparser等,python的urllib,urllib2,beautysoup,scrape等,没有细节,在线信息更多。/p
p二. news/p
p采集的动态网页,需要js,ajax动态加载,采集 data程序的那些分为两个:/p
p1.通过组装js,ajax请求,在js加载后模拟数据。/p
p2.调用浏览器内核,在获取源代码页面加载后,然后通过行解析源代码/p
p一个研究爬行动物的人必须有一些东西,有很多在线学习材料,而不是声明,只为文章/p
p写下这个条带/p
ptoolkit java,呼叫浏览器,但不是今天的焦点,今天的焦点是文章 @ @ @ @ @ @ 采集需要js,ajax动态加载的网页并提取Web信息(用采集微信公章号文章列列表作为一个例子)/p
p启动... /p
p1.在文章 list 采集项目(以下称为micro 采集)/p
ppre class="命令" name="code"scrapy startproject weixin/pre/p
p2.在蜘蛛目录中创建采集 spider文件/p
ppre class="python" name="code"vim weixinlist.py/pre/p
p写如下/p
ppre class="python" name="code"from weixin.items import WeixinItem
import sys
sys.path.insert(0,'..')
import scrapy
import time
from scrapy import Spider
class MySpider(Spider):
name = 'weixinlist'
allowed_domains = []
start_urls = [
'http://weixin.sogou.com/gzh?openid=oIWsFt5QBSP8mn4Jx2WSGw_rCNzQ',
]
download_delay = 1
print('start init....')
def parse(self, response):
sel=scrapy.Selector(response)
print('hello,world!')
print(response)
print(sel)
list=sel.xpath('//div[@class="txt-box"]/h4')
items=[]
for single in list:
data=WeixinItem()
title=single.xpath('a/text()').extract()
link=single.xpath('a/@href').extract()
data['title']=title
data['link']=link
if len(title)0:
print(title[0].encode('utf-8'))
print(link)
/pre/p
p3.添加到weixinitem类/p
p在项目中.py/p
p4.创建一个下载中间件下载ybkit.py在相同级别的项目.py,并将其写入以下代码:/p
ppre class="python" name="code"import spynner
import pyquery
import time
import BeautifulSoup
import sys
from scrapy.http import HtmlResponse
class WebkitDownloaderTest( object ):
def process_request( self, request, spider ):
# if spider.name in settings.WEBKIT_DOWNLOADER:
# if( type(request) is not FormRequest ):
browser = spynner.Browser()
browser.create_webview()
browser.set_html_parser(pyquery.PyQuery)
browser.load(request.url, 20)
try:
browser.wait_load(10)
except:
pass
string = browser.html
string=string.encode('utf-8')
renderedBody = str(string)
return HtmlResponse( request.url, body=renderedBody )/pre/p
p此代码是调用浏览器内核,在页面加载后获取源代码/p
p5.在setting.py文件中配置,声明下载和下载中间件/p
p在底部添加以下代码:/p
ppre class="python" name="code"#which spider should use WEBKIT
WEBKIT_DOWNLOADER=['weixinlist']
DOWNLOADER_MIDDLEWARES = {
'weixin.downloadwebkit.WebkitDownloaderTest': 543,
}
import os
os.environ["DISPLAY"] = ":0"/pre/p
p6.运运程序:/p
p运行命令:/p
ppre class="python" name="code"scrapy crawl weixinlist/pre/p
p运行结果:/p
ppre class="python" name="code"kevinflynndeMacBook-Pro:spiders kevinflynn$ scrapy crawl weixinlist
start init....
2015-07-28 21:13:55 [scrapy] INFO: Scrapy 1.0.1 started (bot: weixin)
2015-07-28 21:13:55 [scrapy] INFO: Optional features available: ssl, http11
2015-07-28 21:13:55 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'weixin.spiders', 'SPIDER_MODULES': ['weixin.spiders'], 'BOT_NAME': 'weixin'}
2015-07-28 21:13:55 [py.warnings] WARNING: :0: UserWarning: You do not have a working installation of the service_identity module: 'No module named service_identity'. Please install it from https://pypi.python.org/pypi/service_identity and make sure all of its dependencies are satisfied. Without the service_identity module and a recent enough pyOpenSSL to support it, Twisted can perform only rudimentary TLS client hostname verification. Many valid certificate/hostname mappings may be rejected.
2015-07-28 21:13:55 [scrapy] INFO: Enabled extensions: CloseSpider, TelnetConsole, LogStats, CoreStats, SpiderState
2015-07-28 21:13:55 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, WebkitDownloaderTest, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats
2015-07-28 21:13:55 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware
2015-07-28 21:13:55 [scrapy] INFO: Enabled item pipelines:
2015-07-28 21:13:55 [scrapy] INFO: Spider opened
2015-07-28 21:13:55 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2015-07-28 21:13:55 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023
QFont::setPixelSize: Pixel size = 0 (0)
2015-07-28 21:14:08 [scrapy] DEBUG: Crawled (200) GET http://weixin.sogou.com/gzh%3F ... rCNzQ (referer: None)
hello,world!
200 http://weixin.sogou.com/gzh%3F ... rCNzQ
Selector xpath=None data=u'htmlheadmeta http-equiv="X-UA-Compa'>
互联网协议入门
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=210032701&idx=1&sn=6b1fc2bc5d4eb0f87513751e4ccf610c&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
自己动手写贝叶斯分类器给图书分类
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=210013947&idx=1&sn=1f36ba5794e22d0fb94a9900230e74ca&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
不当免费技术支持的10种方法
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209998175&idx=1&sn=216106034a3b4afea6e67f813ce1971f&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
以 Python 为实例,介绍贝叶斯理论
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209998175&idx=2&sn=2f3dee873d7350dfe9546ab4a9323c05&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
我从腾讯那“偷了”3000万QQ用户数据,出了份很有趣的...
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209980651&idx=1&sn=11fd40a2dee5132b0de8d4c79a97dac2&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
如何用 Spark 快速开发应用?
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209820653&idx=2&sn=23712b78d82fb412e960c6aa1e361dd3&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
一起来写个简单的解释器(1)
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209797651&idx=1&sn=15073e27080e6b637c8d24b6bb815417&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
那个直接在机器码中改 Bug 的家伙
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209762756&idx=1&sn=04ae1bc3a366d358f474ac3e9a85fb60&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
把一个库开源,你该做些什么
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209762756&idx=2&sn=0ac961ffd82ead6078a60f25fed3c2c4&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
程序员的困境
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209696436&idx=1&sn=8cb55b03c8b95586ba4498c64fa54513&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
2015-07-28 21:14:08 [scrapy] INFO: Closing spider (finished)
2015-07-28 21:14:08 [scrapy] INFO: Dumping Scrapy stats:
{'downloader/response_bytes': 131181,
'downloader/response_count': 1,
'downloader/response_status_count/200': 1,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2015, 7, 28, 13, 14, 8, 958071),
'log_count/DEBUG': 2,
'log_count/INFO': 7,
'log_count/WARNING': 1,
'response_received_count': 1,
'scheduler/dequeued': 1,
'scheduler/dequeued/memory': 1,
'scheduler/enqueued': 1,
'scheduler/enqueued/memory': 1,
'start_time': datetime.datetime(2015, 7, 28, 13, 13, 55, 688111)}
2015-07-28 21:14:08 [scrapy] INFO: Spider closed (finished)
QThread: Destroyed while thread is still running
kevinflynndeMacBook-Pro:spiders kevinflynn$ 查看全部
htmlunit抓取动态网页(,ajax动态加载数据的网页并提取网页信息(组图)
)
对于采集的页面有几个:
1.网
2.动态网页(js,ajax动态加载数据)
3.需要模拟登录到采集网
4.加入的网</p
p3,4个解决方案和想法将陈述/p
p在随后的博客中/p
p现在只有1,2个解决方案和想法:/p
p一.网/p
p对于静态页面的采集解析方法! java,python提供了很多工具包或框架,如java httpclient,htmlUnit,jsoup,htmlparser等,python的urllib,urllib2,beautysoup,scrape等,没有细节,在线信息更多。/p
p二. news/p
p采集的动态网页,需要js,ajax动态加载,采集 data程序的那些分为两个:/p
p1.通过组装js,ajax请求,在js加载后模拟数据。/p
p2.调用浏览器内核,在获取源代码页面加载后,然后通过行解析源代码/p
p一个研究爬行动物的人必须有一些东西,有很多在线学习材料,而不是声明,只为文章/p
p写下这个条带/p
ptoolkit java,呼叫浏览器,但不是今天的焦点,今天的焦点是文章 @ @ @ @ @ @ 采集需要js,ajax动态加载的网页并提取Web信息(用采集微信公章号文章列列表作为一个例子)/p
p启动... /p
p1.在文章 list 采集项目(以下称为micro 采集)/p
ppre class="命令" name="code"scrapy startproject weixin/pre/p
p2.在蜘蛛目录中创建采集 spider文件/p
ppre class="python" name="code"vim weixinlist.py/pre/p
p写如下/p
ppre class="python" name="code"from weixin.items import WeixinItem
import sys
sys.path.insert(0,'..')
import scrapy
import time
from scrapy import Spider
class MySpider(Spider):
name = 'weixinlist'
allowed_domains = []
start_urls = [
'http://weixin.sogou.com/gzh?openid=oIWsFt5QBSP8mn4Jx2WSGw_rCNzQ',
]
download_delay = 1
print('start init....')
def parse(self, response):
sel=scrapy.Selector(response)
print('hello,world!')
print(response)
print(sel)
list=sel.xpath('//div[@class="txt-box"]/h4')
items=[]
for single in list:
data=WeixinItem()
title=single.xpath('a/text()').extract()
link=single.xpath('a/@href').extract()
data['title']=title
data['link']=link
if len(title)0:
print(title[0].encode('utf-8'))
print(link)
/pre/p
p3.添加到weixinitem类/p
p在项目中.py/p
p4.创建一个下载中间件下载ybkit.py在相同级别的项目.py,并将其写入以下代码:/p
ppre class="python" name="code"import spynner
import pyquery
import time
import BeautifulSoup
import sys
from scrapy.http import HtmlResponse
class WebkitDownloaderTest( object ):
def process_request( self, request, spider ):
# if spider.name in settings.WEBKIT_DOWNLOADER:
# if( type(request) is not FormRequest ):
browser = spynner.Browser()
browser.create_webview()
browser.set_html_parser(pyquery.PyQuery)
browser.load(request.url, 20)
try:
browser.wait_load(10)
except:
pass
string = browser.html
string=string.encode('utf-8')
renderedBody = str(string)
return HtmlResponse( request.url, body=renderedBody )/pre/p
p此代码是调用浏览器内核,在页面加载后获取源代码/p
p5.在setting.py文件中配置,声明下载和下载中间件/p
p在底部添加以下代码:/p
ppre class="python" name="code"#which spider should use WEBKIT
WEBKIT_DOWNLOADER=['weixinlist']
DOWNLOADER_MIDDLEWARES = {
'weixin.downloadwebkit.WebkitDownloaderTest': 543,
}
import os
os.environ["DISPLAY"] = ":0"/pre/p
p6.运运程序:/p
p运行命令:/p
ppre class="python" name="code"scrapy crawl weixinlist/pre/p
p运行结果:/p
ppre class="python" name="code"kevinflynndeMacBook-Pro:spiders kevinflynn$ scrapy crawl weixinlist
start init....
2015-07-28 21:13:55 [scrapy] INFO: Scrapy 1.0.1 started (bot: weixin)
2015-07-28 21:13:55 [scrapy] INFO: Optional features available: ssl, http11
2015-07-28 21:13:55 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'weixin.spiders', 'SPIDER_MODULES': ['weixin.spiders'], 'BOT_NAME': 'weixin'}
2015-07-28 21:13:55 [py.warnings] WARNING: :0: UserWarning: You do not have a working installation of the service_identity module: 'No module named service_identity'. Please install it from https://pypi.python.org/pypi/service_identity and make sure all of its dependencies are satisfied. Without the service_identity module and a recent enough pyOpenSSL to support it, Twisted can perform only rudimentary TLS client hostname verification. Many valid certificate/hostname mappings may be rejected.
2015-07-28 21:13:55 [scrapy] INFO: Enabled extensions: CloseSpider, TelnetConsole, LogStats, CoreStats, SpiderState
2015-07-28 21:13:55 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, WebkitDownloaderTest, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats
2015-07-28 21:13:55 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware
2015-07-28 21:13:55 [scrapy] INFO: Enabled item pipelines:
2015-07-28 21:13:55 [scrapy] INFO: Spider opened
2015-07-28 21:13:55 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2015-07-28 21:13:55 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023
QFont::setPixelSize: Pixel size = 0 (0)
2015-07-28 21:14:08 [scrapy] DEBUG: Crawled (200) GET http://weixin.sogou.com/gzh%3F ... rCNzQ (referer: None)
hello,world!
200 http://weixin.sogou.com/gzh%3F ... rCNzQ
Selector xpath=None data=u'htmlheadmeta http-equiv="X-UA-Compa'>
互联网协议入门
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=210032701&idx=1&sn=6b1fc2bc5d4eb0f87513751e4ccf610c&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
自己动手写贝叶斯分类器给图书分类
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=210013947&idx=1&sn=1f36ba5794e22d0fb94a9900230e74ca&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
不当免费技术支持的10种方法
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209998175&idx=1&sn=216106034a3b4afea6e67f813ce1971f&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
以 Python 为实例,介绍贝叶斯理论
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209998175&idx=2&sn=2f3dee873d7350dfe9546ab4a9323c05&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
我从腾讯那“偷了”3000万QQ用户数据,出了份很有趣的...
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209980651&idx=1&sn=11fd40a2dee5132b0de8d4c79a97dac2&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
如何用 Spark 快速开发应用?
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209820653&idx=2&sn=23712b78d82fb412e960c6aa1e361dd3&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
一起来写个简单的解释器(1)
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209797651&idx=1&sn=15073e27080e6b637c8d24b6bb815417&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
那个直接在机器码中改 Bug 的家伙
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209762756&idx=1&sn=04ae1bc3a366d358f474ac3e9a85fb60&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
把一个库开源,你该做些什么
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209762756&idx=2&sn=0ac961ffd82ead6078a60f25fed3c2c4&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
程序员的困境
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209696436&idx=1&sn=8cb55b03c8b95586ba4498c64fa54513&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
2015-07-28 21:14:08 [scrapy] INFO: Closing spider (finished)
2015-07-28 21:14:08 [scrapy] INFO: Dumping Scrapy stats:
{'downloader/response_bytes': 131181,
'downloader/response_count': 1,
'downloader/response_status_count/200': 1,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2015, 7, 28, 13, 14, 8, 958071),
'log_count/DEBUG': 2,
'log_count/INFO': 7,
'log_count/WARNING': 1,
'response_received_count': 1,
'scheduler/dequeued': 1,
'scheduler/dequeued/memory': 1,
'scheduler/enqueued': 1,
'scheduler/enqueued/memory': 1,
'start_time': datetime.datetime(2015, 7, 28, 13, 13, 55, 688111)}
2015-07-28 21:14:08 [scrapy] INFO: Spider closed (finished)
QThread: Destroyed while thread is still running
kevinflynndeMacBook-Pro:spiders kevinflynn$
htmlunit抓取动态网页( 环境搭建准备工具:pyton3.5安装Seleniuminstallpip3seleniumselenium)
网站优化 • 优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2021-09-22 12:12
环境搭建准备工具:pyton3.5安装Seleniuminstallpip3seleniumselenium)
Python+selenium+phantom JS抓取网页并动态加载内容
环境建设
准备工具:pyton3.5,硒,幻影
我的电脑已经安装好了python3.5
安装硒
pip3安装selenium
安装phantomjs
根据系统环境下载phantomjs。下载后,将phantomjs.exe解压缩到Python的脚本文件夹中
使用selenium+phantom JS实现简单爬虫
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get('http://www.baidu.com') #加载网页
data = driver.page_source #获取网页文本
driver.save_screenshot('1.png') #截图保存
print(data)
driver.quit()
硒+JS的几种使用方法
在请求头中设置用户代理
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
dcap = dict(DesiredCapabilities.PHANTOMJS) #设置useragent
dcap['phantomjs.page.settings.userAgent'] = ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0 ') #根据需要设置具体的浏览器信息
driver = webdriver.PhantomJS(desired_capabilities=dcap) #封装浏览器信息
driver.get('http://www.baidu.com') #加载网页
data = driver.page_source #获取网页文本
driver.save_screenshot('1.png') #截图保存
print(data)
driver.quit()
请求超时设置
webdriver类中有三种与时间相关的方法:
1.pageLoadTimeout设置加载整页的超时时间。完全加载意味着完全呈现完成,同时执行同步和异步脚本
2.setScriptTimeout设置异步脚本的超时
3.implicitlyWait确定对象的智能等待时间
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.set_page_load_timeout(5) #设置超时时间
driver.get('http://www.baidu.com')
print(driver.title)
driver.quit()
设置浏览器窗口大小
您调用启动的浏览器不是全屏的,这有时会影响我们的一些操作,因此我们可以设置全屏
driver.maximize u Window()#设置全屏
driver.set uu窗口大小('480','800')#将浏览器宽度设置为480,高度设置为800
元素定位
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.set_page_load_timeout(5)
driver.get('http://www.baidu.com')
try:
driver.get('http://www.baidu.com')
driver.find_element_by_id('kw') # 通过ID定位
driver.find_element_by_class_name('s_ipt') # 通过class属性定位
driver.find_element_by_name('wd') # 通过标签name属性定位
driver.find_element_by_tag_name('input') # 通过标签属性定位
driver.find_element_by_css_selector('#kw') # 通过css方式定位
driver.find_element_by_xpath("//input[@id='kw']") # 通过xpath方式定位
driver.find_element_by_link_text("贴吧") # 通过xpath方式定位
print(driver.find_element_by_id('kw').tag_name ) # 获取标签的类型
except Exception as e:
print(e)
driver.quit()
向前或向后操作浏览器
from selenium import webdriver
driver = webdriver.PhantomJS()
try:
driver.get('http://www.baidu.com') #访问百度首页
driver.save_screenshot('1.png')
driver.get('http://www.sina.com.cn') #访问新浪首页
driver.save_screenshot('2.png')
driver.back() #回退到百度首页
driver.save_screenshot('3.png')
driver.forward() #前进到新浪首页
driver.save_screenshot('4.png')
except Exception as e:
print(e)
driver.quit()
以下是文章关于Python+selenium+phantom JS爬行网页以动态加载内容的介绍。有关Python phantom JS爬行内容的更多信息,请搜索我们之前的文章或继续浏览下面的相关文章页面。我希望你将来会支持我们
时间:2020年2月24日
Python爬虫selenium和phantom JS使用方法解析
1.selenum:构建第三方库。它可以使浏览器完成自动操作2.environment2.1安装:PIP安装selenium2.2获取浏览器驱动程序的下载地址:浏览器版本和驱动程序版本之间的对应表:chromedriver版本支持的chrome版本v2.46 v71-73v2.45
Python爬虫程序使用selenium&;加;Phantom JS抓取Ajax和动态HTML内容
1.introduction在python web爬虫内容提取器中,我们详细解释了核心组件:可插入内容提取器类gsextractor。本文记录了在确定GSR萃取器技术路线时所做的程序设计实验。这是第二部分,实验的第一部分使用XSLT一次性提取静态web内容并将其转换为XML格式,留下了一个问题:如何提取由JavaScript管理的动态内容?所以本文将回答这个问题2.提取动态内容的技术组件。在上一篇文章中,python使用XSLT提取网页数据。要提取的内容直接从网页的源代码中获取。但是,有些Ajax
解释硒和;加;幻影&;加;Python简单地实现了crawler的功能
Selenium一.introduction Selenium是一种用于测试web应用程序自动化程序的工具。测试直接在浏览器中运行,就像真实用户一样。Selenium 2支持驱动真实浏览器(firfoxdriver、iternetexplorerdriver、opera驱动程序、chromedriver),Selenium 2支持驱动非接口浏览器(htmlunit、phantom JS)二.安装windows的第一种方法是下载源代码、安装和下载地址(
Python&;plus;selenium&;plus;phantomjs实现了网页模拟登录和屏幕截图&LPAR;Windows环境&rPar的功能
Python是一种跨平台的计算机编程语言,可以在windows.mac和各种Linux/Unix系统上运行。它是一种面向对象的动态类型语言,最初设计用于编写自动脚本(shell),随着版本的不断更新和新语言功能的增加,越来越多的被用于独立开发。对于大型项目的开发,请访问Python官网下载并安装。在安装过程中,请检查PIP(Python软件包管理工具)安装Python后,打开命令行工具CMD并输入
Python实现了基于phantomjs的图片导入
基于phantomjs的自动化将出现1.flash2.有些基于视图的按钮无法单击,有些按钮是基于flash的(尤其是上载按钮)。Browser.find_element_by_xpath(“./*[@name='swfuload_0'])。Click()#单击上载按钮睡眠(2)AutoIT.Control_set_text(“,”[类:编辑;实例:1]“,Tupian)#上传
Python使用phantomjs屏幕截图网页的方法
示例如下:#!/usr/bin/Python#-*-编码:utf8-*-来自selenium导入webdriver导入OS Driver1=webdriver.Phantom JS(可执行文件路径='/usr/local/bin/Phantom JS')driver1.get(“”)数据=driver1.titledriver1.save_屏幕截图('c
Phantom JS获取呈现的JS网页(Python代码)
最近我需要抓取一个网站,但是页面是在JS渲染后生成的,普通的抓取框架不确定,所以我想用phantomjs来构建一个代理,Python调用phantomjs,似乎没有现成的第三方库(如果有,请通知编辑),我走来走去,发现只有pyspider提供现成的解决方案。经过一次简单的尝试,我觉得pyspider更像是新手的爬行工具,就像一个老处女,有时一丝不苟,有时喋喋不休。轻量级的小玩意应该更受欢迎。我也有一点自私。我可以将它们与我最喜欢的漂亮的东西一起使用汤而不是学习pyquery(pyspide
Python爬虫图像延迟加载技术selenium和phantom JS解析
一.什么是图片的延迟加载?-案例分析:抓取网站管理员材料#!/usr/bin/env Python#-*-编码:UTF-8-*-如果uName==“main”:url=''headers={'用户年龄,则从lxml导入etree导入请求
JS镜像延迟加载技术的实现过程分析
Lazy load技术Lazy load是前端优化的一种有效方式,它极大地改善了用户体验。图片一直是页面加载中的一个很大的流氓。现在图片的大小通常是几兆字节,远远大于代码的大小。原则:页面加载后,只有显示文档的可见区域,其他区域不显示。当用户滚动页面时,判断该区域的位置,生成img标记,并让用户将所使用的相关技术添加到可见区域:向img添加属性(例如数据SRC),将图片的地址分配给他,以便生成img标记,然后将数据SRC的值分配给img SRC(通过dataset.SRC或getattrib)
JS前端实现了两种延迟加载图片的方式&LPAR;lazload&rPar
在实际的项目开发中,我们经常会遇到这样的场景:一个页面上有很多图片,第一个屏幕上大约有一两张图片,所以我们必须一次加载所有图片吗?显然,这很愚蠢,这不仅影响页面渲染速度,而且浪费带宽。这就是我们通常所说的第一个屏幕加载,这是技术现实中使用的技术。想法是惰性地加载图像——将其加载到可见区域。想法:用数据XX替换页面中的所有img属性SRC属性。当页面滚动直到图像出现在可见区域时,使用js获取图像的数据XX值并分配它向Src.About各种宽度和高度:页面可见区域的宽度:document.body.clien
用JavaScript实现图片延迟加载插件的方法
序言在网络上的主要论坛中,特别是网站某些图片类型中,加载图片时采用了一种称为延迟加载的方法。具体来说,当请求页面时,只加载可视区域中的图片,而不加载其他部分中的图片。这些图片只有在出现时才会动态加载r在可视区域,为了节省网络带宽和提高效率,初始加载的速度和具体实现技术并不复杂,下面分别介绍。延迟加载web图像是读取img元素,获取数据SRC(或其他属性名称)的值属性,并给出img SRC,从而实现图像的动态加载机制。这里需要注意的是,img处于初始阶段 查看全部
htmlunit抓取动态网页(
环境搭建准备工具:pyton3.5安装Seleniuminstallpip3seleniumselenium)
Python+selenium+phantom JS抓取网页并动态加载内容
环境建设
准备工具:pyton3.5,硒,幻影
我的电脑已经安装好了python3.5
安装硒
pip3安装selenium
安装phantomjs
根据系统环境下载phantomjs。下载后,将phantomjs.exe解压缩到Python的脚本文件夹中
使用selenium+phantom JS实现简单爬虫
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get('http://www.baidu.com') #加载网页
data = driver.page_source #获取网页文本
driver.save_screenshot('1.png') #截图保存
print(data)
driver.quit()
硒+JS的几种使用方法
在请求头中设置用户代理
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
dcap = dict(DesiredCapabilities.PHANTOMJS) #设置useragent
dcap['phantomjs.page.settings.userAgent'] = ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0 ') #根据需要设置具体的浏览器信息
driver = webdriver.PhantomJS(desired_capabilities=dcap) #封装浏览器信息
driver.get('http://www.baidu.com') #加载网页
data = driver.page_source #获取网页文本
driver.save_screenshot('1.png') #截图保存
print(data)
driver.quit()
请求超时设置
webdriver类中有三种与时间相关的方法:
1.pageLoadTimeout设置加载整页的超时时间。完全加载意味着完全呈现完成,同时执行同步和异步脚本
2.setScriptTimeout设置异步脚本的超时
3.implicitlyWait确定对象的智能等待时间
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.set_page_load_timeout(5) #设置超时时间
driver.get('http://www.baidu.com')
print(driver.title)
driver.quit()
设置浏览器窗口大小
您调用启动的浏览器不是全屏的,这有时会影响我们的一些操作,因此我们可以设置全屏
driver.maximize u Window()#设置全屏
driver.set uu窗口大小('480','800')#将浏览器宽度设置为480,高度设置为800
元素定位
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.set_page_load_timeout(5)
driver.get('http://www.baidu.com')
try:
driver.get('http://www.baidu.com')
driver.find_element_by_id('kw') # 通过ID定位
driver.find_element_by_class_name('s_ipt') # 通过class属性定位
driver.find_element_by_name('wd') # 通过标签name属性定位
driver.find_element_by_tag_name('input') # 通过标签属性定位
driver.find_element_by_css_selector('#kw') # 通过css方式定位
driver.find_element_by_xpath("//input[@id='kw']") # 通过xpath方式定位
driver.find_element_by_link_text("贴吧") # 通过xpath方式定位
print(driver.find_element_by_id('kw').tag_name ) # 获取标签的类型
except Exception as e:
print(e)
driver.quit()
向前或向后操作浏览器
from selenium import webdriver
driver = webdriver.PhantomJS()
try:
driver.get('http://www.baidu.com') #访问百度首页
driver.save_screenshot('1.png')
driver.get('http://www.sina.com.cn') #访问新浪首页
driver.save_screenshot('2.png')
driver.back() #回退到百度首页
driver.save_screenshot('3.png')
driver.forward() #前进到新浪首页
driver.save_screenshot('4.png')
except Exception as e:
print(e)
driver.quit()
以下是文章关于Python+selenium+phantom JS爬行网页以动态加载内容的介绍。有关Python phantom JS爬行内容的更多信息,请搜索我们之前的文章或继续浏览下面的相关文章页面。我希望你将来会支持我们
时间:2020年2月24日
Python爬虫selenium和phantom JS使用方法解析

1.selenum:构建第三方库。它可以使浏览器完成自动操作2.environment2.1安装:PIP安装selenium2.2获取浏览器驱动程序的下载地址:浏览器版本和驱动程序版本之间的对应表:chromedriver版本支持的chrome版本v2.46 v71-73v2.45
Python爬虫程序使用selenium&;加;Phantom JS抓取Ajax和动态HTML内容

1.introduction在python web爬虫内容提取器中,我们详细解释了核心组件:可插入内容提取器类gsextractor。本文记录了在确定GSR萃取器技术路线时所做的程序设计实验。这是第二部分,实验的第一部分使用XSLT一次性提取静态web内容并将其转换为XML格式,留下了一个问题:如何提取由JavaScript管理的动态内容?所以本文将回答这个问题2.提取动态内容的技术组件。在上一篇文章中,python使用XSLT提取网页数据。要提取的内容直接从网页的源代码中获取。但是,有些Ajax
解释硒和;加;幻影&;加;Python简单地实现了crawler的功能
Selenium一.introduction Selenium是一种用于测试web应用程序自动化程序的工具。测试直接在浏览器中运行,就像真实用户一样。Selenium 2支持驱动真实浏览器(firfoxdriver、iternetexplorerdriver、opera驱动程序、chromedriver),Selenium 2支持驱动非接口浏览器(htmlunit、phantom JS)二.安装windows的第一种方法是下载源代码、安装和下载地址(
Python&;plus;selenium&;plus;phantomjs实现了网页模拟登录和屏幕截图&LPAR;Windows环境&rPar的功能
Python是一种跨平台的计算机编程语言,可以在windows.mac和各种Linux/Unix系统上运行。它是一种面向对象的动态类型语言,最初设计用于编写自动脚本(shell),随着版本的不断更新和新语言功能的增加,越来越多的被用于独立开发。对于大型项目的开发,请访问Python官网下载并安装。在安装过程中,请检查PIP(Python软件包管理工具)安装Python后,打开命令行工具CMD并输入
Python实现了基于phantomjs的图片导入
基于phantomjs的自动化将出现1.flash2.有些基于视图的按钮无法单击,有些按钮是基于flash的(尤其是上载按钮)。Browser.find_element_by_xpath(“./*[@name='swfuload_0'])。Click()#单击上载按钮睡眠(2)AutoIT.Control_set_text(“,”[类:编辑;实例:1]“,Tupian)#上传
Python使用phantomjs屏幕截图网页的方法
示例如下:#!/usr/bin/Python#-*-编码:utf8-*-来自selenium导入webdriver导入OS Driver1=webdriver.Phantom JS(可执行文件路径='/usr/local/bin/Phantom JS')driver1.get(“”)数据=driver1.titledriver1.save_屏幕截图('c
Phantom JS获取呈现的JS网页(Python代码)
最近我需要抓取一个网站,但是页面是在JS渲染后生成的,普通的抓取框架不确定,所以我想用phantomjs来构建一个代理,Python调用phantomjs,似乎没有现成的第三方库(如果有,请通知编辑),我走来走去,发现只有pyspider提供现成的解决方案。经过一次简单的尝试,我觉得pyspider更像是新手的爬行工具,就像一个老处女,有时一丝不苟,有时喋喋不休。轻量级的小玩意应该更受欢迎。我也有一点自私。我可以将它们与我最喜欢的漂亮的东西一起使用汤而不是学习pyquery(pyspide
Python爬虫图像延迟加载技术selenium和phantom JS解析
一.什么是图片的延迟加载?-案例分析:抓取网站管理员材料#!/usr/bin/env Python#-*-编码:UTF-8-*-如果uName==“main”:url=''headers={'用户年龄,则从lxml导入etree导入请求
JS镜像延迟加载技术的实现过程分析
Lazy load技术Lazy load是前端优化的一种有效方式,它极大地改善了用户体验。图片一直是页面加载中的一个很大的流氓。现在图片的大小通常是几兆字节,远远大于代码的大小。原则:页面加载后,只有显示文档的可见区域,其他区域不显示。当用户滚动页面时,判断该区域的位置,生成img标记,并让用户将所使用的相关技术添加到可见区域:向img添加属性(例如数据SRC),将图片的地址分配给他,以便生成img标记,然后将数据SRC的值分配给img SRC(通过dataset.SRC或getattrib)
JS前端实现了两种延迟加载图片的方式&LPAR;lazload&rPar
在实际的项目开发中,我们经常会遇到这样的场景:一个页面上有很多图片,第一个屏幕上大约有一两张图片,所以我们必须一次加载所有图片吗?显然,这很愚蠢,这不仅影响页面渲染速度,而且浪费带宽。这就是我们通常所说的第一个屏幕加载,这是技术现实中使用的技术。想法是惰性地加载图像——将其加载到可见区域。想法:用数据XX替换页面中的所有img属性SRC属性。当页面滚动直到图像出现在可见区域时,使用js获取图像的数据XX值并分配它向Src.About各种宽度和高度:页面可见区域的宽度:document.body.clien
用JavaScript实现图片延迟加载插件的方法
序言在网络上的主要论坛中,特别是网站某些图片类型中,加载图片时采用了一种称为延迟加载的方法。具体来说,当请求页面时,只加载可视区域中的图片,而不加载其他部分中的图片。这些图片只有在出现时才会动态加载r在可视区域,为了节省网络带宽和提高效率,初始加载的速度和具体实现技术并不复杂,下面分别介绍。延迟加载web图像是读取img元素,获取数据SRC(或其他属性名称)的值属性,并给出img SRC,从而实现图像的动态加载机制。这里需要注意的是,img处于初始阶段
htmlunit抓取动态网页( 开源java页面分析工具模拟浏览器执行js代码并获取执行)
网站优化 • 优采云 发表了文章 • 0 个评论 • 92 次浏览 • 2021-09-22 12:10
开源java页面分析工具模拟浏览器执行js代码并获取执行)
java htmlunit jsoup在web img选项卡中实现图像
htmlunit是一个开源Java页面分析工具,可以模拟浏览器以执行JS代码并在执行后获取HTML网页代码。
jsoup是一个java html解析器,允许您使用简单的语法获取HTML标记中的属性的值。
如果在JS执行后获得IMG标记的SRC属性值,则可以将图像下载到本地。
所需的maven依赖性:
org.jsoup
jsoup
1.11.3
net.sourceforge.htmlunit
htmlunit
2.33
下载程序中的图像需要三个必须具有参数,即:需要访问网页的URL,需要爬上元素内的IMG图像的CSS选择器,并且将图片保存到本地位置。此外,还有一个可选的参数下载图片的名称。
此外,HtmlUnit也可以设置等待访问web JS负荷的时间,只需修改在源代码中的参数之一。
在staticatool工具类中,根据URL下载图像的代码来自网络。
使用化的HtmlUnit和JSoup框架,得到了很多有趣的事情,比如你获得从网页所需的文本内容,并实现方法是类似的。
编译环境:
Windows,JD伪原创1、 IDEM2020
一些示例代码:
如果要查看程序的完整代码,我可以。
主要主要类:
public class Main {
// 默认保存路径:桌面/img文件夹
private static final String defaultSavePath = "C:\\Users\\ASUS\\Desktop\\img\\";
public static void main(String[] args) throws Exception {
// MainFunction function =
// new MainFunction("https://www.jd.com/", "#J_focus img", "C:\\Users\\ASUS\\Desktop\\img\\") {
// @Override
// int naming(int count) {
// return ++count;
// }
// };
// MainFunction function =
// new MainFunction("http://150.158.165.239/", "img", "C:\\Users\\ASUS\\Desktop\\img\\") {
// @Override
// int naming(int count) {
// return ++count;
// }
// };
MainFunction function =
new MainFunction("https://blog.csdn.net/qq_46239 ... ot%3B, "#asideProfile img", defaultSavePath) {
@Override
int naming(int count) {
return count + 1;
}
};
function.run();
}
}
主功能主函数类
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
/**
* 主要功能类
*/
public class MainFunction {
private final String url;
private final Document document;
private final String cssQuery;
private final String downFilePath;
/**
* 构造函数保存需要访问网站的url
*/
public MainFunction(final String url, final String cssQuery, final String downFilePath) throws Exception{
this.url = url;
this.cssQuery = cssQuery;
this.downFilePath = downFilePath;
//Htmlunit模拟的浏览器,设置css,js等支持及其它的一些简单设置
WebClient browser = new WebClient();
browser.getOptions().setCssEnabled(false);
browser.getOptions().setJavaScriptEnabled(true);
browser.getOptions().setThrowExceptionOnScriptError(false);
//获取页面
HtmlPage htmlPage = browser.getPage(url);
//设置等待js的加载时间
browser.waitForBackgroundJavaScript(2600);
//使用xml的方式解析获取到jsoup的document对象
document = Jsoup.parse(htmlPage.asXml());
System.out.println(document);
// document = Jsoup.connect(url).get();
// System.out.println(document);
}
// 辅助命名
private int count = 1;
/**
* 图片命名规则函数
* 需要被重写
*/
int naming(int count) {
return -1;
}
public void run() throws Exception{
for(Element res : document.select(cssQuery)) {
String imgURL = res.attr("src");
if (imgURL.length() > 1 && imgURL.charAt(0) == '/' && imgURL.charAt(1) == '/')
imgURL = "http:" + imgURL;
Thread.sleep(804);
StaticTool.downImages(downFilePath, (count = naming(count)) + ".png", /*url + */imgURL);
}
}
}
如果您有任何意见,请感谢您的支持。 查看全部
htmlunit抓取动态网页(
开源java页面分析工具模拟浏览器执行js代码并获取执行)
java htmlunit jsoup在web img选项卡中实现图像
htmlunit是一个开源Java页面分析工具,可以模拟浏览器以执行JS代码并在执行后获取HTML网页代码。
jsoup是一个java html解析器,允许您使用简单的语法获取HTML标记中的属性的值。
如果在JS执行后获得IMG标记的SRC属性值,则可以将图像下载到本地。
所需的maven依赖性:
org.jsoup
jsoup
1.11.3
net.sourceforge.htmlunit
htmlunit
2.33
下载程序中的图像需要三个必须具有参数,即:需要访问网页的URL,需要爬上元素内的IMG图像的CSS选择器,并且将图片保存到本地位置。此外,还有一个可选的参数下载图片的名称。
此外,HtmlUnit也可以设置等待访问web JS负荷的时间,只需修改在源代码中的参数之一。
在staticatool工具类中,根据URL下载图像的代码来自网络。
使用化的HtmlUnit和JSoup框架,得到了很多有趣的事情,比如你获得从网页所需的文本内容,并实现方法是类似的。
编译环境:
Windows,JD伪原创1、 IDEM2020
一些示例代码:
如果要查看程序的完整代码,我可以。
主要主要类:
public class Main {
// 默认保存路径:桌面/img文件夹
private static final String defaultSavePath = "C:\\Users\\ASUS\\Desktop\\img\\";
public static void main(String[] args) throws Exception {
// MainFunction function =
// new MainFunction("https://www.jd.com/", "#J_focus img", "C:\\Users\\ASUS\\Desktop\\img\\") {
// @Override
// int naming(int count) {
// return ++count;
// }
// };
// MainFunction function =
// new MainFunction("http://150.158.165.239/", "img", "C:\\Users\\ASUS\\Desktop\\img\\") {
// @Override
// int naming(int count) {
// return ++count;
// }
// };
MainFunction function =
new MainFunction("https://blog.csdn.net/qq_46239 ... ot%3B, "#asideProfile img", defaultSavePath) {
@Override
int naming(int count) {
return count + 1;
}
};
function.run();
}
}
主功能主函数类
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
/**
* 主要功能类
*/
public class MainFunction {
private final String url;
private final Document document;
private final String cssQuery;
private final String downFilePath;
/**
* 构造函数保存需要访问网站的url
*/
public MainFunction(final String url, final String cssQuery, final String downFilePath) throws Exception{
this.url = url;
this.cssQuery = cssQuery;
this.downFilePath = downFilePath;
//Htmlunit模拟的浏览器,设置css,js等支持及其它的一些简单设置
WebClient browser = new WebClient();
browser.getOptions().setCssEnabled(false);
browser.getOptions().setJavaScriptEnabled(true);
browser.getOptions().setThrowExceptionOnScriptError(false);
//获取页面
HtmlPage htmlPage = browser.getPage(url);
//设置等待js的加载时间
browser.waitForBackgroundJavaScript(2600);
//使用xml的方式解析获取到jsoup的document对象
document = Jsoup.parse(htmlPage.asXml());
System.out.println(document);
// document = Jsoup.connect(url).get();
// System.out.println(document);
}
// 辅助命名
private int count = 1;
/**
* 图片命名规则函数
* 需要被重写
*/
int naming(int count) {
return -1;
}
public void run() throws Exception{
for(Element res : document.select(cssQuery)) {
String imgURL = res.attr("src");
if (imgURL.length() > 1 && imgURL.charAt(0) == '/' && imgURL.charAt(1) == '/')
imgURL = "http:" + imgURL;
Thread.sleep(804);
StaticTool.downImages(downFilePath, (count = naming(count)) + ".png", /*url + */imgURL);
}
}
}
如果您有任何意见,请感谢您的支持。
htmlunit抓取动态网页(SEO专员:网站链接的三种类类别与特点,仅供参考)
网站优化 • 优采云 发表了文章 • 0 个评论 • 79 次浏览 • 2021-09-17 23:20
网站中有三种主要的链接类型,以满足不同的企业需求。SEO专家在进行搜索引擎优化时也会选择不同的网站链接方法。今天,小编将介绍网站链接的三种类型和特点,仅供参考
网站links有三种类型:静态链接、伪静态链接和动态链接
静态链接的特点是当客户端访问静态页面时,可以直接提取的静态页面不需要操作数据库。因此,访问速度相对较快,服务器负载很小。对于搜索引擎来说,它还可以节省大量的捕获时间
静态链接最大的特点是考虑搜索引擎优化
动态链接的特点是,如果动态链接中有很多参数(一般我们建议不超过两个参数),很容易使搜索引擎爬虫进入“黑洞”,不利于搜索引擎爬虫的捕获,也不会影响用户的记忆和传播
如何更简单地理解这三通??小编简单介绍一下。动态链接是指当客户端(用户)访问动态网页时,服务器程序需要调用数据库提取网页内容,然后反馈给客户端。因此,有必要在动态网页链接中调用“参数”,也就是说,“参数”将出现在我们经常看到的链接中
伪静态链接是“伪装”的静态,因此伪静态并不直接等同于静态。仅从链接结构的角度来看,它属于静态链接。实际上,服务器上不存在此静态页面。此页面可能是服务器动态语言的页面,如ASP、ASPX、PHP、JSP等
静态链接是服务器上一个独立的静态网页文件路径,通常以后缀(如HTML、HTM、XML、shtml和SHTM)结尾 查看全部
htmlunit抓取动态网页(SEO专员:网站链接的三种类类别与特点,仅供参考)
网站中有三种主要的链接类型,以满足不同的企业需求。SEO专家在进行搜索引擎优化时也会选择不同的网站链接方法。今天,小编将介绍网站链接的三种类型和特点,仅供参考

网站links有三种类型:静态链接、伪静态链接和动态链接
静态链接的特点是当客户端访问静态页面时,可以直接提取的静态页面不需要操作数据库。因此,访问速度相对较快,服务器负载很小。对于搜索引擎来说,它还可以节省大量的捕获时间
静态链接最大的特点是考虑搜索引擎优化
动态链接的特点是,如果动态链接中有很多参数(一般我们建议不超过两个参数),很容易使搜索引擎爬虫进入“黑洞”,不利于搜索引擎爬虫的捕获,也不会影响用户的记忆和传播
如何更简单地理解这三通??小编简单介绍一下。动态链接是指当客户端(用户)访问动态网页时,服务器程序需要调用数据库提取网页内容,然后反馈给客户端。因此,有必要在动态网页链接中调用“参数”,也就是说,“参数”将出现在我们经常看到的链接中
伪静态链接是“伪装”的静态,因此伪静态并不直接等同于静态。仅从链接结构的角度来看,它属于静态链接。实际上,服务器上不存在此静态页面。此页面可能是服务器动态语言的页面,如ASP、ASPX、PHP、JSP等
静态链接是服务器上一个独立的静态网页文件路径,通常以后缀(如HTML、HTM、XML、shtml和SHTM)结尾
htmlunit抓取动态网页(上篇文章“Java爬虫_静态页面”动态爬虫工具介绍)
网站优化 • 优采云 发表了文章 • 0 个评论 • 146 次浏览 • 2021-09-17 05:06
一、crawler简介:请查看我之前的文章“Java crawler静态页面”
二、dynamic crawler工具简介:
1、IDEA,开发工具,创建Maven项目
2、htmlunit:它是一个自动测试工具,集成了下载(httpclient)、DOM(nekohtml)和JS(rhino)
3、otherjar包:JUnit、jsoup、JXL
三、开发过程和相关代码
3.1、createmaven项目
image.png
@k272、pom.xml将项目依赖项添加到
4.0.0
cll
demo
1.0-SNAPSHOT
UTF-8
UTF-8
UTF-8
1.7
1.7
junit
junit
4.11
test
net.sourceforge.htmlunit
htmlunit
2.27
org.jsoup
jsoup
1.8.3
org.apache.poi
poi
3.10.1
com.hynnet
jxl
2.6.12.1
3.3、创建一个Java类qyemailhelper.Java
<p>import CaililiangTools.ConfigHelper;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.*;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.select.Elements;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Properties;
public class QYEmailHelper {
static WebClient webClient=new WebClient(BrowserVersion.CHROME);
ArrayList returnList = new ArrayList();
static String baseUrl ="";
static int num =1;
ConfigHelper configHelper = new ConfigHelper();
Properties properties=null;
//浏览器初始化
public void WebClientInit(){
webClient.getCookieManager().setCookiesEnabled(true);//设置cookie是否可用
webClient.getOptions().setActiveXNative(false);
webClient.getOptions().setRedirectEnabled(true);// 启动客户端重定向
webClient.getOptions().setCssEnabled(false);//禁用Css,可避免自动二次请求CSS进行渲染
webClient.getOptions().setJavaScriptEnabled(true); // 启动JS
webClient.getOptions().setUseInsecureSSL(true);//忽略ssl认证
webClient.getOptions().setThrowExceptionOnScriptError(false);//运行错误时,不抛出异常
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());// 设置Ajax异步
webClient.getOptions().setMaxInMemory(50000);
properties = configHelper.getEmailUserInfos();
}
public void closeWebClient(){
webClient.close();
webClient=new WebClient(BrowserVersion.CHROME);
}
//用户登录并返回收件箱的地址
public String UserLogin(String url,String name,String password) throws Exception{
url = url.replace("param=caill@primeton.com","param="+name);
final HtmlPage page = webClient.getPage(url);
System.err.println("查询中,请稍候");
//TimeUnit.SECONDS.sleep(3); //web请求数据需要时间,必须让主线程休眠片刻
HtmlForm form=page.getForms().get(0);
HtmlPasswordInput txtPwd = (HtmlPasswordInput)form.getInputByName("pp");//密码框
txtPwd.setValueAttribute(password);//设置密码
HtmlSubmitInput submit=(HtmlSubmitInput) form.getInputByValue("登录");
final HtmlPage page2 = (HtmlPage) submit.click();//登录进入
DomElement e =page2.getElementById("folder_1");
HtmlPage page3 = webClient.getPage("https://mail.primeton.com"+e.getAttribute("href"));
//TimeUnit.SECONDS.sleep(3); //web请求数据需要时间,必须让主线程休眠片刻
HtmlInlineFrame frame1 = (HtmlInlineFrame)page3.getElementById("mainFrame");
String src = frame1.getAttribute("src");
baseUrl="https://mail.primeton.com"+src;
return "https://mail.primeton.com"+src;
}
//抓取Url中的数据
public long getHtmlPage(String url,long startTime,long endTime) throws Exception{
HashMap returnMap = new HashMap();
long endTime2=0L;
HtmlPage page = webClient.getPage(url);
HtmlBody tbody = (HtmlBody) page.getBody();
DomNodeList lists = tbody.getElementsByTagName("table");
//System.out.println( page.asXml());
for(HtmlElement he:lists){
long time =0L;
HashMap results = new HashMap();
String xml = he.asXml();
if(xml.startsWith(" 查看全部
htmlunit抓取动态网页(上篇文章“Java爬虫_静态页面”动态爬虫工具介绍)
一、crawler简介:请查看我之前的文章“Java crawler静态页面”
二、dynamic crawler工具简介:
1、IDEA,开发工具,创建Maven项目
2、htmlunit:它是一个自动测试工具,集成了下载(httpclient)、DOM(nekohtml)和JS(rhino)
3、otherjar包:JUnit、jsoup、JXL
三、开发过程和相关代码
3.1、createmaven项目
image.png
@k272、pom.xml将项目依赖项添加到
4.0.0
cll
demo
1.0-SNAPSHOT
UTF-8
UTF-8
UTF-8
1.7
1.7
junit
junit
4.11
test
net.sourceforge.htmlunit
htmlunit
2.27
org.jsoup
jsoup
1.8.3
org.apache.poi
poi
3.10.1
com.hynnet
jxl
2.6.12.1
3.3、创建一个Java类qyemailhelper.Java
<p>import CaililiangTools.ConfigHelper;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.*;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.select.Elements;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Properties;
public class QYEmailHelper {
static WebClient webClient=new WebClient(BrowserVersion.CHROME);
ArrayList returnList = new ArrayList();
static String baseUrl ="";
static int num =1;
ConfigHelper configHelper = new ConfigHelper();
Properties properties=null;
//浏览器初始化
public void WebClientInit(){
webClient.getCookieManager().setCookiesEnabled(true);//设置cookie是否可用
webClient.getOptions().setActiveXNative(false);
webClient.getOptions().setRedirectEnabled(true);// 启动客户端重定向
webClient.getOptions().setCssEnabled(false);//禁用Css,可避免自动二次请求CSS进行渲染
webClient.getOptions().setJavaScriptEnabled(true); // 启动JS
webClient.getOptions().setUseInsecureSSL(true);//忽略ssl认证
webClient.getOptions().setThrowExceptionOnScriptError(false);//运行错误时,不抛出异常
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());// 设置Ajax异步
webClient.getOptions().setMaxInMemory(50000);
properties = configHelper.getEmailUserInfos();
}
public void closeWebClient(){
webClient.close();
webClient=new WebClient(BrowserVersion.CHROME);
}
//用户登录并返回收件箱的地址
public String UserLogin(String url,String name,String password) throws Exception{
url = url.replace("param=caill@primeton.com","param="+name);
final HtmlPage page = webClient.getPage(url);
System.err.println("查询中,请稍候");
//TimeUnit.SECONDS.sleep(3); //web请求数据需要时间,必须让主线程休眠片刻
HtmlForm form=page.getForms().get(0);
HtmlPasswordInput txtPwd = (HtmlPasswordInput)form.getInputByName("pp");//密码框
txtPwd.setValueAttribute(password);//设置密码
HtmlSubmitInput submit=(HtmlSubmitInput) form.getInputByValue("登录");
final HtmlPage page2 = (HtmlPage) submit.click();//登录进入
DomElement e =page2.getElementById("folder_1");
HtmlPage page3 = webClient.getPage("https://mail.primeton.com"+e.getAttribute("href"));
//TimeUnit.SECONDS.sleep(3); //web请求数据需要时间,必须让主线程休眠片刻
HtmlInlineFrame frame1 = (HtmlInlineFrame)page3.getElementById("mainFrame");
String src = frame1.getAttribute("src");
baseUrl="https://mail.primeton.com"+src;
return "https://mail.primeton.com"+src;
}
//抓取Url中的数据
public long getHtmlPage(String url,long startTime,long endTime) throws Exception{
HashMap returnMap = new HashMap();
long endTime2=0L;
HtmlPage page = webClient.getPage(url);
HtmlBody tbody = (HtmlBody) page.getBody();
DomNodeList lists = tbody.getElementsByTagName("table");
//System.out.println( page.asXml());
for(HtmlElement he:lists){
long time =0L;
HashMap results = new HashMap();
String xml = he.asXml();
if(xml.startsWith("
htmlunit抓取动态网页(JavaHTML4支持代理服务器(5)支持自动的Cookies管理)
网站优化 • 优采云 发表了文章 • 0 个评论 • 153 次浏览 • 2021-09-16 06:14
(4)support代理服务器)
(5)支持自动cookie管理等)
Jsoup
Jsoup是一个Java HTML解析器,它可以直接解析URL地址和HTML文本内容。它提供了一个非常省力的API,可以通过DOM、CSS和类似于jQuery的操作方法获取和操作数据
网页获取和解析的速度很快,这是推荐的
主要功能如下:
从URL、文件或字符串解析HTML;使用DOM或CSS选择器查找和检索数据;操作HTML元素、属性和文本;htmlunit
Htmlunit是一个开源Java页面分析工具。阅读页面后,您可以有效地使用htmlunit分析页面上的内容。该项目可以模拟浏览器操作,称为Java浏览器的开源实现。这种没有界面的浏览器运行速度也很快。它使用rhinojs引擎来模拟JS操作
???坦率地说,它是一个用Java编写的浏览器,没有接口。因为它没有接口,执行速度仍然会下降。Htmlunit提供了一系列API,可以执行许多功能,例如填写表单、提交表单、模拟单击链接。由于内置rhinojs引擎,可以执行JavaScript
网页获取和解析速度快,性能好。建议用于需要解析网页脚本的应用程序场景
瓦蒂
Watij(发音为wattage)是一个用Java开发的web应用程序测试工具。鉴于watij的简单性和Java语言的强大功能,watij可以让您在真正的浏览器中完成web应用程序的自动测试。因为它调用本地浏览器,所以支持CSS呈现和JS执行
获取网页的速度是平均的。IE版本过低(6/7))时可能会发生内存泄漏
建议使用htmlunit进行网页捕获,主要原因是:
Htmlunit是“Java程序的无Gui浏览器”。它为HTML文档建模,并提供一个API,允许您调用页面、填写表单、单击链接等,就像在“普通”浏览器中一样。它有很好的JavaScript支持(持续改进),您甚至可以根据使用的配置使用相当复杂的Ajax库来模拟chrome、Firefox或Internet Explorer。它通常用于测试或从网站检索信息
Maven导入jar包:
net.sourceforge.htmlunit htmlunit 2.30 net.sourceforge.htmlunit htmlunit-core-js 2.28 net.sourceforge.htmlunit htmlunit-cssparser 1.0.0 //引入jsoup来对网页进行解析 org.jsoup jsoup 1.11.3 net.sourceforge.htmlunit neko-htmlunit 2.30
下面是一个例子。创建一个web客户端,让它从一定程度上加载主页。然后我们打印页面标题是否正确。Getpage()根据返回数据的内容类型,可以返回不同类型的页面。在本例中,我们希望内容类型为text/HTML,因此我们将结果转换为com.gargoylesoftware.htmlun.HTML.htmlpage
非常方便:
import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlPage; public class Test { public void homPage() throws Exception { try (final WebClient webClient = new WebClient()) { final HtmlPage page = webClient.getPage("http://www.baidu.com"); System.out.println(page.getTitleText()); } } public static void main(String[] args) { try { new Test().homPage(); } catch (Exception e) { e.printStackTrace(); } } } 打印结果: 百度一下,你就知道 Process finished with exit code 0
有关具体的介绍性案例和API,请参阅官方文件
原文: 查看全部
htmlunit抓取动态网页(JavaHTML4支持代理服务器(5)支持自动的Cookies管理)
(4)support代理服务器)
(5)支持自动cookie管理等)
Jsoup
Jsoup是一个Java HTML解析器,它可以直接解析URL地址和HTML文本内容。它提供了一个非常省力的API,可以通过DOM、CSS和类似于jQuery的操作方法获取和操作数据
网页获取和解析的速度很快,这是推荐的
主要功能如下:
从URL、文件或字符串解析HTML;使用DOM或CSS选择器查找和检索数据;操作HTML元素、属性和文本;htmlunit
Htmlunit是一个开源Java页面分析工具。阅读页面后,您可以有效地使用htmlunit分析页面上的内容。该项目可以模拟浏览器操作,称为Java浏览器的开源实现。这种没有界面的浏览器运行速度也很快。它使用rhinojs引擎来模拟JS操作
???坦率地说,它是一个用Java编写的浏览器,没有接口。因为它没有接口,执行速度仍然会下降。Htmlunit提供了一系列API,可以执行许多功能,例如填写表单、提交表单、模拟单击链接。由于内置rhinojs引擎,可以执行JavaScript
网页获取和解析速度快,性能好。建议用于需要解析网页脚本的应用程序场景
瓦蒂
Watij(发音为wattage)是一个用Java开发的web应用程序测试工具。鉴于watij的简单性和Java语言的强大功能,watij可以让您在真正的浏览器中完成web应用程序的自动测试。因为它调用本地浏览器,所以支持CSS呈现和JS执行
获取网页的速度是平均的。IE版本过低(6/7))时可能会发生内存泄漏
建议使用htmlunit进行网页捕获,主要原因是:
Htmlunit是“Java程序的无Gui浏览器”。它为HTML文档建模,并提供一个API,允许您调用页面、填写表单、单击链接等,就像在“普通”浏览器中一样。它有很好的JavaScript支持(持续改进),您甚至可以根据使用的配置使用相当复杂的Ajax库来模拟chrome、Firefox或Internet Explorer。它通常用于测试或从网站检索信息
Maven导入jar包:
net.sourceforge.htmlunit htmlunit 2.30 net.sourceforge.htmlunit htmlunit-core-js 2.28 net.sourceforge.htmlunit htmlunit-cssparser 1.0.0 //引入jsoup来对网页进行解析 org.jsoup jsoup 1.11.3 net.sourceforge.htmlunit neko-htmlunit 2.30
下面是一个例子。创建一个web客户端,让它从一定程度上加载主页。然后我们打印页面标题是否正确。Getpage()根据返回数据的内容类型,可以返回不同类型的页面。在本例中,我们希望内容类型为text/HTML,因此我们将结果转换为com.gargoylesoftware.htmlun.HTML.htmlpage
非常方便:
import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlPage; public class Test { public void homPage() throws Exception { try (final WebClient webClient = new WebClient()) { final HtmlPage page = webClient.getPage("http://www.baidu.com"); System.out.println(page.getTitleText()); } } public static void main(String[] args) { try { new Test().homPage(); } catch (Exception e) { e.printStackTrace(); } } } 打印结果: 百度一下,你就知道 Process finished with exit code 0
有关具体的介绍性案例和API,请参阅官方文件
原文:
htmlunit抓取动态网页(网络爬虫软件从指定网页获取特定内容的几种解决方案)
网站优化 • 优采云 发表了文章 • 0 个评论 • 96 次浏览 • 2021-09-15 09:22
摘要:对于程序员或开发人员来说,构建一个具有编程能力的网页数据爬行程序是非常简单和有趣的。然而,对于大多数没有任何编程知识的人来说,最好使用一些网络爬虫软件从指定的网页获取特定的内容
网页数据抓取是指从网站中提取特定内容,而不需要网站的API接口获取内容。“Web数据”作为网站用户体验的一部分,例如网页上的文本、图像、声音、视频和动画,都是Web数据
对于程序员或开发人员来说,拥有编程能力使他们构建网页数据爬行程序变得非常简单和有趣。然而,对于大多数没有任何编程知识的人来说,最好使用一些网络爬虫软件从指定的网页获取特定内容。以下是使用优采云采集器获取网页数据的一些解决方案:
1、从动态网页中提取内容
网页可以是静态的,也可以是动态的。通常,要提取的网页内容会随着访问时间的变化而变化网站. 通常,这个网站是一个动态的网站,它使用Ajax技术或其他技术来及时更新web内容。AJAX是一种延迟加载和异步更新的脚本技术。通过在后台与服务器进行少量数据交换,可以更新网页的一部分,而无需重新加载整个网页
性能特点是,当点击网页中的一个选项时,大多数网站网址不会改变;网页未完全加载,但数据在本地加载并更改。此时,您可以在优采云element的“高级选项”的“Ajax加载”中进行设置,您可以抓取Ajax加载的网页数据
优采云中的Ajax设置@
2、从网页中抓取隐藏内容
您是否想过从网站获取特定数据,但当您触发链接或将鼠标悬停在某处时,内容会出现?例如,下图中的网站需要移动鼠标选择彩票以显示分类。对于此功能,您可以设置“将鼠标移动到此链接”以获取网页中的隐藏内容
将鼠标移到链接上的content采集方法上
3、从无限滚动的网页中提取内容
滚动到页面底部后,一些网站只显示您要提取的部分数据。例如,在今天头条新闻的首页上,您需要不断滚动到页面底部以加载更多文章内容。网站with unlimited scrolling通常使用Ajax或JavaScript从网站. 在这种情况下,您可以设置Ajax超时设置,并选择滚动方法和滚动时间以从网页中提取内容
4、从网页抓取所有链接
普通的网站将至少收录一个超链接。如果要从网页中提取所有链接,可以使用优采云获取网页上发布的所有超链接
5、从网页抓取所有文本
有时,您需要提取HTML文档中的所有文本,也就是说,将其放在HTML标记中(例如
标记之间优采云允许您从网页的源代码中提取所有或特定文本
6、从网页抓取所有图像
有些朋友有采集网页图片优采云你可以在网页中添加图片URL采集然后,通过下载并使用优采云特殊图像批量下载工具,我们可以将图像URL we采集中的图像下载并保存到本地计算机 查看全部
htmlunit抓取动态网页(网络爬虫软件从指定网页获取特定内容的几种解决方案)
摘要:对于程序员或开发人员来说,构建一个具有编程能力的网页数据爬行程序是非常简单和有趣的。然而,对于大多数没有任何编程知识的人来说,最好使用一些网络爬虫软件从指定的网页获取特定的内容
网页数据抓取是指从网站中提取特定内容,而不需要网站的API接口获取内容。“Web数据”作为网站用户体验的一部分,例如网页上的文本、图像、声音、视频和动画,都是Web数据
对于程序员或开发人员来说,拥有编程能力使他们构建网页数据爬行程序变得非常简单和有趣。然而,对于大多数没有任何编程知识的人来说,最好使用一些网络爬虫软件从指定的网页获取特定内容。以下是使用优采云采集器获取网页数据的一些解决方案:
1、从动态网页中提取内容
网页可以是静态的,也可以是动态的。通常,要提取的网页内容会随着访问时间的变化而变化网站. 通常,这个网站是一个动态的网站,它使用Ajax技术或其他技术来及时更新web内容。AJAX是一种延迟加载和异步更新的脚本技术。通过在后台与服务器进行少量数据交换,可以更新网页的一部分,而无需重新加载整个网页
性能特点是,当点击网页中的一个选项时,大多数网站网址不会改变;网页未完全加载,但数据在本地加载并更改。此时,您可以在优采云element的“高级选项”的“Ajax加载”中进行设置,您可以抓取Ajax加载的网页数据

优采云中的Ajax设置@
2、从网页中抓取隐藏内容
您是否想过从网站获取特定数据,但当您触发链接或将鼠标悬停在某处时,内容会出现?例如,下图中的网站需要移动鼠标选择彩票以显示分类。对于此功能,您可以设置“将鼠标移动到此链接”以获取网页中的隐藏内容

将鼠标移到链接上的content采集方法上
3、从无限滚动的网页中提取内容
滚动到页面底部后,一些网站只显示您要提取的部分数据。例如,在今天头条新闻的首页上,您需要不断滚动到页面底部以加载更多文章内容。网站with unlimited scrolling通常使用Ajax或JavaScript从网站. 在这种情况下,您可以设置Ajax超时设置,并选择滚动方法和滚动时间以从网页中提取内容

4、从网页抓取所有链接
普通的网站将至少收录一个超链接。如果要从网页中提取所有链接,可以使用优采云获取网页上发布的所有超链接
5、从网页抓取所有文本
有时,您需要提取HTML文档中的所有文本,也就是说,将其放在HTML标记中(例如
标记之间优采云允许您从网页的源代码中提取所有或特定文本
6、从网页抓取所有图像
有些朋友有采集网页图片优采云你可以在网页中添加图片URL采集然后,通过下载并使用优采云特殊图像批量下载工具,我们可以将图像URL we采集中的图像下载并保存到本地计算机
htmlunit抓取动态网页(1.HtmlUnit的学习方法是什么?怎么样?HtmlUnit)
网站优化 • 优采云 发表了文章 • 0 个评论 • 74 次浏览 • 2021-09-15 03:18
1.HtmlUnit 是一个用java编写的无界面浏览器,建模html文档,通过API调用页面,填写表单,点击链接等,像普通浏览器一样操作。通常用于测试和从网页中获取信息。而且HtmlUnit兼有HttpClient和souce的功能,但是速度比较慢,但是如果取消它解析css和js的功能,速度会提高,默认开启。
2.这里我选择HtmlUnit爬取数据主要是为了获取他的js和css。
3.主要代码如下
package com.los;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.DomElement;
import com.gargoylesoftware.htmlunit.html.DomNodeList;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.los.util.DownlandPic;
import java.io.IOException;
import java.util.regex.Pattern;
public class HtmlUnitTest {
public static void main(String[] args) throws IOException {
DownlandPic dd = new DownlandPic();
WebClient webClient = new WebClient();//实例化web客户端
//http://www.bdqn.cn/ https://www.baidu.com/?tn=78000241_22_hao_pg
String url = "http://www.bdqn.cn/";
HtmlPage page = webClient.getPage(url);
webClient.waitForBackgroundJavaScript(10000); //等侍js脚本执行完成
System.out.println(page.asXml());
DomNodeList img = page.getElementsByTagName("script");
for (int i=0;i 0) {
output.write(buffer, 0, length);
}
fileOutputStream.write(output.toByteArray());
dataInputStream.close();
fileOutputStream.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static int getCharacterPosition3(String string){
//这里是获取"\""符号的位置
Matcher slashMatcher = Pattern.compile("\"").matcher(string);
int mIdx = 0;
while(slashMatcher.find()) {
mIdx++;
//当"/"符号第三次出现的位置
if(mIdx == 2){
break;
}
}
return slashMatcher.start();
}
public static int getCharacterPosition4(String string){
//这里是获取"\""符号的位置
Matcher slashMatcher = Pattern.compile("\"").matcher(string);
int mIdx = 0;
while(slashMatcher.find()) {
mIdx++;
//当"/"符号第三次出现的位置
if(mIdx == 3){
break;
}
}
return slashMatcher.start();
}
public static void main(String[] args) {
String content = "<img class=\"lazy\" data-original=\"/img/newImg/news_img2.jpg\" src=\"/img/newImg/news2.jpg\" style=\"display: block;\"/>";
System.out.println(getCharacterPosition3(content));
System.out.println(getCharacterPosition4(content));
String substring = content.substring(getCharacterPosition3(content), getCharacterPosition4(content));
System.out.println(substring);
}
}
3.因为这里网页中的图片地址是相对路径,下载的时候在页面上找到了绝对路径,拼接在下载地址中。下载的路径必须与抓取后存储在本地页面的图片标签中的地址相对应,否则找不到。
3.匹配"时,之所以写2和3是根据这里爬取的数据。
4.与其他爬取网页的方式相比,这可能更简单,但很容易体现效果。如果有错误,请给我们您的建议。至于页面,则不会显示,涉及隐私。
5.学习HtmlUnit请参考:地址 查看全部
htmlunit抓取动态网页(1.HtmlUnit的学习方法是什么?怎么样?HtmlUnit)
1.HtmlUnit 是一个用java编写的无界面浏览器,建模html文档,通过API调用页面,填写表单,点击链接等,像普通浏览器一样操作。通常用于测试和从网页中获取信息。而且HtmlUnit兼有HttpClient和souce的功能,但是速度比较慢,但是如果取消它解析css和js的功能,速度会提高,默认开启。
2.这里我选择HtmlUnit爬取数据主要是为了获取他的js和css。
3.主要代码如下
package com.los;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.DomElement;
import com.gargoylesoftware.htmlunit.html.DomNodeList;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.los.util.DownlandPic;
import java.io.IOException;
import java.util.regex.Pattern;
public class HtmlUnitTest {
public static void main(String[] args) throws IOException {
DownlandPic dd = new DownlandPic();
WebClient webClient = new WebClient();//实例化web客户端
//http://www.bdqn.cn/ https://www.baidu.com/?tn=78000241_22_hao_pg
String url = "http://www.bdqn.cn/";
HtmlPage page = webClient.getPage(url);
webClient.waitForBackgroundJavaScript(10000); //等侍js脚本执行完成
System.out.println(page.asXml());
DomNodeList img = page.getElementsByTagName("script");
for (int i=0;i 0) {
output.write(buffer, 0, length);
}
fileOutputStream.write(output.toByteArray());
dataInputStream.close();
fileOutputStream.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static int getCharacterPosition3(String string){
//这里是获取"\""符号的位置
Matcher slashMatcher = Pattern.compile("\"").matcher(string);
int mIdx = 0;
while(slashMatcher.find()) {
mIdx++;
//当"/"符号第三次出现的位置
if(mIdx == 2){
break;
}
}
return slashMatcher.start();
}
public static int getCharacterPosition4(String string){
//这里是获取"\""符号的位置
Matcher slashMatcher = Pattern.compile("\"").matcher(string);
int mIdx = 0;
while(slashMatcher.find()) {
mIdx++;
//当"/"符号第三次出现的位置
if(mIdx == 3){
break;
}
}
return slashMatcher.start();
}
public static void main(String[] args) {
String content = "<img class=\"lazy\" data-original=\"/img/newImg/news_img2.jpg\" src=\"/img/newImg/news2.jpg\" style=\"display: block;\"/>";
System.out.println(getCharacterPosition3(content));
System.out.println(getCharacterPosition4(content));
String substring = content.substring(getCharacterPosition3(content), getCharacterPosition4(content));
System.out.println(substring);
}
}
3.因为这里网页中的图片地址是相对路径,下载的时候在页面上找到了绝对路径,拼接在下载地址中。下载的路径必须与抓取后存储在本地页面的图片标签中的地址相对应,否则找不到。
3.匹配"时,之所以写2和3是根据这里爬取的数据。
4.与其他爬取网页的方式相比,这可能更简单,但很容易体现效果。如果有错误,请给我们您的建议。至于页面,则不会显示,涉及隐私。
5.学习HtmlUnit请参考:地址
htmlunit抓取动态网页(如何实现静态页面名字和动态页面的映射(图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 93 次浏览 • 2021-09-23 18:07
动态生成的网页在网站真实大规模网页的构建中不可或缺。然而,动态页面的名称(即其URL)通常缺乏明确的含义。例如,名为product的页面。ASP?Id=4不如名为/应用程序/洗碗机/Model3809.Htm页面很容易记住。介绍了如何实现静态页面名与动态页面名的映射
概述
除了静态页面名称具有更清晰含义的优势外,静态页面名称的另一个优势是搜索引擎可以为这些页面编制索引。大多数搜索引擎,如Alta Vista和Yahoo,都不会检索URL中带有问号的页面,因为它们担心进入无尽的链接迷宫。将动态页面名称转换为静态页面名称后,搜索引擎将对这些页面进行索引和分类,以便网站带来更多流量
要使用本文介绍的方法将动态名称转换为静态名称,必须使用Windows 2000和IIS5.0.IIS5.0的两个改进使我们能够实现这种转换:使用服务器的“自定义错误消息”功能。传输和使用服务器的能力。在ASP页面中传输。虽然IIS4.0它还支持用户定义的错误消息,但使用响应。重定向,这是无用的。因此,此方法需要IIS5.0.Response.redirect是无用的,因为搜索引擎不会跟随重定向
使用本文描述的方法,网站developers首先链接实际上不存在静态URL的页面。然后设置IIS服务器并告诉它使用指定的ASP页(404.ASP)来处理@ASP上的所有404错误网站.在这个404.在ASP页面中,原创URL被转换为正式的动态URL,由服务器执行。传输目标页面并将其返回到用户浏览器
假设以下URL:
当网站被域名替换时,URL将返回404错误。我们需要做的第一件事是使用专用的.ASP页面来处理所有这些404错误。这可以使用IIS5.0的“自定义错误消息”功能。设置此功能的过程如下:
● 在MMC中打开IIS服务器管理器
● 右击Web网站Node并选择属性
● 单击“自定义错误消息”页面
● 向下滚动直到找到404错误
● 双击404错误以打开“错误映射属性”对话框
● 将消息类型更改为URL
● 在URL框中输入“/”404.asp”
● 单击“确定”关闭窗口
现在404错误已经被删除404.ASP已处理。当IIS调用404.ASP page,它将提供导致404错误的URL,这对我们非常有用
错误处理页
接下来,我们创建一个用于处理错误的404.ASP page。要做的第一件事是获取导致404错误的页面名称。以下代码行从查询字符串中提取此页面的名称:
'获取页面名称
strQ=Request.ServerVariables(“查询字符串”)
%>
那么strq中什么是重要的呢?在上面的示例中,它应该是这样的:/applications/dishchiners/Kenmore/Model3809.htm。我们真正需要的是型号3809(产品型号),因为这是产品数据库中唯一的密钥。以下代码行根据产品型号查找产品ID(编号):
'计算产品模型
nIndex=InStrRev(strQ,“/”)
如果(nIndex>;0)Then
strModelNumber=右侧(strQ,Len(strQ)-nIndex)
strQ=左(strQ,nIndex-1)
如果结束
'从产品型号中删除.HTM后缀
如果((Mid(strPageName),Len(strPageName),1)=“m”)和_
(Mid(strPageName),Len(strPageName)_
(Mid(strPageName),Len(strPageName)_
(Mid(strPageName,(strPageName)-3,1)=“.”)然后
strModelNumber=左(strPageName,Len(strModelNumber)-4)
如果结束
'从产品数据库中查找产品编号
strSQL=“从产品中选择产品\u Id”_
&;“其中Product_Model=”&;strModelNumber&;“”
设置oRS=oConn.Execute(strSQL)
如果(不是oRS.EOF),则
lProductId=oRS(“产品Id”)
如果结束
%>
现在我们有了产品编号,在转换到正确的ASP页面之前必须保存它。我们无法通过server.transfer(这是IIS的限制)在查询字符串中传递产品编号,因此必须通过会话对象传递它
会话(“Id”)=lProductId
Server.Transfer(“/product.asp”)
%>
执行此页面时,浏览器地址栏中的内容如下:
由于使用了server.transfer,浏览器地址栏中的URL不会更改。同样,浏览器不需要再次与服务器交互,这与response.redirect不同
此外,请注意URL中的目录根本不存在。事实上,除服务器名称外,URL的其余部分根本不起作用。例如,以下URL将返回到同一页面
那么为什么要添加这么多目录呢?这些目录将提高搜索引擎对网站的评价。一些搜索引擎认为URL中的单词在搜索关键词时更重要,所以目录名非常重要
调用不存在的页面
我们已经讨论了将不存在的URL转换为有效的动态URL的技术。然而,为了使搜索引擎能够索引这些页面,我们还需要链接这些不存在的URL。换句话说,只有当我们链接Model3809.Htm页面,然后搜索引擎才能找到它
在过去,当链接此页面时,我们只需要按如下方式给出产品编号:“product.ASP?Id=4”。现在,让我们构造一个函数,以产品编号作为参数返回相应的URL
函数CreateProductURL(lProductId)
strSQL=“从产品中选择产品型号”,其中Product\u Id=“&;lProductId
设置oRS=oConn.Execute(strSQL)
如果(不是oRS.EOF),则
标准模型=oRS(“产品模型”)
如果结束
CreateProductURL=“/”&;strModel&;“.htm”
端函数
%>
现在,如果我们想添加一个URL,我们只需要按如下方式进行:
“>;洗碗机
在本例中,我们假设我们不知道产品型号名称,但我们必须查询数据库才能知道。然而,事实上,情况可能并非如此。我们知道产品型号名称,可以直接创建URL,而无需再次访问数据库
性能问题
本文中描述的方法将显著影响性能。首先,为了创建静态URL,它需要一个数据库调用。其次,为了从404的URL中获得正确的URL,它还需要添加一个额外的数据库调用。最后,两个server.Transfer需要大量开销
但是,一些性能问题可以通过Xcache()解决。Xcache可以将带有404错误的URL转换为正确的页面,并缓存信息以供后续请求使用
实例
请访问。这是应用此技术的一个示例。大多数分支页面(如餐厅和餐厅评论)都使用此技术,以便在搜索引擎中获得更高的评价。也使用Xcache
总结
使用IIS5.0自定义错误消息功能控制404个错误,可以为动态页面创建静态页面样式的URL。只要不需要为这些静态URL创建目录和文件,应该说创建有利于营销和搜索引擎排名的URL相对简单 查看全部
htmlunit抓取动态网页(如何实现静态页面名字和动态页面的映射(图))
动态生成的网页在网站真实大规模网页的构建中不可或缺。然而,动态页面的名称(即其URL)通常缺乏明确的含义。例如,名为product的页面。ASP?Id=4不如名为/应用程序/洗碗机/Model3809.Htm页面很容易记住。介绍了如何实现静态页面名与动态页面名的映射
概述
除了静态页面名称具有更清晰含义的优势外,静态页面名称的另一个优势是搜索引擎可以为这些页面编制索引。大多数搜索引擎,如Alta Vista和Yahoo,都不会检索URL中带有问号的页面,因为它们担心进入无尽的链接迷宫。将动态页面名称转换为静态页面名称后,搜索引擎将对这些页面进行索引和分类,以便网站带来更多流量
要使用本文介绍的方法将动态名称转换为静态名称,必须使用Windows 2000和IIS5.0.IIS5.0的两个改进使我们能够实现这种转换:使用服务器的“自定义错误消息”功能。传输和使用服务器的能力。在ASP页面中传输。虽然IIS4.0它还支持用户定义的错误消息,但使用响应。重定向,这是无用的。因此,此方法需要IIS5.0.Response.redirect是无用的,因为搜索引擎不会跟随重定向
使用本文描述的方法,网站developers首先链接实际上不存在静态URL的页面。然后设置IIS服务器并告诉它使用指定的ASP页(404.ASP)来处理@ASP上的所有404错误网站.在这个404.在ASP页面中,原创URL被转换为正式的动态URL,由服务器执行。传输目标页面并将其返回到用户浏览器
假设以下URL:
当网站被域名替换时,URL将返回404错误。我们需要做的第一件事是使用专用的.ASP页面来处理所有这些404错误。这可以使用IIS5.0的“自定义错误消息”功能。设置此功能的过程如下:
● 在MMC中打开IIS服务器管理器
● 右击Web网站Node并选择属性
● 单击“自定义错误消息”页面
● 向下滚动直到找到404错误
● 双击404错误以打开“错误映射属性”对话框
● 将消息类型更改为URL
● 在URL框中输入“/”404.asp”
● 单击“确定”关闭窗口
现在404错误已经被删除404.ASP已处理。当IIS调用404.ASP page,它将提供导致404错误的URL,这对我们非常有用
错误处理页
接下来,我们创建一个用于处理错误的404.ASP page。要做的第一件事是获取导致404错误的页面名称。以下代码行从查询字符串中提取此页面的名称:
'获取页面名称
strQ=Request.ServerVariables(“查询字符串”)
%>
那么strq中什么是重要的呢?在上面的示例中,它应该是这样的:/applications/dishchiners/Kenmore/Model3809.htm。我们真正需要的是型号3809(产品型号),因为这是产品数据库中唯一的密钥。以下代码行根据产品型号查找产品ID(编号):
'计算产品模型
nIndex=InStrRev(strQ,“/”)
如果(nIndex>;0)Then
strModelNumber=右侧(strQ,Len(strQ)-nIndex)
strQ=左(strQ,nIndex-1)
如果结束
'从产品型号中删除.HTM后缀
如果((Mid(strPageName),Len(strPageName),1)=“m”)和_
(Mid(strPageName),Len(strPageName)_
(Mid(strPageName),Len(strPageName)_
(Mid(strPageName,(strPageName)-3,1)=“.”)然后
strModelNumber=左(strPageName,Len(strModelNumber)-4)
如果结束
'从产品数据库中查找产品编号
strSQL=“从产品中选择产品\u Id”_
&;“其中Product_Model=”&;strModelNumber&;“”
设置oRS=oConn.Execute(strSQL)
如果(不是oRS.EOF),则
lProductId=oRS(“产品Id”)
如果结束
%>
现在我们有了产品编号,在转换到正确的ASP页面之前必须保存它。我们无法通过server.transfer(这是IIS的限制)在查询字符串中传递产品编号,因此必须通过会话对象传递它
会话(“Id”)=lProductId
Server.Transfer(“/product.asp”)
%>
执行此页面时,浏览器地址栏中的内容如下:
由于使用了server.transfer,浏览器地址栏中的URL不会更改。同样,浏览器不需要再次与服务器交互,这与response.redirect不同
此外,请注意URL中的目录根本不存在。事实上,除服务器名称外,URL的其余部分根本不起作用。例如,以下URL将返回到同一页面
那么为什么要添加这么多目录呢?这些目录将提高搜索引擎对网站的评价。一些搜索引擎认为URL中的单词在搜索关键词时更重要,所以目录名非常重要
调用不存在的页面
我们已经讨论了将不存在的URL转换为有效的动态URL的技术。然而,为了使搜索引擎能够索引这些页面,我们还需要链接这些不存在的URL。换句话说,只有当我们链接Model3809.Htm页面,然后搜索引擎才能找到它
在过去,当链接此页面时,我们只需要按如下方式给出产品编号:“product.ASP?Id=4”。现在,让我们构造一个函数,以产品编号作为参数返回相应的URL
函数CreateProductURL(lProductId)
strSQL=“从产品中选择产品型号”,其中Product\u Id=“&;lProductId
设置oRS=oConn.Execute(strSQL)
如果(不是oRS.EOF),则
标准模型=oRS(“产品模型”)
如果结束
CreateProductURL=“/”&;strModel&;“.htm”
端函数
%>
现在,如果我们想添加一个URL,我们只需要按如下方式进行:
“>;洗碗机
在本例中,我们假设我们不知道产品型号名称,但我们必须查询数据库才能知道。然而,事实上,情况可能并非如此。我们知道产品型号名称,可以直接创建URL,而无需再次访问数据库
性能问题
本文中描述的方法将显著影响性能。首先,为了创建静态URL,它需要一个数据库调用。其次,为了从404的URL中获得正确的URL,它还需要添加一个额外的数据库调用。最后,两个server.Transfer需要大量开销
但是,一些性能问题可以通过Xcache()解决。Xcache可以将带有404错误的URL转换为正确的页面,并缓存信息以供后续请求使用
实例
请访问。这是应用此技术的一个示例。大多数分支页面(如餐厅和餐厅评论)都使用此技术,以便在搜索引擎中获得更高的评价。也使用Xcache
总结
使用IIS5.0自定义错误消息功能控制404个错误,可以为动态页面创建静态页面样式的URL。只要不需要为这些静态URL创建目录和文件,应该说创建有利于营销和搜索引擎排名的URL相对简单
htmlunit抓取动态网页(何为Ajax动态网页,我想不用我多说了吧 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 154 次浏览 • 2021-09-23 02:02
)
什么是ajax动态网页,我不想让我多说,如果你甚至不知道Ajax是,那么你会去谷歌学习Ajax。有了,我将解释此页面作为抓取此页面的示例。 Web链接如下:
很明显,我们必须抓住的数据是
打开Google浏览器开发人员工具,我们会发现他实际上是用Ajax动态加载的,并且jsonp跨域模式返回,分析如图所示:
可以推断出页面部分信息通过JavaScript插入DOM。如果模拟HTTP请求获取Web信息,则只需获取Web信息,您得到的内容就不完整。 htmlunit可以做到。
好的,回到主题,也许你还是要听到一个HTMLUnit这个地方,也许你早点听到了,但我仍然认为是对最大权威的官方解释,我不会是无知的BB,看看图片:
总之,HTMLUnit实际上是一个测试工具,方便测试员执行功能测试,可以模拟常见的主流浏览器(如Google浏览器),Firefox浏览器,即浏览器的行为。不多胡说八道,我直接演示:
/**
* 上海证券交易所数据抓取测试
* @since 1.0
* @author Lanxiaowei@citic-finance.com
* @date 2015-8-27下午6:16:14
*
*/
public class ShangHaiStockTest {
public static void main(String[] args) throws Exception {
downloadListPage();
}
public static void downloadListPage() throws Exception {
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_38);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setActiveXNative(false);
webClient.getOptions().setAppletEnabled(false);
webClient.getOptions().setRedirectEnabled(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setUseInsecureSSL(false);
webClient.getOptions().setTimeout(10000000);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
int totalPage = 22;
boolean first = true;
HtmlPage page = null;
do {
if(first) {
page = (HtmlPage)webClient.getPage("http://www.sse.com.cn/assortme ... 6quot;);
FileUtils.writeFile(page.asXml(), "C:/shh/list/" + totalPage + ".html", "UTF-8", false);
first = false;
} else {
HtmlAnchor anchor = null;
if(totalPage == 22 -1) {
anchor = (HtmlAnchor) page.getHtmlElementById("xsgf_next");
} else {
anchor = (HtmlAnchor) page.getHtmlElementById("dateList_container_next");
}
page = (HtmlPage) anchor.click();
FileUtils.writeFile(page.asXml(), "C:/shh/list/" + totalPage + ".html", "UTF-8", false);
}
totalPage--;
} while(totalPage > 0);
//关闭模拟窗口
webClient.closeAllWindows();
}
}
关键点:
1. webclient.getOptions()。 setjavascripten(true);
启用JavaScript
2. webclient.setajaxcontroller(new nicelyresynchronizingajaxcontroller());
设置Ajax异步处理控制器以启用AJAX支持
3. webclient.getOptions()。 SetThrowExceptiononFailingStatuscode(false);
webclient.getOptions()。 setthrowexceptiononscripterror(false);
这两个句子很重要。当出现HTTP错误时,程序不会丢弃过程,后者意味着当JavaScript执行异常时,Java代码将直接抛出,程序被中断。
演示在演示代码中,如何通过单击“下一步”超链接获取每个页面的页面内容以获取页面内容,然后写入磁盘指定目录。程序非常简单,我希望抛出玉,所示的程序依赖罐包:
查看全部
htmlunit抓取动态网页(何为Ajax动态网页,我想不用我多说了吧
)
什么是ajax动态网页,我不想让我多说,如果你甚至不知道Ajax是,那么你会去谷歌学习Ajax。有了,我将解释此页面作为抓取此页面的示例。 Web链接如下:
很明显,我们必须抓住的数据是

打开Google浏览器开发人员工具,我们会发现他实际上是用Ajax动态加载的,并且jsonp跨域模式返回,分析如图所示:



可以推断出页面部分信息通过JavaScript插入DOM。如果模拟HTTP请求获取Web信息,则只需获取Web信息,您得到的内容就不完整。 htmlunit可以做到。
好的,回到主题,也许你还是要听到一个HTMLUnit这个地方,也许你早点听到了,但我仍然认为是对最大权威的官方解释,我不会是无知的BB,看看图片:

总之,HTMLUnit实际上是一个测试工具,方便测试员执行功能测试,可以模拟常见的主流浏览器(如Google浏览器),Firefox浏览器,即浏览器的行为。不多胡说八道,我直接演示:
/**
* 上海证券交易所数据抓取测试
* @since 1.0
* @author Lanxiaowei@citic-finance.com
* @date 2015-8-27下午6:16:14
*
*/
public class ShangHaiStockTest {
public static void main(String[] args) throws Exception {
downloadListPage();
}
public static void downloadListPage() throws Exception {
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_38);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setActiveXNative(false);
webClient.getOptions().setAppletEnabled(false);
webClient.getOptions().setRedirectEnabled(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setUseInsecureSSL(false);
webClient.getOptions().setTimeout(10000000);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
int totalPage = 22;
boolean first = true;
HtmlPage page = null;
do {
if(first) {
page = (HtmlPage)webClient.getPage("http://www.sse.com.cn/assortme ... 6quot;);
FileUtils.writeFile(page.asXml(), "C:/shh/list/" + totalPage + ".html", "UTF-8", false);
first = false;
} else {
HtmlAnchor anchor = null;
if(totalPage == 22 -1) {
anchor = (HtmlAnchor) page.getHtmlElementById("xsgf_next");
} else {
anchor = (HtmlAnchor) page.getHtmlElementById("dateList_container_next");
}
page = (HtmlPage) anchor.click();
FileUtils.writeFile(page.asXml(), "C:/shh/list/" + totalPage + ".html", "UTF-8", false);
}
totalPage--;
} while(totalPage > 0);
//关闭模拟窗口
webClient.closeAllWindows();
}
}
关键点:
1. webclient.getOptions()。 setjavascripten(true);
启用JavaScript
2. webclient.setajaxcontroller(new nicelyresynchronizingajaxcontroller());
设置Ajax异步处理控制器以启用AJAX支持
3. webclient.getOptions()。 SetThrowExceptiononFailingStatuscode(false);
webclient.getOptions()。 setthrowexceptiononscripterror(false);
这两个句子很重要。当出现HTTP错误时,程序不会丢弃过程,后者意味着当JavaScript执行异常时,Java代码将直接抛出,程序被中断。
演示在演示代码中,如何通过单击“下一步”超链接获取每个页面的页面内容以获取页面内容,然后写入磁盘指定目录。程序非常简单,我希望抛出玉,所示的程序依赖罐包:

htmlunit抓取动态网页(设计与内容指南网站应具有清晰的层次结构和文本链接)
网站优化 • 优采云 发表了文章 • 0 个评论 • 73 次浏览 • 2021-09-22 12:16
设计和内容指南
网站应该有一个明确的层次结构和文本链接。每个网页应至少为打开一个静态文本链接。文本链接与其他代码生成的链接不同,例如JavaScript。下面的“打印”不是由下面的文本链接实现的。
为用户提供网站 map,列出到网站重要零件的链接。如果网站映射上的链接超过或大约100,则需要将网站 map拆分为多个网页。
网站应该是实用且丰富的,Web文本应该清晰准确地表达沟通的内容。
您是否要使用用户使用哪些单词来查找网页,请确保网站确实收录这些文本。深入了解这一点,将使您受益。
尝试使用文本而不是图形来显示重要的名称,内容或链接。 Google爬网工具无法识别图表中收录的文本。特别是对于友谊链接,如果您要提供PR和排名,则您对文本链接非常重要。
确保标题和Alt标记属性的描述和表达式是准确的。记得是网页加上alt描述的图片,这是一个放置关键词的好地方。
检查链接是否损坏并确保HTML格式正确。请使用Google 网站 Administrator Tools查看您的网站链接,如果您损坏,请注意删除或更正。
如果您决定采用动态页面(即“(即)在URL中的字符),请注意,并非所有搜索引擎都可以抓住抓取静态网页的动态网页。缩短参数的长度,并减少参数的数量有助于动态页面。建议使用URL重写技术动态链接静态。
在合理的金额(小于100)内限制特定网页上的链接。正如本页,不超过100个内部链接和外部链接。
网站准备好后准备
链接其他相关网站到网站。那是找到友情链接。
提交网站 google,网址:http:// www。谷歌。 com / addurl。 HTML。
提交网站地图作为Google 网站 Administrator工具的一部分。谷歌使用您的网站地图了解网站的结构,并增加网页的抓取率。
确保应该了解您的网页的所有网站 网站已经在线。这是指向你的网站,你需要正常,不是伤害。
将您的网站提交到相关目录,例如,OpendirectoryProject和yahoo!,以及其他特定行业的专业网站 K14 网站。从中获悉:DMOZ - 打开目录 查看全部
htmlunit抓取动态网页(设计与内容指南网站应具有清晰的层次结构和文本链接)
设计和内容指南
网站应该有一个明确的层次结构和文本链接。每个网页应至少为打开一个静态文本链接。文本链接与其他代码生成的链接不同,例如JavaScript。下面的“打印”不是由下面的文本链接实现的。
为用户提供网站 map,列出到网站重要零件的链接。如果网站映射上的链接超过或大约100,则需要将网站 map拆分为多个网页。
网站应该是实用且丰富的,Web文本应该清晰准确地表达沟通的内容。
您是否要使用用户使用哪些单词来查找网页,请确保网站确实收录这些文本。深入了解这一点,将使您受益。
尝试使用文本而不是图形来显示重要的名称,内容或链接。 Google爬网工具无法识别图表中收录的文本。特别是对于友谊链接,如果您要提供PR和排名,则您对文本链接非常重要。
确保标题和Alt标记属性的描述和表达式是准确的。记得是网页加上alt描述的图片,这是一个放置关键词的好地方。
检查链接是否损坏并确保HTML格式正确。请使用Google 网站 Administrator Tools查看您的网站链接,如果您损坏,请注意删除或更正。
如果您决定采用动态页面(即“(即)在URL中的字符),请注意,并非所有搜索引擎都可以抓住抓取静态网页的动态网页。缩短参数的长度,并减少参数的数量有助于动态页面。建议使用URL重写技术动态链接静态。
在合理的金额(小于100)内限制特定网页上的链接。正如本页,不超过100个内部链接和外部链接。
网站准备好后准备
链接其他相关网站到网站。那是找到友情链接。
提交网站 google,网址:http:// www。谷歌。 com / addurl。 HTML。
提交网站地图作为Google 网站 Administrator工具的一部分。谷歌使用您的网站地图了解网站的结构,并增加网页的抓取率。
确保应该了解您的网页的所有网站 网站已经在线。这是指向你的网站,你需要正常,不是伤害。
将您的网站提交到相关目录,例如,OpendirectoryProject和yahoo!,以及其他特定行业的专业网站 K14 网站。从中获悉:DMOZ - 打开目录
htmlunit抓取动态网页(Java编写的代码:之后click(),我的问题)
网站优化 • 优采云 发表了文章 • 0 个评论 • 96 次浏览 • 2021-09-22 12:15
htmlUnit是一个伟大的Java库,允许您填写并在编程中提交Web表单。我目前正在保障在ASP中编写的一个相当旧的系统,而不是每月手动填写网络形式,但试图找到一种自动化整个任务的方法,因为我被遗忘了。这是一个表,它检索在一个月内采集的数据。到目前为止,这是我写的代码:
WebClient client = new WebClient();
HtmlPage page = client.getPage("http://urlOfTheWebsite.com/search.aspx");
HtmlForm form = page.getFormByName("aspnetForm");
HtmlSelect frMonth = form.getSelectByName("ctl00$cphContent$ddlStartMonth");
HtmlSelect frDay = form.getSelectByName("ctl00$cphContent$ddlStartDay");
HtmlSelect frYear = form.getSelectByName("ctl00$cphContent$ddlStartYear");
HtmlSelect toMonth = form.getSelectByName("ctl00$cphContent$ddlEndMonth");
HtmlSelect toDay = form.getSelectByName("ctl00$cphContent$ddlEndDay");
HtmlSelect toYear = form.getSelectByName("ctl00$cphContent$ddlEndYear");
HtmlCheckBoxInput games = form.getInputByName("ctl00$cphContent$chkListLottoGame$0");
HtmlSubmitInput submit = form.getInputByName("ctl00$cphContent$btnSearch");
frMonth.setSelectedAttribute("1", true);
frDay.setSelectedAttribute("1", true);
frYear.setSelectedAttribute("2012", true);
toMonth.setSelectedAttribute("1", true);
toDay.setSelectedAttribute("31", true);
toYear.setSelectedAttribute("2012", true);
games.setChecked(true);
submit.click();
单击()后,我应该等待确切的页面完成重新加载,因为某些表中有一个表,显示了我的搜索结果。然后,当加载页面时,我需要将其作为HTML文件下载(非常类似于“您喜欢的”浏览器中的页面),因为我将抓住数据来计算总和,我已经使用了JSoup完成了图书馆。
我的问题是:1.如何制作一个编程方式来完成HTMLUnit的加载? 2.如何将生成的网页编程为编程中的HTML文件?
我已经研究了HTMLUnit文档,找不到适合我的课程。 查看全部
htmlunit抓取动态网页(Java编写的代码:之后click(),我的问题)
htmlUnit是一个伟大的Java库,允许您填写并在编程中提交Web表单。我目前正在保障在ASP中编写的一个相当旧的系统,而不是每月手动填写网络形式,但试图找到一种自动化整个任务的方法,因为我被遗忘了。这是一个表,它检索在一个月内采集的数据。到目前为止,这是我写的代码:
WebClient client = new WebClient();
HtmlPage page = client.getPage("http://urlOfTheWebsite.com/search.aspx");
HtmlForm form = page.getFormByName("aspnetForm");
HtmlSelect frMonth = form.getSelectByName("ctl00$cphContent$ddlStartMonth");
HtmlSelect frDay = form.getSelectByName("ctl00$cphContent$ddlStartDay");
HtmlSelect frYear = form.getSelectByName("ctl00$cphContent$ddlStartYear");
HtmlSelect toMonth = form.getSelectByName("ctl00$cphContent$ddlEndMonth");
HtmlSelect toDay = form.getSelectByName("ctl00$cphContent$ddlEndDay");
HtmlSelect toYear = form.getSelectByName("ctl00$cphContent$ddlEndYear");
HtmlCheckBoxInput games = form.getInputByName("ctl00$cphContent$chkListLottoGame$0");
HtmlSubmitInput submit = form.getInputByName("ctl00$cphContent$btnSearch");
frMonth.setSelectedAttribute("1", true);
frDay.setSelectedAttribute("1", true);
frYear.setSelectedAttribute("2012", true);
toMonth.setSelectedAttribute("1", true);
toDay.setSelectedAttribute("31", true);
toYear.setSelectedAttribute("2012", true);
games.setChecked(true);
submit.click();
单击()后,我应该等待确切的页面完成重新加载,因为某些表中有一个表,显示了我的搜索结果。然后,当加载页面时,我需要将其作为HTML文件下载(非常类似于“您喜欢的”浏览器中的页面),因为我将抓住数据来计算总和,我已经使用了JSoup完成了图书馆。
我的问题是:1.如何制作一个编程方式来完成HTMLUnit的加载? 2.如何将生成的网页编程为编程中的HTML文件?
我已经研究了HTMLUnit文档,找不到适合我的课程。
htmlunit抓取动态网页(,ajax动态加载数据的网页并提取网页信息(组图) )
网站优化 • 优采云 发表了文章 • 0 个评论 • 76 次浏览 • 2021-09-22 12:13
)
对于采集的页面有几个:
1.网
2.动态网页(js,ajax动态加载数据)
3.需要模拟登录到采集网
4.加入的网</p
p3,4个解决方案和想法将陈述/p
p在随后的博客中/p
p现在只有1,2个解决方案和想法:/p
p一.网/p
p对于静态页面的采集解析方法! java,python提供了很多工具包或框架,如java httpclient,htmlUnit,jsoup,htmlparser等,python的urllib,urllib2,beautysoup,scrape等,没有细节,在线信息更多。/p
p二. news/p
p采集的动态网页,需要js,ajax动态加载,采集 data程序的那些分为两个:/p
p1.通过组装js,ajax请求,在js加载后模拟数据。/p
p2.调用浏览器内核,在获取源代码页面加载后,然后通过行解析源代码/p
p一个研究爬行动物的人必须有一些东西,有很多在线学习材料,而不是声明,只为文章/p
p写下这个条带/p
ptoolkit java,呼叫浏览器,但不是今天的焦点,今天的焦点是文章 @ @ @ @ @ @ 采集需要js,ajax动态加载的网页并提取Web信息(用采集微信公章号文章列列表作为一个例子)/p
p启动... /p
p1.在文章 list 采集项目(以下称为micro 采集)/p
ppre class="命令" name="code"scrapy startproject weixin/pre/p
p2.在蜘蛛目录中创建采集 spider文件/p
ppre class="python" name="code"vim weixinlist.py/pre/p
p写如下/p
ppre class="python" name="code"from weixin.items import WeixinItem
import sys
sys.path.insert(0,'..')
import scrapy
import time
from scrapy import Spider
class MySpider(Spider):
name = 'weixinlist'
allowed_domains = []
start_urls = [
'http://weixin.sogou.com/gzh?openid=oIWsFt5QBSP8mn4Jx2WSGw_rCNzQ',
]
download_delay = 1
print('start init....')
def parse(self, response):
sel=scrapy.Selector(response)
print('hello,world!')
print(response)
print(sel)
list=sel.xpath('//div[@class="txt-box"]/h4')
items=[]
for single in list:
data=WeixinItem()
title=single.xpath('a/text()').extract()
link=single.xpath('a/@href').extract()
data['title']=title
data['link']=link
if len(title)0:
print(title[0].encode('utf-8'))
print(link)
/pre/p
p3.添加到weixinitem类/p
p在项目中.py/p
p4.创建一个下载中间件下载ybkit.py在相同级别的项目.py,并将其写入以下代码:/p
ppre class="python" name="code"import spynner
import pyquery
import time
import BeautifulSoup
import sys
from scrapy.http import HtmlResponse
class WebkitDownloaderTest( object ):
def process_request( self, request, spider ):
# if spider.name in settings.WEBKIT_DOWNLOADER:
# if( type(request) is not FormRequest ):
browser = spynner.Browser()
browser.create_webview()
browser.set_html_parser(pyquery.PyQuery)
browser.load(request.url, 20)
try:
browser.wait_load(10)
except:
pass
string = browser.html
string=string.encode('utf-8')
renderedBody = str(string)
return HtmlResponse( request.url, body=renderedBody )/pre/p
p此代码是调用浏览器内核,在页面加载后获取源代码/p
p5.在setting.py文件中配置,声明下载和下载中间件/p
p在底部添加以下代码:/p
ppre class="python" name="code"#which spider should use WEBKIT
WEBKIT_DOWNLOADER=['weixinlist']
DOWNLOADER_MIDDLEWARES = {
'weixin.downloadwebkit.WebkitDownloaderTest': 543,
}
import os
os.environ["DISPLAY"] = ":0"/pre/p
p6.运运程序:/p
p运行命令:/p
ppre class="python" name="code"scrapy crawl weixinlist/pre/p
p运行结果:/p
ppre class="python" name="code"kevinflynndeMacBook-Pro:spiders kevinflynn$ scrapy crawl weixinlist
start init....
2015-07-28 21:13:55 [scrapy] INFO: Scrapy 1.0.1 started (bot: weixin)
2015-07-28 21:13:55 [scrapy] INFO: Optional features available: ssl, http11
2015-07-28 21:13:55 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'weixin.spiders', 'SPIDER_MODULES': ['weixin.spiders'], 'BOT_NAME': 'weixin'}
2015-07-28 21:13:55 [py.warnings] WARNING: :0: UserWarning: You do not have a working installation of the service_identity module: 'No module named service_identity'. Please install it from https://pypi.python.org/pypi/service_identity and make sure all of its dependencies are satisfied. Without the service_identity module and a recent enough pyOpenSSL to support it, Twisted can perform only rudimentary TLS client hostname verification. Many valid certificate/hostname mappings may be rejected.
2015-07-28 21:13:55 [scrapy] INFO: Enabled extensions: CloseSpider, TelnetConsole, LogStats, CoreStats, SpiderState
2015-07-28 21:13:55 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, WebkitDownloaderTest, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats
2015-07-28 21:13:55 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware
2015-07-28 21:13:55 [scrapy] INFO: Enabled item pipelines:
2015-07-28 21:13:55 [scrapy] INFO: Spider opened
2015-07-28 21:13:55 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2015-07-28 21:13:55 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023
QFont::setPixelSize: Pixel size = 0 (0)
2015-07-28 21:14:08 [scrapy] DEBUG: Crawled (200) GET http://weixin.sogou.com/gzh%3F ... rCNzQ (referer: None)
hello,world!
200 http://weixin.sogou.com/gzh%3F ... rCNzQ
Selector xpath=None data=u'htmlheadmeta http-equiv="X-UA-Compa'>
互联网协议入门
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=210032701&idx=1&sn=6b1fc2bc5d4eb0f87513751e4ccf610c&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
自己动手写贝叶斯分类器给图书分类
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=210013947&idx=1&sn=1f36ba5794e22d0fb94a9900230e74ca&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
不当免费技术支持的10种方法
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209998175&idx=1&sn=216106034a3b4afea6e67f813ce1971f&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
以 Python 为实例,介绍贝叶斯理论
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209998175&idx=2&sn=2f3dee873d7350dfe9546ab4a9323c05&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
我从腾讯那“偷了”3000万QQ用户数据,出了份很有趣的...
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209980651&idx=1&sn=11fd40a2dee5132b0de8d4c79a97dac2&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
如何用 Spark 快速开发应用?
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209820653&idx=2&sn=23712b78d82fb412e960c6aa1e361dd3&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
一起来写个简单的解释器(1)
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209797651&idx=1&sn=15073e27080e6b637c8d24b6bb815417&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
那个直接在机器码中改 Bug 的家伙
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209762756&idx=1&sn=04ae1bc3a366d358f474ac3e9a85fb60&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
把一个库开源,你该做些什么
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209762756&idx=2&sn=0ac961ffd82ead6078a60f25fed3c2c4&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
程序员的困境
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209696436&idx=1&sn=8cb55b03c8b95586ba4498c64fa54513&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
2015-07-28 21:14:08 [scrapy] INFO: Closing spider (finished)
2015-07-28 21:14:08 [scrapy] INFO: Dumping Scrapy stats:
{'downloader/response_bytes': 131181,
'downloader/response_count': 1,
'downloader/response_status_count/200': 1,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2015, 7, 28, 13, 14, 8, 958071),
'log_count/DEBUG': 2,
'log_count/INFO': 7,
'log_count/WARNING': 1,
'response_received_count': 1,
'scheduler/dequeued': 1,
'scheduler/dequeued/memory': 1,
'scheduler/enqueued': 1,
'scheduler/enqueued/memory': 1,
'start_time': datetime.datetime(2015, 7, 28, 13, 13, 55, 688111)}
2015-07-28 21:14:08 [scrapy] INFO: Spider closed (finished)
QThread: Destroyed while thread is still running
kevinflynndeMacBook-Pro:spiders kevinflynn$ 查看全部
htmlunit抓取动态网页(,ajax动态加载数据的网页并提取网页信息(组图)
)
对于采集的页面有几个:
1.网
2.动态网页(js,ajax动态加载数据)
3.需要模拟登录到采集网
4.加入的网</p
p3,4个解决方案和想法将陈述/p
p在随后的博客中/p
p现在只有1,2个解决方案和想法:/p
p一.网/p
p对于静态页面的采集解析方法! java,python提供了很多工具包或框架,如java httpclient,htmlUnit,jsoup,htmlparser等,python的urllib,urllib2,beautysoup,scrape等,没有细节,在线信息更多。/p
p二. news/p
p采集的动态网页,需要js,ajax动态加载,采集 data程序的那些分为两个:/p
p1.通过组装js,ajax请求,在js加载后模拟数据。/p
p2.调用浏览器内核,在获取源代码页面加载后,然后通过行解析源代码/p
p一个研究爬行动物的人必须有一些东西,有很多在线学习材料,而不是声明,只为文章/p
p写下这个条带/p
ptoolkit java,呼叫浏览器,但不是今天的焦点,今天的焦点是文章 @ @ @ @ @ @ 采集需要js,ajax动态加载的网页并提取Web信息(用采集微信公章号文章列列表作为一个例子)/p
p启动... /p
p1.在文章 list 采集项目(以下称为micro 采集)/p
ppre class="命令" name="code"scrapy startproject weixin/pre/p
p2.在蜘蛛目录中创建采集 spider文件/p
ppre class="python" name="code"vim weixinlist.py/pre/p
p写如下/p
ppre class="python" name="code"from weixin.items import WeixinItem
import sys
sys.path.insert(0,'..')
import scrapy
import time
from scrapy import Spider
class MySpider(Spider):
name = 'weixinlist'
allowed_domains = []
start_urls = [
'http://weixin.sogou.com/gzh?openid=oIWsFt5QBSP8mn4Jx2WSGw_rCNzQ',
]
download_delay = 1
print('start init....')
def parse(self, response):
sel=scrapy.Selector(response)
print('hello,world!')
print(response)
print(sel)
list=sel.xpath('//div[@class="txt-box"]/h4')
items=[]
for single in list:
data=WeixinItem()
title=single.xpath('a/text()').extract()
link=single.xpath('a/@href').extract()
data['title']=title
data['link']=link
if len(title)0:
print(title[0].encode('utf-8'))
print(link)
/pre/p
p3.添加到weixinitem类/p
p在项目中.py/p
p4.创建一个下载中间件下载ybkit.py在相同级别的项目.py,并将其写入以下代码:/p
ppre class="python" name="code"import spynner
import pyquery
import time
import BeautifulSoup
import sys
from scrapy.http import HtmlResponse
class WebkitDownloaderTest( object ):
def process_request( self, request, spider ):
# if spider.name in settings.WEBKIT_DOWNLOADER:
# if( type(request) is not FormRequest ):
browser = spynner.Browser()
browser.create_webview()
browser.set_html_parser(pyquery.PyQuery)
browser.load(request.url, 20)
try:
browser.wait_load(10)
except:
pass
string = browser.html
string=string.encode('utf-8')
renderedBody = str(string)
return HtmlResponse( request.url, body=renderedBody )/pre/p
p此代码是调用浏览器内核,在页面加载后获取源代码/p
p5.在setting.py文件中配置,声明下载和下载中间件/p
p在底部添加以下代码:/p
ppre class="python" name="code"#which spider should use WEBKIT
WEBKIT_DOWNLOADER=['weixinlist']
DOWNLOADER_MIDDLEWARES = {
'weixin.downloadwebkit.WebkitDownloaderTest': 543,
}
import os
os.environ["DISPLAY"] = ":0"/pre/p
p6.运运程序:/p
p运行命令:/p
ppre class="python" name="code"scrapy crawl weixinlist/pre/p
p运行结果:/p
ppre class="python" name="code"kevinflynndeMacBook-Pro:spiders kevinflynn$ scrapy crawl weixinlist
start init....
2015-07-28 21:13:55 [scrapy] INFO: Scrapy 1.0.1 started (bot: weixin)
2015-07-28 21:13:55 [scrapy] INFO: Optional features available: ssl, http11
2015-07-28 21:13:55 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'weixin.spiders', 'SPIDER_MODULES': ['weixin.spiders'], 'BOT_NAME': 'weixin'}
2015-07-28 21:13:55 [py.warnings] WARNING: :0: UserWarning: You do not have a working installation of the service_identity module: 'No module named service_identity'. Please install it from https://pypi.python.org/pypi/service_identity and make sure all of its dependencies are satisfied. Without the service_identity module and a recent enough pyOpenSSL to support it, Twisted can perform only rudimentary TLS client hostname verification. Many valid certificate/hostname mappings may be rejected.
2015-07-28 21:13:55 [scrapy] INFO: Enabled extensions: CloseSpider, TelnetConsole, LogStats, CoreStats, SpiderState
2015-07-28 21:13:55 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, WebkitDownloaderTest, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats
2015-07-28 21:13:55 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware
2015-07-28 21:13:55 [scrapy] INFO: Enabled item pipelines:
2015-07-28 21:13:55 [scrapy] INFO: Spider opened
2015-07-28 21:13:55 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2015-07-28 21:13:55 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023
QFont::setPixelSize: Pixel size = 0 (0)
2015-07-28 21:14:08 [scrapy] DEBUG: Crawled (200) GET http://weixin.sogou.com/gzh%3F ... rCNzQ (referer: None)
hello,world!
200 http://weixin.sogou.com/gzh%3F ... rCNzQ
Selector xpath=None data=u'htmlheadmeta http-equiv="X-UA-Compa'>
互联网协议入门
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=210032701&idx=1&sn=6b1fc2bc5d4eb0f87513751e4ccf610c&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
自己动手写贝叶斯分类器给图书分类
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=210013947&idx=1&sn=1f36ba5794e22d0fb94a9900230e74ca&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
不当免费技术支持的10种方法
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209998175&idx=1&sn=216106034a3b4afea6e67f813ce1971f&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
以 Python 为实例,介绍贝叶斯理论
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209998175&idx=2&sn=2f3dee873d7350dfe9546ab4a9323c05&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
我从腾讯那“偷了”3000万QQ用户数据,出了份很有趣的...
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209980651&idx=1&sn=11fd40a2dee5132b0de8d4c79a97dac2&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
如何用 Spark 快速开发应用?
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209820653&idx=2&sn=23712b78d82fb412e960c6aa1e361dd3&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
一起来写个简单的解释器(1)
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209797651&idx=1&sn=15073e27080e6b637c8d24b6bb815417&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
那个直接在机器码中改 Bug 的家伙
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209762756&idx=1&sn=04ae1bc3a366d358f474ac3e9a85fb60&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
把一个库开源,你该做些什么
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209762756&idx=2&sn=0ac961ffd82ead6078a60f25fed3c2c4&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
程序员的困境
[u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209696436&idx=1&sn=8cb55b03c8b95586ba4498c64fa54513&3rd=MzA3MDU4NTYzMw==&scene=6#rd']
2015-07-28 21:14:08 [scrapy] INFO: Closing spider (finished)
2015-07-28 21:14:08 [scrapy] INFO: Dumping Scrapy stats:
{'downloader/response_bytes': 131181,
'downloader/response_count': 1,
'downloader/response_status_count/200': 1,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2015, 7, 28, 13, 14, 8, 958071),
'log_count/DEBUG': 2,
'log_count/INFO': 7,
'log_count/WARNING': 1,
'response_received_count': 1,
'scheduler/dequeued': 1,
'scheduler/dequeued/memory': 1,
'scheduler/enqueued': 1,
'scheduler/enqueued/memory': 1,
'start_time': datetime.datetime(2015, 7, 28, 13, 13, 55, 688111)}
2015-07-28 21:14:08 [scrapy] INFO: Spider closed (finished)
QThread: Destroyed while thread is still running
kevinflynndeMacBook-Pro:spiders kevinflynn$
htmlunit抓取动态网页( 环境搭建准备工具:pyton3.5安装Seleniuminstallpip3seleniumselenium)
网站优化 • 优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2021-09-22 12:12
环境搭建准备工具:pyton3.5安装Seleniuminstallpip3seleniumselenium)
Python+selenium+phantom JS抓取网页并动态加载内容
环境建设
准备工具:pyton3.5,硒,幻影
我的电脑已经安装好了python3.5
安装硒
pip3安装selenium
安装phantomjs
根据系统环境下载phantomjs。下载后,将phantomjs.exe解压缩到Python的脚本文件夹中
使用selenium+phantom JS实现简单爬虫
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get('http://www.baidu.com') #加载网页
data = driver.page_source #获取网页文本
driver.save_screenshot('1.png') #截图保存
print(data)
driver.quit()
硒+JS的几种使用方法
在请求头中设置用户代理
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
dcap = dict(DesiredCapabilities.PHANTOMJS) #设置useragent
dcap['phantomjs.page.settings.userAgent'] = ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0 ') #根据需要设置具体的浏览器信息
driver = webdriver.PhantomJS(desired_capabilities=dcap) #封装浏览器信息
driver.get('http://www.baidu.com') #加载网页
data = driver.page_source #获取网页文本
driver.save_screenshot('1.png') #截图保存
print(data)
driver.quit()
请求超时设置
webdriver类中有三种与时间相关的方法:
1.pageLoadTimeout设置加载整页的超时时间。完全加载意味着完全呈现完成,同时执行同步和异步脚本
2.setScriptTimeout设置异步脚本的超时
3.implicitlyWait确定对象的智能等待时间
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.set_page_load_timeout(5) #设置超时时间
driver.get('http://www.baidu.com')
print(driver.title)
driver.quit()
设置浏览器窗口大小
您调用启动的浏览器不是全屏的,这有时会影响我们的一些操作,因此我们可以设置全屏
driver.maximize u Window()#设置全屏
driver.set uu窗口大小('480','800')#将浏览器宽度设置为480,高度设置为800
元素定位
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.set_page_load_timeout(5)
driver.get('http://www.baidu.com')
try:
driver.get('http://www.baidu.com')
driver.find_element_by_id('kw') # 通过ID定位
driver.find_element_by_class_name('s_ipt') # 通过class属性定位
driver.find_element_by_name('wd') # 通过标签name属性定位
driver.find_element_by_tag_name('input') # 通过标签属性定位
driver.find_element_by_css_selector('#kw') # 通过css方式定位
driver.find_element_by_xpath("//input[@id='kw']") # 通过xpath方式定位
driver.find_element_by_link_text("贴吧") # 通过xpath方式定位
print(driver.find_element_by_id('kw').tag_name ) # 获取标签的类型
except Exception as e:
print(e)
driver.quit()
向前或向后操作浏览器
from selenium import webdriver
driver = webdriver.PhantomJS()
try:
driver.get('http://www.baidu.com') #访问百度首页
driver.save_screenshot('1.png')
driver.get('http://www.sina.com.cn') #访问新浪首页
driver.save_screenshot('2.png')
driver.back() #回退到百度首页
driver.save_screenshot('3.png')
driver.forward() #前进到新浪首页
driver.save_screenshot('4.png')
except Exception as e:
print(e)
driver.quit()
以下是文章关于Python+selenium+phantom JS爬行网页以动态加载内容的介绍。有关Python phantom JS爬行内容的更多信息,请搜索我们之前的文章或继续浏览下面的相关文章页面。我希望你将来会支持我们
时间:2020年2月24日
Python爬虫selenium和phantom JS使用方法解析
1.selenum:构建第三方库。它可以使浏览器完成自动操作2.environment2.1安装:PIP安装selenium2.2获取浏览器驱动程序的下载地址:浏览器版本和驱动程序版本之间的对应表:chromedriver版本支持的chrome版本v2.46 v71-73v2.45
Python爬虫程序使用selenium&;加;Phantom JS抓取Ajax和动态HTML内容
1.introduction在python web爬虫内容提取器中,我们详细解释了核心组件:可插入内容提取器类gsextractor。本文记录了在确定GSR萃取器技术路线时所做的程序设计实验。这是第二部分,实验的第一部分使用XSLT一次性提取静态web内容并将其转换为XML格式,留下了一个问题:如何提取由JavaScript管理的动态内容?所以本文将回答这个问题2.提取动态内容的技术组件。在上一篇文章中,python使用XSLT提取网页数据。要提取的内容直接从网页的源代码中获取。但是,有些Ajax
解释硒和;加;幻影&;加;Python简单地实现了crawler的功能
Selenium一.introduction Selenium是一种用于测试web应用程序自动化程序的工具。测试直接在浏览器中运行,就像真实用户一样。Selenium 2支持驱动真实浏览器(firfoxdriver、iternetexplorerdriver、opera驱动程序、chromedriver),Selenium 2支持驱动非接口浏览器(htmlunit、phantom JS)二.安装windows的第一种方法是下载源代码、安装和下载地址(
Python&;plus;selenium&;plus;phantomjs实现了网页模拟登录和屏幕截图&LPAR;Windows环境&rPar的功能
Python是一种跨平台的计算机编程语言,可以在windows.mac和各种Linux/Unix系统上运行。它是一种面向对象的动态类型语言,最初设计用于编写自动脚本(shell),随着版本的不断更新和新语言功能的增加,越来越多的被用于独立开发。对于大型项目的开发,请访问Python官网下载并安装。在安装过程中,请检查PIP(Python软件包管理工具)安装Python后,打开命令行工具CMD并输入
Python实现了基于phantomjs的图片导入
基于phantomjs的自动化将出现1.flash2.有些基于视图的按钮无法单击,有些按钮是基于flash的(尤其是上载按钮)。Browser.find_element_by_xpath(“./*[@name='swfuload_0'])。Click()#单击上载按钮睡眠(2)AutoIT.Control_set_text(“,”[类:编辑;实例:1]“,Tupian)#上传
Python使用phantomjs屏幕截图网页的方法
示例如下:#!/usr/bin/Python#-*-编码:utf8-*-来自selenium导入webdriver导入OS Driver1=webdriver.Phantom JS(可执行文件路径='/usr/local/bin/Phantom JS')driver1.get(“”)数据=driver1.titledriver1.save_屏幕截图('c
Phantom JS获取呈现的JS网页(Python代码)
最近我需要抓取一个网站,但是页面是在JS渲染后生成的,普通的抓取框架不确定,所以我想用phantomjs来构建一个代理,Python调用phantomjs,似乎没有现成的第三方库(如果有,请通知编辑),我走来走去,发现只有pyspider提供现成的解决方案。经过一次简单的尝试,我觉得pyspider更像是新手的爬行工具,就像一个老处女,有时一丝不苟,有时喋喋不休。轻量级的小玩意应该更受欢迎。我也有一点自私。我可以将它们与我最喜欢的漂亮的东西一起使用汤而不是学习pyquery(pyspide
Python爬虫图像延迟加载技术selenium和phantom JS解析
一.什么是图片的延迟加载?-案例分析:抓取网站管理员材料#!/usr/bin/env Python#-*-编码:UTF-8-*-如果uName==“main”:url=''headers={'用户年龄,则从lxml导入etree导入请求
JS镜像延迟加载技术的实现过程分析
Lazy load技术Lazy load是前端优化的一种有效方式,它极大地改善了用户体验。图片一直是页面加载中的一个很大的流氓。现在图片的大小通常是几兆字节,远远大于代码的大小。原则:页面加载后,只有显示文档的可见区域,其他区域不显示。当用户滚动页面时,判断该区域的位置,生成img标记,并让用户将所使用的相关技术添加到可见区域:向img添加属性(例如数据SRC),将图片的地址分配给他,以便生成img标记,然后将数据SRC的值分配给img SRC(通过dataset.SRC或getattrib)
JS前端实现了两种延迟加载图片的方式&LPAR;lazload&rPar
在实际的项目开发中,我们经常会遇到这样的场景:一个页面上有很多图片,第一个屏幕上大约有一两张图片,所以我们必须一次加载所有图片吗?显然,这很愚蠢,这不仅影响页面渲染速度,而且浪费带宽。这就是我们通常所说的第一个屏幕加载,这是技术现实中使用的技术。想法是惰性地加载图像——将其加载到可见区域。想法:用数据XX替换页面中的所有img属性SRC属性。当页面滚动直到图像出现在可见区域时,使用js获取图像的数据XX值并分配它向Src.About各种宽度和高度:页面可见区域的宽度:document.body.clien
用JavaScript实现图片延迟加载插件的方法
序言在网络上的主要论坛中,特别是网站某些图片类型中,加载图片时采用了一种称为延迟加载的方法。具体来说,当请求页面时,只加载可视区域中的图片,而不加载其他部分中的图片。这些图片只有在出现时才会动态加载r在可视区域,为了节省网络带宽和提高效率,初始加载的速度和具体实现技术并不复杂,下面分别介绍。延迟加载web图像是读取img元素,获取数据SRC(或其他属性名称)的值属性,并给出img SRC,从而实现图像的动态加载机制。这里需要注意的是,img处于初始阶段 查看全部
htmlunit抓取动态网页(
环境搭建准备工具:pyton3.5安装Seleniuminstallpip3seleniumselenium)
Python+selenium+phantom JS抓取网页并动态加载内容
环境建设
准备工具:pyton3.5,硒,幻影
我的电脑已经安装好了python3.5
安装硒
pip3安装selenium
安装phantomjs
根据系统环境下载phantomjs。下载后,将phantomjs.exe解压缩到Python的脚本文件夹中
使用selenium+phantom JS实现简单爬虫
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get('http://www.baidu.com') #加载网页
data = driver.page_source #获取网页文本
driver.save_screenshot('1.png') #截图保存
print(data)
driver.quit()
硒+JS的几种使用方法
在请求头中设置用户代理
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
dcap = dict(DesiredCapabilities.PHANTOMJS) #设置useragent
dcap['phantomjs.page.settings.userAgent'] = ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0 ') #根据需要设置具体的浏览器信息
driver = webdriver.PhantomJS(desired_capabilities=dcap) #封装浏览器信息
driver.get('http://www.baidu.com') #加载网页
data = driver.page_source #获取网页文本
driver.save_screenshot('1.png') #截图保存
print(data)
driver.quit()
请求超时设置
webdriver类中有三种与时间相关的方法:
1.pageLoadTimeout设置加载整页的超时时间。完全加载意味着完全呈现完成,同时执行同步和异步脚本
2.setScriptTimeout设置异步脚本的超时
3.implicitlyWait确定对象的智能等待时间
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.set_page_load_timeout(5) #设置超时时间
driver.get('http://www.baidu.com')
print(driver.title)
driver.quit()
设置浏览器窗口大小
您调用启动的浏览器不是全屏的,这有时会影响我们的一些操作,因此我们可以设置全屏
driver.maximize u Window()#设置全屏
driver.set uu窗口大小('480','800')#将浏览器宽度设置为480,高度设置为800
元素定位
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.set_page_load_timeout(5)
driver.get('http://www.baidu.com')
try:
driver.get('http://www.baidu.com')
driver.find_element_by_id('kw') # 通过ID定位
driver.find_element_by_class_name('s_ipt') # 通过class属性定位
driver.find_element_by_name('wd') # 通过标签name属性定位
driver.find_element_by_tag_name('input') # 通过标签属性定位
driver.find_element_by_css_selector('#kw') # 通过css方式定位
driver.find_element_by_xpath("//input[@id='kw']") # 通过xpath方式定位
driver.find_element_by_link_text("贴吧") # 通过xpath方式定位
print(driver.find_element_by_id('kw').tag_name ) # 获取标签的类型
except Exception as e:
print(e)
driver.quit()
向前或向后操作浏览器
from selenium import webdriver
driver = webdriver.PhantomJS()
try:
driver.get('http://www.baidu.com') #访问百度首页
driver.save_screenshot('1.png')
driver.get('http://www.sina.com.cn') #访问新浪首页
driver.save_screenshot('2.png')
driver.back() #回退到百度首页
driver.save_screenshot('3.png')
driver.forward() #前进到新浪首页
driver.save_screenshot('4.png')
except Exception as e:
print(e)
driver.quit()
以下是文章关于Python+selenium+phantom JS爬行网页以动态加载内容的介绍。有关Python phantom JS爬行内容的更多信息,请搜索我们之前的文章或继续浏览下面的相关文章页面。我希望你将来会支持我们
时间:2020年2月24日
Python爬虫selenium和phantom JS使用方法解析

1.selenum:构建第三方库。它可以使浏览器完成自动操作2.environment2.1安装:PIP安装selenium2.2获取浏览器驱动程序的下载地址:浏览器版本和驱动程序版本之间的对应表:chromedriver版本支持的chrome版本v2.46 v71-73v2.45
Python爬虫程序使用selenium&;加;Phantom JS抓取Ajax和动态HTML内容

1.introduction在python web爬虫内容提取器中,我们详细解释了核心组件:可插入内容提取器类gsextractor。本文记录了在确定GSR萃取器技术路线时所做的程序设计实验。这是第二部分,实验的第一部分使用XSLT一次性提取静态web内容并将其转换为XML格式,留下了一个问题:如何提取由JavaScript管理的动态内容?所以本文将回答这个问题2.提取动态内容的技术组件。在上一篇文章中,python使用XSLT提取网页数据。要提取的内容直接从网页的源代码中获取。但是,有些Ajax
解释硒和;加;幻影&;加;Python简单地实现了crawler的功能
Selenium一.introduction Selenium是一种用于测试web应用程序自动化程序的工具。测试直接在浏览器中运行,就像真实用户一样。Selenium 2支持驱动真实浏览器(firfoxdriver、iternetexplorerdriver、opera驱动程序、chromedriver),Selenium 2支持驱动非接口浏览器(htmlunit、phantom JS)二.安装windows的第一种方法是下载源代码、安装和下载地址(
Python&;plus;selenium&;plus;phantomjs实现了网页模拟登录和屏幕截图&LPAR;Windows环境&rPar的功能
Python是一种跨平台的计算机编程语言,可以在windows.mac和各种Linux/Unix系统上运行。它是一种面向对象的动态类型语言,最初设计用于编写自动脚本(shell),随着版本的不断更新和新语言功能的增加,越来越多的被用于独立开发。对于大型项目的开发,请访问Python官网下载并安装。在安装过程中,请检查PIP(Python软件包管理工具)安装Python后,打开命令行工具CMD并输入
Python实现了基于phantomjs的图片导入
基于phantomjs的自动化将出现1.flash2.有些基于视图的按钮无法单击,有些按钮是基于flash的(尤其是上载按钮)。Browser.find_element_by_xpath(“./*[@name='swfuload_0'])。Click()#单击上载按钮睡眠(2)AutoIT.Control_set_text(“,”[类:编辑;实例:1]“,Tupian)#上传
Python使用phantomjs屏幕截图网页的方法
示例如下:#!/usr/bin/Python#-*-编码:utf8-*-来自selenium导入webdriver导入OS Driver1=webdriver.Phantom JS(可执行文件路径='/usr/local/bin/Phantom JS')driver1.get(“”)数据=driver1.titledriver1.save_屏幕截图('c
Phantom JS获取呈现的JS网页(Python代码)
最近我需要抓取一个网站,但是页面是在JS渲染后生成的,普通的抓取框架不确定,所以我想用phantomjs来构建一个代理,Python调用phantomjs,似乎没有现成的第三方库(如果有,请通知编辑),我走来走去,发现只有pyspider提供现成的解决方案。经过一次简单的尝试,我觉得pyspider更像是新手的爬行工具,就像一个老处女,有时一丝不苟,有时喋喋不休。轻量级的小玩意应该更受欢迎。我也有一点自私。我可以将它们与我最喜欢的漂亮的东西一起使用汤而不是学习pyquery(pyspide
Python爬虫图像延迟加载技术selenium和phantom JS解析
一.什么是图片的延迟加载?-案例分析:抓取网站管理员材料#!/usr/bin/env Python#-*-编码:UTF-8-*-如果uName==“main”:url=''headers={'用户年龄,则从lxml导入etree导入请求
JS镜像延迟加载技术的实现过程分析
Lazy load技术Lazy load是前端优化的一种有效方式,它极大地改善了用户体验。图片一直是页面加载中的一个很大的流氓。现在图片的大小通常是几兆字节,远远大于代码的大小。原则:页面加载后,只有显示文档的可见区域,其他区域不显示。当用户滚动页面时,判断该区域的位置,生成img标记,并让用户将所使用的相关技术添加到可见区域:向img添加属性(例如数据SRC),将图片的地址分配给他,以便生成img标记,然后将数据SRC的值分配给img SRC(通过dataset.SRC或getattrib)
JS前端实现了两种延迟加载图片的方式&LPAR;lazload&rPar
在实际的项目开发中,我们经常会遇到这样的场景:一个页面上有很多图片,第一个屏幕上大约有一两张图片,所以我们必须一次加载所有图片吗?显然,这很愚蠢,这不仅影响页面渲染速度,而且浪费带宽。这就是我们通常所说的第一个屏幕加载,这是技术现实中使用的技术。想法是惰性地加载图像——将其加载到可见区域。想法:用数据XX替换页面中的所有img属性SRC属性。当页面滚动直到图像出现在可见区域时,使用js获取图像的数据XX值并分配它向Src.About各种宽度和高度:页面可见区域的宽度:document.body.clien
用JavaScript实现图片延迟加载插件的方法
序言在网络上的主要论坛中,特别是网站某些图片类型中,加载图片时采用了一种称为延迟加载的方法。具体来说,当请求页面时,只加载可视区域中的图片,而不加载其他部分中的图片。这些图片只有在出现时才会动态加载r在可视区域,为了节省网络带宽和提高效率,初始加载的速度和具体实现技术并不复杂,下面分别介绍。延迟加载web图像是读取img元素,获取数据SRC(或其他属性名称)的值属性,并给出img SRC,从而实现图像的动态加载机制。这里需要注意的是,img处于初始阶段
htmlunit抓取动态网页( 开源java页面分析工具模拟浏览器执行js代码并获取执行)
网站优化 • 优采云 发表了文章 • 0 个评论 • 92 次浏览 • 2021-09-22 12:10
开源java页面分析工具模拟浏览器执行js代码并获取执行)
java htmlunit jsoup在web img选项卡中实现图像
htmlunit是一个开源Java页面分析工具,可以模拟浏览器以执行JS代码并在执行后获取HTML网页代码。
jsoup是一个java html解析器,允许您使用简单的语法获取HTML标记中的属性的值。
如果在JS执行后获得IMG标记的SRC属性值,则可以将图像下载到本地。
所需的maven依赖性:
org.jsoup
jsoup
1.11.3
net.sourceforge.htmlunit
htmlunit
2.33
下载程序中的图像需要三个必须具有参数,即:需要访问网页的URL,需要爬上元素内的IMG图像的CSS选择器,并且将图片保存到本地位置。此外,还有一个可选的参数下载图片的名称。
此外,HtmlUnit也可以设置等待访问web JS负荷的时间,只需修改在源代码中的参数之一。
在staticatool工具类中,根据URL下载图像的代码来自网络。
使用化的HtmlUnit和JSoup框架,得到了很多有趣的事情,比如你获得从网页所需的文本内容,并实现方法是类似的。
编译环境:
Windows,JD伪原创1、 IDEM2020
一些示例代码:
如果要查看程序的完整代码,我可以。
主要主要类:
public class Main {
// 默认保存路径:桌面/img文件夹
private static final String defaultSavePath = "C:\\Users\\ASUS\\Desktop\\img\\";
public static void main(String[] args) throws Exception {
// MainFunction function =
// new MainFunction("https://www.jd.com/", "#J_focus img", "C:\\Users\\ASUS\\Desktop\\img\\") {
// @Override
// int naming(int count) {
// return ++count;
// }
// };
// MainFunction function =
// new MainFunction("http://150.158.165.239/", "img", "C:\\Users\\ASUS\\Desktop\\img\\") {
// @Override
// int naming(int count) {
// return ++count;
// }
// };
MainFunction function =
new MainFunction("https://blog.csdn.net/qq_46239 ... ot%3B, "#asideProfile img", defaultSavePath) {
@Override
int naming(int count) {
return count + 1;
}
};
function.run();
}
}
主功能主函数类
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
/**
* 主要功能类
*/
public class MainFunction {
private final String url;
private final Document document;
private final String cssQuery;
private final String downFilePath;
/**
* 构造函数保存需要访问网站的url
*/
public MainFunction(final String url, final String cssQuery, final String downFilePath) throws Exception{
this.url = url;
this.cssQuery = cssQuery;
this.downFilePath = downFilePath;
//Htmlunit模拟的浏览器,设置css,js等支持及其它的一些简单设置
WebClient browser = new WebClient();
browser.getOptions().setCssEnabled(false);
browser.getOptions().setJavaScriptEnabled(true);
browser.getOptions().setThrowExceptionOnScriptError(false);
//获取页面
HtmlPage htmlPage = browser.getPage(url);
//设置等待js的加载时间
browser.waitForBackgroundJavaScript(2600);
//使用xml的方式解析获取到jsoup的document对象
document = Jsoup.parse(htmlPage.asXml());
System.out.println(document);
// document = Jsoup.connect(url).get();
// System.out.println(document);
}
// 辅助命名
private int count = 1;
/**
* 图片命名规则函数
* 需要被重写
*/
int naming(int count) {
return -1;
}
public void run() throws Exception{
for(Element res : document.select(cssQuery)) {
String imgURL = res.attr("src");
if (imgURL.length() > 1 && imgURL.charAt(0) == '/' && imgURL.charAt(1) == '/')
imgURL = "http:" + imgURL;
Thread.sleep(804);
StaticTool.downImages(downFilePath, (count = naming(count)) + ".png", /*url + */imgURL);
}
}
}
如果您有任何意见,请感谢您的支持。 查看全部
htmlunit抓取动态网页(
开源java页面分析工具模拟浏览器执行js代码并获取执行)
java htmlunit jsoup在web img选项卡中实现图像
htmlunit是一个开源Java页面分析工具,可以模拟浏览器以执行JS代码并在执行后获取HTML网页代码。
jsoup是一个java html解析器,允许您使用简单的语法获取HTML标记中的属性的值。
如果在JS执行后获得IMG标记的SRC属性值,则可以将图像下载到本地。
所需的maven依赖性:
org.jsoup
jsoup
1.11.3
net.sourceforge.htmlunit
htmlunit
2.33
下载程序中的图像需要三个必须具有参数,即:需要访问网页的URL,需要爬上元素内的IMG图像的CSS选择器,并且将图片保存到本地位置。此外,还有一个可选的参数下载图片的名称。
此外,HtmlUnit也可以设置等待访问web JS负荷的时间,只需修改在源代码中的参数之一。
在staticatool工具类中,根据URL下载图像的代码来自网络。
使用化的HtmlUnit和JSoup框架,得到了很多有趣的事情,比如你获得从网页所需的文本内容,并实现方法是类似的。
编译环境:
Windows,JD伪原创1、 IDEM2020
一些示例代码:
如果要查看程序的完整代码,我可以。
主要主要类:
public class Main {
// 默认保存路径:桌面/img文件夹
private static final String defaultSavePath = "C:\\Users\\ASUS\\Desktop\\img\\";
public static void main(String[] args) throws Exception {
// MainFunction function =
// new MainFunction("https://www.jd.com/", "#J_focus img", "C:\\Users\\ASUS\\Desktop\\img\\") {
// @Override
// int naming(int count) {
// return ++count;
// }
// };
// MainFunction function =
// new MainFunction("http://150.158.165.239/", "img", "C:\\Users\\ASUS\\Desktop\\img\\") {
// @Override
// int naming(int count) {
// return ++count;
// }
// };
MainFunction function =
new MainFunction("https://blog.csdn.net/qq_46239 ... ot%3B, "#asideProfile img", defaultSavePath) {
@Override
int naming(int count) {
return count + 1;
}
};
function.run();
}
}
主功能主函数类
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
/**
* 主要功能类
*/
public class MainFunction {
private final String url;
private final Document document;
private final String cssQuery;
private final String downFilePath;
/**
* 构造函数保存需要访问网站的url
*/
public MainFunction(final String url, final String cssQuery, final String downFilePath) throws Exception{
this.url = url;
this.cssQuery = cssQuery;
this.downFilePath = downFilePath;
//Htmlunit模拟的浏览器,设置css,js等支持及其它的一些简单设置
WebClient browser = new WebClient();
browser.getOptions().setCssEnabled(false);
browser.getOptions().setJavaScriptEnabled(true);
browser.getOptions().setThrowExceptionOnScriptError(false);
//获取页面
HtmlPage htmlPage = browser.getPage(url);
//设置等待js的加载时间
browser.waitForBackgroundJavaScript(2600);
//使用xml的方式解析获取到jsoup的document对象
document = Jsoup.parse(htmlPage.asXml());
System.out.println(document);
// document = Jsoup.connect(url).get();
// System.out.println(document);
}
// 辅助命名
private int count = 1;
/**
* 图片命名规则函数
* 需要被重写
*/
int naming(int count) {
return -1;
}
public void run() throws Exception{
for(Element res : document.select(cssQuery)) {
String imgURL = res.attr("src");
if (imgURL.length() > 1 && imgURL.charAt(0) == '/' && imgURL.charAt(1) == '/')
imgURL = "http:" + imgURL;
Thread.sleep(804);
StaticTool.downImages(downFilePath, (count = naming(count)) + ".png", /*url + */imgURL);
}
}
}
如果您有任何意见,请感谢您的支持。
htmlunit抓取动态网页(SEO专员:网站链接的三种类类别与特点,仅供参考)
网站优化 • 优采云 发表了文章 • 0 个评论 • 79 次浏览 • 2021-09-17 23:20
网站中有三种主要的链接类型,以满足不同的企业需求。SEO专家在进行搜索引擎优化时也会选择不同的网站链接方法。今天,小编将介绍网站链接的三种类型和特点,仅供参考
网站links有三种类型:静态链接、伪静态链接和动态链接
静态链接的特点是当客户端访问静态页面时,可以直接提取的静态页面不需要操作数据库。因此,访问速度相对较快,服务器负载很小。对于搜索引擎来说,它还可以节省大量的捕获时间
静态链接最大的特点是考虑搜索引擎优化
动态链接的特点是,如果动态链接中有很多参数(一般我们建议不超过两个参数),很容易使搜索引擎爬虫进入“黑洞”,不利于搜索引擎爬虫的捕获,也不会影响用户的记忆和传播
如何更简单地理解这三通??小编简单介绍一下。动态链接是指当客户端(用户)访问动态网页时,服务器程序需要调用数据库提取网页内容,然后反馈给客户端。因此,有必要在动态网页链接中调用“参数”,也就是说,“参数”将出现在我们经常看到的链接中
伪静态链接是“伪装”的静态,因此伪静态并不直接等同于静态。仅从链接结构的角度来看,它属于静态链接。实际上,服务器上不存在此静态页面。此页面可能是服务器动态语言的页面,如ASP、ASPX、PHP、JSP等
静态链接是服务器上一个独立的静态网页文件路径,通常以后缀(如HTML、HTM、XML、shtml和SHTM)结尾 查看全部
htmlunit抓取动态网页(SEO专员:网站链接的三种类类别与特点,仅供参考)
网站中有三种主要的链接类型,以满足不同的企业需求。SEO专家在进行搜索引擎优化时也会选择不同的网站链接方法。今天,小编将介绍网站链接的三种类型和特点,仅供参考

网站links有三种类型:静态链接、伪静态链接和动态链接
静态链接的特点是当客户端访问静态页面时,可以直接提取的静态页面不需要操作数据库。因此,访问速度相对较快,服务器负载很小。对于搜索引擎来说,它还可以节省大量的捕获时间
静态链接最大的特点是考虑搜索引擎优化
动态链接的特点是,如果动态链接中有很多参数(一般我们建议不超过两个参数),很容易使搜索引擎爬虫进入“黑洞”,不利于搜索引擎爬虫的捕获,也不会影响用户的记忆和传播
如何更简单地理解这三通??小编简单介绍一下。动态链接是指当客户端(用户)访问动态网页时,服务器程序需要调用数据库提取网页内容,然后反馈给客户端。因此,有必要在动态网页链接中调用“参数”,也就是说,“参数”将出现在我们经常看到的链接中
伪静态链接是“伪装”的静态,因此伪静态并不直接等同于静态。仅从链接结构的角度来看,它属于静态链接。实际上,服务器上不存在此静态页面。此页面可能是服务器动态语言的页面,如ASP、ASPX、PHP、JSP等
静态链接是服务器上一个独立的静态网页文件路径,通常以后缀(如HTML、HTM、XML、shtml和SHTM)结尾
htmlunit抓取动态网页(上篇文章“Java爬虫_静态页面”动态爬虫工具介绍)
网站优化 • 优采云 发表了文章 • 0 个评论 • 146 次浏览 • 2021-09-17 05:06
一、crawler简介:请查看我之前的文章“Java crawler静态页面”
二、dynamic crawler工具简介:
1、IDEA,开发工具,创建Maven项目
2、htmlunit:它是一个自动测试工具,集成了下载(httpclient)、DOM(nekohtml)和JS(rhino)
3、otherjar包:JUnit、jsoup、JXL
三、开发过程和相关代码
3.1、createmaven项目
image.png
@k272、pom.xml将项目依赖项添加到
4.0.0
cll
demo
1.0-SNAPSHOT
UTF-8
UTF-8
UTF-8
1.7
1.7
junit
junit
4.11
test
net.sourceforge.htmlunit
htmlunit
2.27
org.jsoup
jsoup
1.8.3
org.apache.poi
poi
3.10.1
com.hynnet
jxl
2.6.12.1
3.3、创建一个Java类qyemailhelper.Java
<p>import CaililiangTools.ConfigHelper;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.*;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.select.Elements;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Properties;
public class QYEmailHelper {
static WebClient webClient=new WebClient(BrowserVersion.CHROME);
ArrayList returnList = new ArrayList();
static String baseUrl ="";
static int num =1;
ConfigHelper configHelper = new ConfigHelper();
Properties properties=null;
//浏览器初始化
public void WebClientInit(){
webClient.getCookieManager().setCookiesEnabled(true);//设置cookie是否可用
webClient.getOptions().setActiveXNative(false);
webClient.getOptions().setRedirectEnabled(true);// 启动客户端重定向
webClient.getOptions().setCssEnabled(false);//禁用Css,可避免自动二次请求CSS进行渲染
webClient.getOptions().setJavaScriptEnabled(true); // 启动JS
webClient.getOptions().setUseInsecureSSL(true);//忽略ssl认证
webClient.getOptions().setThrowExceptionOnScriptError(false);//运行错误时,不抛出异常
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());// 设置Ajax异步
webClient.getOptions().setMaxInMemory(50000);
properties = configHelper.getEmailUserInfos();
}
public void closeWebClient(){
webClient.close();
webClient=new WebClient(BrowserVersion.CHROME);
}
//用户登录并返回收件箱的地址
public String UserLogin(String url,String name,String password) throws Exception{
url = url.replace("param=caill@primeton.com","param="+name);
final HtmlPage page = webClient.getPage(url);
System.err.println("查询中,请稍候");
//TimeUnit.SECONDS.sleep(3); //web请求数据需要时间,必须让主线程休眠片刻
HtmlForm form=page.getForms().get(0);
HtmlPasswordInput txtPwd = (HtmlPasswordInput)form.getInputByName("pp");//密码框
txtPwd.setValueAttribute(password);//设置密码
HtmlSubmitInput submit=(HtmlSubmitInput) form.getInputByValue("登录");
final HtmlPage page2 = (HtmlPage) submit.click();//登录进入
DomElement e =page2.getElementById("folder_1");
HtmlPage page3 = webClient.getPage("https://mail.primeton.com"+e.getAttribute("href"));
//TimeUnit.SECONDS.sleep(3); //web请求数据需要时间,必须让主线程休眠片刻
HtmlInlineFrame frame1 = (HtmlInlineFrame)page3.getElementById("mainFrame");
String src = frame1.getAttribute("src");
baseUrl="https://mail.primeton.com"+src;
return "https://mail.primeton.com"+src;
}
//抓取Url中的数据
public long getHtmlPage(String url,long startTime,long endTime) throws Exception{
HashMap returnMap = new HashMap();
long endTime2=0L;
HtmlPage page = webClient.getPage(url);
HtmlBody tbody = (HtmlBody) page.getBody();
DomNodeList lists = tbody.getElementsByTagName("table");
//System.out.println( page.asXml());
for(HtmlElement he:lists){
long time =0L;
HashMap results = new HashMap();
String xml = he.asXml();
if(xml.startsWith(" 查看全部
htmlunit抓取动态网页(上篇文章“Java爬虫_静态页面”动态爬虫工具介绍)
一、crawler简介:请查看我之前的文章“Java crawler静态页面”
二、dynamic crawler工具简介:
1、IDEA,开发工具,创建Maven项目
2、htmlunit:它是一个自动测试工具,集成了下载(httpclient)、DOM(nekohtml)和JS(rhino)
3、otherjar包:JUnit、jsoup、JXL
三、开发过程和相关代码
3.1、createmaven项目
image.png
@k272、pom.xml将项目依赖项添加到
4.0.0
cll
demo
1.0-SNAPSHOT
UTF-8
UTF-8
UTF-8
1.7
1.7
junit
junit
4.11
test
net.sourceforge.htmlunit
htmlunit
2.27
org.jsoup
jsoup
1.8.3
org.apache.poi
poi
3.10.1
com.hynnet
jxl
2.6.12.1
3.3、创建一个Java类qyemailhelper.Java
<p>import CaililiangTools.ConfigHelper;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.*;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.select.Elements;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Properties;
public class QYEmailHelper {
static WebClient webClient=new WebClient(BrowserVersion.CHROME);
ArrayList returnList = new ArrayList();
static String baseUrl ="";
static int num =1;
ConfigHelper configHelper = new ConfigHelper();
Properties properties=null;
//浏览器初始化
public void WebClientInit(){
webClient.getCookieManager().setCookiesEnabled(true);//设置cookie是否可用
webClient.getOptions().setActiveXNative(false);
webClient.getOptions().setRedirectEnabled(true);// 启动客户端重定向
webClient.getOptions().setCssEnabled(false);//禁用Css,可避免自动二次请求CSS进行渲染
webClient.getOptions().setJavaScriptEnabled(true); // 启动JS
webClient.getOptions().setUseInsecureSSL(true);//忽略ssl认证
webClient.getOptions().setThrowExceptionOnScriptError(false);//运行错误时,不抛出异常
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());// 设置Ajax异步
webClient.getOptions().setMaxInMemory(50000);
properties = configHelper.getEmailUserInfos();
}
public void closeWebClient(){
webClient.close();
webClient=new WebClient(BrowserVersion.CHROME);
}
//用户登录并返回收件箱的地址
public String UserLogin(String url,String name,String password) throws Exception{
url = url.replace("param=caill@primeton.com","param="+name);
final HtmlPage page = webClient.getPage(url);
System.err.println("查询中,请稍候");
//TimeUnit.SECONDS.sleep(3); //web请求数据需要时间,必须让主线程休眠片刻
HtmlForm form=page.getForms().get(0);
HtmlPasswordInput txtPwd = (HtmlPasswordInput)form.getInputByName("pp");//密码框
txtPwd.setValueAttribute(password);//设置密码
HtmlSubmitInput submit=(HtmlSubmitInput) form.getInputByValue("登录");
final HtmlPage page2 = (HtmlPage) submit.click();//登录进入
DomElement e =page2.getElementById("folder_1");
HtmlPage page3 = webClient.getPage("https://mail.primeton.com"+e.getAttribute("href"));
//TimeUnit.SECONDS.sleep(3); //web请求数据需要时间,必须让主线程休眠片刻
HtmlInlineFrame frame1 = (HtmlInlineFrame)page3.getElementById("mainFrame");
String src = frame1.getAttribute("src");
baseUrl="https://mail.primeton.com"+src;
return "https://mail.primeton.com"+src;
}
//抓取Url中的数据
public long getHtmlPage(String url,long startTime,long endTime) throws Exception{
HashMap returnMap = new HashMap();
long endTime2=0L;
HtmlPage page = webClient.getPage(url);
HtmlBody tbody = (HtmlBody) page.getBody();
DomNodeList lists = tbody.getElementsByTagName("table");
//System.out.println( page.asXml());
for(HtmlElement he:lists){
long time =0L;
HashMap results = new HashMap();
String xml = he.asXml();
if(xml.startsWith("
htmlunit抓取动态网页(JavaHTML4支持代理服务器(5)支持自动的Cookies管理)
网站优化 • 优采云 发表了文章 • 0 个评论 • 153 次浏览 • 2021-09-16 06:14
(4)support代理服务器)
(5)支持自动cookie管理等)
Jsoup
Jsoup是一个Java HTML解析器,它可以直接解析URL地址和HTML文本内容。它提供了一个非常省力的API,可以通过DOM、CSS和类似于jQuery的操作方法获取和操作数据
网页获取和解析的速度很快,这是推荐的
主要功能如下:
从URL、文件或字符串解析HTML;使用DOM或CSS选择器查找和检索数据;操作HTML元素、属性和文本;htmlunit
Htmlunit是一个开源Java页面分析工具。阅读页面后,您可以有效地使用htmlunit分析页面上的内容。该项目可以模拟浏览器操作,称为Java浏览器的开源实现。这种没有界面的浏览器运行速度也很快。它使用rhinojs引擎来模拟JS操作
???坦率地说,它是一个用Java编写的浏览器,没有接口。因为它没有接口,执行速度仍然会下降。Htmlunit提供了一系列API,可以执行许多功能,例如填写表单、提交表单、模拟单击链接。由于内置rhinojs引擎,可以执行JavaScript
网页获取和解析速度快,性能好。建议用于需要解析网页脚本的应用程序场景
瓦蒂
Watij(发音为wattage)是一个用Java开发的web应用程序测试工具。鉴于watij的简单性和Java语言的强大功能,watij可以让您在真正的浏览器中完成web应用程序的自动测试。因为它调用本地浏览器,所以支持CSS呈现和JS执行
获取网页的速度是平均的。IE版本过低(6/7))时可能会发生内存泄漏
建议使用htmlunit进行网页捕获,主要原因是:
Htmlunit是“Java程序的无Gui浏览器”。它为HTML文档建模,并提供一个API,允许您调用页面、填写表单、单击链接等,就像在“普通”浏览器中一样。它有很好的JavaScript支持(持续改进),您甚至可以根据使用的配置使用相当复杂的Ajax库来模拟chrome、Firefox或Internet Explorer。它通常用于测试或从网站检索信息
Maven导入jar包:
net.sourceforge.htmlunit htmlunit 2.30 net.sourceforge.htmlunit htmlunit-core-js 2.28 net.sourceforge.htmlunit htmlunit-cssparser 1.0.0 //引入jsoup来对网页进行解析 org.jsoup jsoup 1.11.3 net.sourceforge.htmlunit neko-htmlunit 2.30
下面是一个例子。创建一个web客户端,让它从一定程度上加载主页。然后我们打印页面标题是否正确。Getpage()根据返回数据的内容类型,可以返回不同类型的页面。在本例中,我们希望内容类型为text/HTML,因此我们将结果转换为com.gargoylesoftware.htmlun.HTML.htmlpage
非常方便:
import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlPage; public class Test { public void homPage() throws Exception { try (final WebClient webClient = new WebClient()) { final HtmlPage page = webClient.getPage("http://www.baidu.com"); System.out.println(page.getTitleText()); } } public static void main(String[] args) { try { new Test().homPage(); } catch (Exception e) { e.printStackTrace(); } } } 打印结果: 百度一下,你就知道 Process finished with exit code 0
有关具体的介绍性案例和API,请参阅官方文件
原文: 查看全部
htmlunit抓取动态网页(JavaHTML4支持代理服务器(5)支持自动的Cookies管理)
(4)support代理服务器)
(5)支持自动cookie管理等)
Jsoup
Jsoup是一个Java HTML解析器,它可以直接解析URL地址和HTML文本内容。它提供了一个非常省力的API,可以通过DOM、CSS和类似于jQuery的操作方法获取和操作数据
网页获取和解析的速度很快,这是推荐的
主要功能如下:
从URL、文件或字符串解析HTML;使用DOM或CSS选择器查找和检索数据;操作HTML元素、属性和文本;htmlunit
Htmlunit是一个开源Java页面分析工具。阅读页面后,您可以有效地使用htmlunit分析页面上的内容。该项目可以模拟浏览器操作,称为Java浏览器的开源实现。这种没有界面的浏览器运行速度也很快。它使用rhinojs引擎来模拟JS操作
???坦率地说,它是一个用Java编写的浏览器,没有接口。因为它没有接口,执行速度仍然会下降。Htmlunit提供了一系列API,可以执行许多功能,例如填写表单、提交表单、模拟单击链接。由于内置rhinojs引擎,可以执行JavaScript
网页获取和解析速度快,性能好。建议用于需要解析网页脚本的应用程序场景
瓦蒂
Watij(发音为wattage)是一个用Java开发的web应用程序测试工具。鉴于watij的简单性和Java语言的强大功能,watij可以让您在真正的浏览器中完成web应用程序的自动测试。因为它调用本地浏览器,所以支持CSS呈现和JS执行
获取网页的速度是平均的。IE版本过低(6/7))时可能会发生内存泄漏
建议使用htmlunit进行网页捕获,主要原因是:
Htmlunit是“Java程序的无Gui浏览器”。它为HTML文档建模,并提供一个API,允许您调用页面、填写表单、单击链接等,就像在“普通”浏览器中一样。它有很好的JavaScript支持(持续改进),您甚至可以根据使用的配置使用相当复杂的Ajax库来模拟chrome、Firefox或Internet Explorer。它通常用于测试或从网站检索信息
Maven导入jar包:
net.sourceforge.htmlunit htmlunit 2.30 net.sourceforge.htmlunit htmlunit-core-js 2.28 net.sourceforge.htmlunit htmlunit-cssparser 1.0.0 //引入jsoup来对网页进行解析 org.jsoup jsoup 1.11.3 net.sourceforge.htmlunit neko-htmlunit 2.30
下面是一个例子。创建一个web客户端,让它从一定程度上加载主页。然后我们打印页面标题是否正确。Getpage()根据返回数据的内容类型,可以返回不同类型的页面。在本例中,我们希望内容类型为text/HTML,因此我们将结果转换为com.gargoylesoftware.htmlun.HTML.htmlpage
非常方便:
import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlPage; public class Test { public void homPage() throws Exception { try (final WebClient webClient = new WebClient()) { final HtmlPage page = webClient.getPage("http://www.baidu.com"); System.out.println(page.getTitleText()); } } public static void main(String[] args) { try { new Test().homPage(); } catch (Exception e) { e.printStackTrace(); } } } 打印结果: 百度一下,你就知道 Process finished with exit code 0
有关具体的介绍性案例和API,请参阅官方文件
原文:
htmlunit抓取动态网页(网络爬虫软件从指定网页获取特定内容的几种解决方案)
网站优化 • 优采云 发表了文章 • 0 个评论 • 96 次浏览 • 2021-09-15 09:22
摘要:对于程序员或开发人员来说,构建一个具有编程能力的网页数据爬行程序是非常简单和有趣的。然而,对于大多数没有任何编程知识的人来说,最好使用一些网络爬虫软件从指定的网页获取特定的内容
网页数据抓取是指从网站中提取特定内容,而不需要网站的API接口获取内容。“Web数据”作为网站用户体验的一部分,例如网页上的文本、图像、声音、视频和动画,都是Web数据
对于程序员或开发人员来说,拥有编程能力使他们构建网页数据爬行程序变得非常简单和有趣。然而,对于大多数没有任何编程知识的人来说,最好使用一些网络爬虫软件从指定的网页获取特定内容。以下是使用优采云采集器获取网页数据的一些解决方案:
1、从动态网页中提取内容
网页可以是静态的,也可以是动态的。通常,要提取的网页内容会随着访问时间的变化而变化网站. 通常,这个网站是一个动态的网站,它使用Ajax技术或其他技术来及时更新web内容。AJAX是一种延迟加载和异步更新的脚本技术。通过在后台与服务器进行少量数据交换,可以更新网页的一部分,而无需重新加载整个网页
性能特点是,当点击网页中的一个选项时,大多数网站网址不会改变;网页未完全加载,但数据在本地加载并更改。此时,您可以在优采云element的“高级选项”的“Ajax加载”中进行设置,您可以抓取Ajax加载的网页数据
优采云中的Ajax设置@
2、从网页中抓取隐藏内容
您是否想过从网站获取特定数据,但当您触发链接或将鼠标悬停在某处时,内容会出现?例如,下图中的网站需要移动鼠标选择彩票以显示分类。对于此功能,您可以设置“将鼠标移动到此链接”以获取网页中的隐藏内容
将鼠标移到链接上的content采集方法上
3、从无限滚动的网页中提取内容
滚动到页面底部后,一些网站只显示您要提取的部分数据。例如,在今天头条新闻的首页上,您需要不断滚动到页面底部以加载更多文章内容。网站with unlimited scrolling通常使用Ajax或JavaScript从网站. 在这种情况下,您可以设置Ajax超时设置,并选择滚动方法和滚动时间以从网页中提取内容
4、从网页抓取所有链接
普通的网站将至少收录一个超链接。如果要从网页中提取所有链接,可以使用优采云获取网页上发布的所有超链接
5、从网页抓取所有文本
有时,您需要提取HTML文档中的所有文本,也就是说,将其放在HTML标记中(例如
标记之间优采云允许您从网页的源代码中提取所有或特定文本
6、从网页抓取所有图像
有些朋友有采集网页图片优采云你可以在网页中添加图片URL采集然后,通过下载并使用优采云特殊图像批量下载工具,我们可以将图像URL we采集中的图像下载并保存到本地计算机 查看全部
htmlunit抓取动态网页(网络爬虫软件从指定网页获取特定内容的几种解决方案)
摘要:对于程序员或开发人员来说,构建一个具有编程能力的网页数据爬行程序是非常简单和有趣的。然而,对于大多数没有任何编程知识的人来说,最好使用一些网络爬虫软件从指定的网页获取特定的内容
网页数据抓取是指从网站中提取特定内容,而不需要网站的API接口获取内容。“Web数据”作为网站用户体验的一部分,例如网页上的文本、图像、声音、视频和动画,都是Web数据
对于程序员或开发人员来说,拥有编程能力使他们构建网页数据爬行程序变得非常简单和有趣。然而,对于大多数没有任何编程知识的人来说,最好使用一些网络爬虫软件从指定的网页获取特定内容。以下是使用优采云采集器获取网页数据的一些解决方案:
1、从动态网页中提取内容
网页可以是静态的,也可以是动态的。通常,要提取的网页内容会随着访问时间的变化而变化网站. 通常,这个网站是一个动态的网站,它使用Ajax技术或其他技术来及时更新web内容。AJAX是一种延迟加载和异步更新的脚本技术。通过在后台与服务器进行少量数据交换,可以更新网页的一部分,而无需重新加载整个网页
性能特点是,当点击网页中的一个选项时,大多数网站网址不会改变;网页未完全加载,但数据在本地加载并更改。此时,您可以在优采云element的“高级选项”的“Ajax加载”中进行设置,您可以抓取Ajax加载的网页数据

优采云中的Ajax设置@
2、从网页中抓取隐藏内容
您是否想过从网站获取特定数据,但当您触发链接或将鼠标悬停在某处时,内容会出现?例如,下图中的网站需要移动鼠标选择彩票以显示分类。对于此功能,您可以设置“将鼠标移动到此链接”以获取网页中的隐藏内容

将鼠标移到链接上的content采集方法上
3、从无限滚动的网页中提取内容
滚动到页面底部后,一些网站只显示您要提取的部分数据。例如,在今天头条新闻的首页上,您需要不断滚动到页面底部以加载更多文章内容。网站with unlimited scrolling通常使用Ajax或JavaScript从网站. 在这种情况下,您可以设置Ajax超时设置,并选择滚动方法和滚动时间以从网页中提取内容

4、从网页抓取所有链接
普通的网站将至少收录一个超链接。如果要从网页中提取所有链接,可以使用优采云获取网页上发布的所有超链接
5、从网页抓取所有文本
有时,您需要提取HTML文档中的所有文本,也就是说,将其放在HTML标记中(例如
标记之间优采云允许您从网页的源代码中提取所有或特定文本
6、从网页抓取所有图像
有些朋友有采集网页图片优采云你可以在网页中添加图片URL采集然后,通过下载并使用优采云特殊图像批量下载工具,我们可以将图像URL we采集中的图像下载并保存到本地计算机
htmlunit抓取动态网页(1.HtmlUnit的学习方法是什么?怎么样?HtmlUnit)
网站优化 • 优采云 发表了文章 • 0 个评论 • 74 次浏览 • 2021-09-15 03:18
1.HtmlUnit 是一个用java编写的无界面浏览器,建模html文档,通过API调用页面,填写表单,点击链接等,像普通浏览器一样操作。通常用于测试和从网页中获取信息。而且HtmlUnit兼有HttpClient和souce的功能,但是速度比较慢,但是如果取消它解析css和js的功能,速度会提高,默认开启。
2.这里我选择HtmlUnit爬取数据主要是为了获取他的js和css。
3.主要代码如下
package com.los;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.DomElement;
import com.gargoylesoftware.htmlunit.html.DomNodeList;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.los.util.DownlandPic;
import java.io.IOException;
import java.util.regex.Pattern;
public class HtmlUnitTest {
public static void main(String[] args) throws IOException {
DownlandPic dd = new DownlandPic();
WebClient webClient = new WebClient();//实例化web客户端
//http://www.bdqn.cn/ https://www.baidu.com/?tn=78000241_22_hao_pg
String url = "http://www.bdqn.cn/";
HtmlPage page = webClient.getPage(url);
webClient.waitForBackgroundJavaScript(10000); //等侍js脚本执行完成
System.out.println(page.asXml());
DomNodeList img = page.getElementsByTagName("script");
for (int i=0;i 0) {
output.write(buffer, 0, length);
}
fileOutputStream.write(output.toByteArray());
dataInputStream.close();
fileOutputStream.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static int getCharacterPosition3(String string){
//这里是获取"\""符号的位置
Matcher slashMatcher = Pattern.compile("\"").matcher(string);
int mIdx = 0;
while(slashMatcher.find()) {
mIdx++;
//当"/"符号第三次出现的位置
if(mIdx == 2){
break;
}
}
return slashMatcher.start();
}
public static int getCharacterPosition4(String string){
//这里是获取"\""符号的位置
Matcher slashMatcher = Pattern.compile("\"").matcher(string);
int mIdx = 0;
while(slashMatcher.find()) {
mIdx++;
//当"/"符号第三次出现的位置
if(mIdx == 3){
break;
}
}
return slashMatcher.start();
}
public static void main(String[] args) {
String content = "<img class=\"lazy\" data-original=\"/img/newImg/news_img2.jpg\" src=\"/img/newImg/news2.jpg\" style=\"display: block;\"/>";
System.out.println(getCharacterPosition3(content));
System.out.println(getCharacterPosition4(content));
String substring = content.substring(getCharacterPosition3(content), getCharacterPosition4(content));
System.out.println(substring);
}
}
3.因为这里网页中的图片地址是相对路径,下载的时候在页面上找到了绝对路径,拼接在下载地址中。下载的路径必须与抓取后存储在本地页面的图片标签中的地址相对应,否则找不到。
3.匹配"时,之所以写2和3是根据这里爬取的数据。
4.与其他爬取网页的方式相比,这可能更简单,但很容易体现效果。如果有错误,请给我们您的建议。至于页面,则不会显示,涉及隐私。
5.学习HtmlUnit请参考:地址 查看全部
htmlunit抓取动态网页(1.HtmlUnit的学习方法是什么?怎么样?HtmlUnit)
1.HtmlUnit 是一个用java编写的无界面浏览器,建模html文档,通过API调用页面,填写表单,点击链接等,像普通浏览器一样操作。通常用于测试和从网页中获取信息。而且HtmlUnit兼有HttpClient和souce的功能,但是速度比较慢,但是如果取消它解析css和js的功能,速度会提高,默认开启。
2.这里我选择HtmlUnit爬取数据主要是为了获取他的js和css。
3.主要代码如下
package com.los;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.DomElement;
import com.gargoylesoftware.htmlunit.html.DomNodeList;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.los.util.DownlandPic;
import java.io.IOException;
import java.util.regex.Pattern;
public class HtmlUnitTest {
public static void main(String[] args) throws IOException {
DownlandPic dd = new DownlandPic();
WebClient webClient = new WebClient();//实例化web客户端
//http://www.bdqn.cn/ https://www.baidu.com/?tn=78000241_22_hao_pg
String url = "http://www.bdqn.cn/";
HtmlPage page = webClient.getPage(url);
webClient.waitForBackgroundJavaScript(10000); //等侍js脚本执行完成
System.out.println(page.asXml());
DomNodeList img = page.getElementsByTagName("script");
for (int i=0;i 0) {
output.write(buffer, 0, length);
}
fileOutputStream.write(output.toByteArray());
dataInputStream.close();
fileOutputStream.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static int getCharacterPosition3(String string){
//这里是获取"\""符号的位置
Matcher slashMatcher = Pattern.compile("\"").matcher(string);
int mIdx = 0;
while(slashMatcher.find()) {
mIdx++;
//当"/"符号第三次出现的位置
if(mIdx == 2){
break;
}
}
return slashMatcher.start();
}
public static int getCharacterPosition4(String string){
//这里是获取"\""符号的位置
Matcher slashMatcher = Pattern.compile("\"").matcher(string);
int mIdx = 0;
while(slashMatcher.find()) {
mIdx++;
//当"/"符号第三次出现的位置
if(mIdx == 3){
break;
}
}
return slashMatcher.start();
}
public static void main(String[] args) {
String content = "<img class=\"lazy\" data-original=\"/img/newImg/news_img2.jpg\" src=\"/img/newImg/news2.jpg\" style=\"display: block;\"/>";
System.out.println(getCharacterPosition3(content));
System.out.println(getCharacterPosition4(content));
String substring = content.substring(getCharacterPosition3(content), getCharacterPosition4(content));
System.out.println(substring);
}
}
3.因为这里网页中的图片地址是相对路径,下载的时候在页面上找到了绝对路径,拼接在下载地址中。下载的路径必须与抓取后存储在本地页面的图片标签中的地址相对应,否则找不到。
3.匹配"时,之所以写2和3是根据这里爬取的数据。
4.与其他爬取网页的方式相比,这可能更简单,但很容易体现效果。如果有错误,请给我们您的建议。至于页面,则不会显示,涉及隐私。
5.学习HtmlUnit请参考:地址