Less.Html 示例四:与 WebBrowser 的配合使用,以抓取京东手机价格为例

原创 2017年06月29日 11:57:11

很多网页使用了 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 这个控制台项目设为启动项目,运行结果如下:

京东商城手机频道商品价格信息的抓取

在做页面解析时,最大难度在于对动态数据的抓取,特别是由ajax加载的内容。目前对这方面的处理还没很好的解决方案,,虽然有htmlunit之类的模拟浏览器运行工具包,但是其效率以及准确性远远不能满足实际...
  • km1218
  • km1218
  • 2014年11月19日 16:52
  • 2367

【Python爬虫】按时爬取京东几类自营手机型号价格参数并存入数据库

一、最近刚好想换手机,然后就想知道京东上心仪的手机价格如何,对比手机价格如何,以及相应的历史价格,然后就用Python requests+MySQLdb+smtplib爬取相关的数据二、关于实现的主要...
  • xingzpo5
  • xingzpo5
  • 2016年11月06日 00:52
  • 538

Less.Html 示例三:与 WebClient 的配合使用,以抓取 CSDN 论坛内容为例

WebClient 是做内容采集经常会用到的类,提供了方便的获取网页内容的方法。但是获取到的是字符串类型,如果使用 Less.Html 解析成节点树,可以大大的加快开发的速度: WebClient c...
  • closurer
  • closurer
  • 2017年06月27日 12:46
  • 203

python抓取京东商城的商品名称和价格

突然心血来潮想抓一个京东的商品价格,突然发现网页的源码里没有价格这一项,只有商品的编号,网上说是显示的同事js从数据库里取出商品价格,放在页面上,那么我只能模拟请求了。哇咔咔,记得去你给京东投简历之后...
  • djd1234567
  • djd1234567
  • 2015年04月29日 01:06
  • 7180

利用python抓取京东的数据

# -*- coding: utf-8 -*- import json; import urllib.request; from pandas import Series; from pandas ...
  • ailinyingai
  • ailinyingai
  • 2016年02月15日 10:29
  • 1482

爬取京东商品价格和评论数

1、爬取价格 http://p.3.cn/prices/mgets?skuIds=J_1397092632,J_&type=1 其中1397092632是商品的id 返回的是个json格式的数据...
  • menghuannvxia
  • menghuannvxia
  • 2016年05月06日 18:18
  • 3184

爬虫案例---Python2X版本抓取京东手机页面的图片

京东爬虫案例:大致分析: 产品的每一页的请求接口都是一样的 只是传递的参数不一样,也就是后边的page  ,1对应第一页 https://list.jd.com/list.html?cat=9987,...
  • zq019
  • zq019
  • 2017年12月01日 14:57
  • 695

python3[爬虫实战] 使用selenium,xpath爬取京东手机(上)

当然了,这个任务也是从QQ群里面接过来的,主要是想提升自己的技术,一接过来是很开心的,但是,接完之后,写了又写,昨晚写了3小时,前提晚上写了2小时,搞的有些晚了,搞来搞去就卡在一个地方了,希望懂的大神...
  • xudailong_blog
  • xudailong_blog
  • 2017年09月20日 23:47
  • 265

PYTHO 爬虫,抓去京东产品价格DEMO

# -*- coding:utf-8 -*- import urllib import urllib2 import time import hashlib import requests from...
  • a22698488
  • a22698488
  • 2017年06月30日 13:01
  • 160

CK2255-以慕课网日志分析为例 进入大数据 Spark SQL 的世界

CK2255-以慕课网日志分析为例 进入大数据 Spark SQL 的世界 新年伊始,学习要趁早,点滴记录,学习就是进步! 随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到程序...
  • cadn_jueying
  • cadn_jueying
  • 2018年01月23日 22:29
  • 93
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Less.Html 示例四:与 WebBrowser 的配合使用,以抓取京东手机价格为例
举报原因:
原因补充:

(最多只允许输入30个字)