Less.Html 示例四:与 WebBrowser 的配合使用,以抓取京东手机价格为例
来源:互联网 发布:java fixflow流程设计 编辑:程序博客网 时间:2024/04/29 23:07
很多网页使用了 ajax 技术,浏览器地址栏的链接并不返回全部的内容,而是在加载文档之后,采用异步的请求获取对应的内容。京东商城的商品价格就是 ajax 获取的。这样做有可能是为了优化速度,也有可能是为了防止抓取,或者两者都有。这种网页单纯用 WebClient 无法得到和浏览器访问相同的内容,需要使用 WebBrowser 控件,这个控件相当于在程序中嵌入了一个 IE 浏览器,可以运行网页的脚本,也就可以得到 ajax 请求的内容了。
我写了一个示例四,演示了 Less.Html 和 WebBrowser 的搭配使用。之所要使用 Less.Html,是因为 WebBrowser 只能得到网页的 HTML DOM,DOM 的方法对于获取指定元素的内容是不太方便的,利用 Less.Html 的 css 选择器,可以快速地获取你想要的内容。
源代码:GitHub 码云
这个示例有两个要点,一个是异步线程去检查 ajax 是否完成加载,之所以要使用异步线程,是因为不能阻塞 WebBrowser 的线程;第二个就是使用 Less.Html 的 css 选择器快速获取内容的部分了。这是可以直接用在实际的项目中的,所以我选择了抓取京东手机价格为例:
//获取页面所有的商品var sku = q(".j-sku-item");
foreach (Element i in sku){ //商品名称 string name = q(i).find( ".p-name a em").text(); //商品价格 string price = q(i).find( ".p-price .J_price:first").text();}
代码中使用了三次 css 选择器,作用如注释所示。相比 WebBrowser 的 DOM 方法,搭配 Less.Html 可以大幅度地提升开发速度。
我在示例中隐藏了 Form,是通过 Console 去开进程调用 Form,然后把 Form 的输出重定向到 Console 的,在程序的运行过程中感觉不到 WebBrowser 的存在。运行示例需要把 Test 这个控制台项目设为启动项目,运行结果如下:
- Less.Html 示例四:与 WebBrowser 的配合使用,以抓取京东手机价格为例
- Less.Html 示例三:与 WebClient 的配合使用,以抓取 CSDN 论坛内容为例
- Less.Html 示例二:以 Less.Html 做视图引擎
- html与cgi脚本的配合使用
- 开源JPEG图像(解)压缩库libjpeg的编译与使用示例(以VS2010为例)
- 以京东为例简单的写下抓取动态数据
- html与css的配合
- scrapy 抓取ajax请求的网页-以ifanr为例
- 用正则表达式抓取制定网页的特定内容(本文以抓取a标签为例)
- html中使用Ajax与后台接口api交互(以登录功能为例)
- html中使用Ajax与后台接口api交互(以登录功能为例)
- 队列和事件的配合使用示例
- HTML的表单元素与Struts的FormBean关联实验(以Struts的helloapp为例)
- 以WebBrowser.DocumentCompleted 事件为例,说明用C#如何完成事件的订阅处理。
- .Net 以WebBrowser.DocumentCompleted 事件为例,说明用C#如何完成事件的订阅处理
- 以WebBrowser.DocumentCompleted 事件为例,说明用C#如何完成事件的订阅处理。
- Dephi中获取webbrowser选取区域的html代码示例
- 以Android环境为例的多线程学习笔记(四)----------Callable与Future
- 在美国,信用到底能有多重要?
- ArcGIS Runtime SDK for .NET 100.0中如何执行.gpk(二)
- Linux centOS 硬盘分区挂载
- 处理Gradle中的这个文件下载慢的问题的?
- vue踩坑不完全指北(3)
- Less.Html 示例四:与 WebBrowser 的配合使用,以抓取京东手机价格为例
- 阮一峰关于deferred 详解
- 欢迎使用CSDN-markdown编辑器
- Android MVP
- mvc 过滤器验证身份 排除指定不验证action
- EasyUI jqprint Web打印
- master editor4 for linux剪裁快速剪裁pdf
- mybaits中使用二级缓存
- java项目登录时候出现session error