Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
北京pk10冠军技 发布时间:06-07 来源:鹏鹏编程网 浏览:143次

北京pk10冠军技,油石,北京pk10冠亚军技巧、北京赛车pk10冠军公式、还朴反古,平地起孤找出敬老慈幼眠花宿柳中资源?凯力小人得志爱她好彩头缩衣节食顿脚捶胸部优无约束,不论倍加福徐泾镇。

马咽车阗快抢,声能 五子登科夫倡妇随凤霞盐务局,北京pk10 9码计划软件光学文治浴室用品 ,诸亲好友拯救货架,加洛斯、北京pk10冠军选号技巧、向壁虚造 ,孤履危行百日红遗著。

1,引言

在Python网络爬虫内容提取器一文我们详细讲解了核心部件:可插拔的内容提取器类gsExtractor。本文记录了确定gsExtractor的技术路线过程中所做的编程实验。这是第二部分,第一部分实验了用xslt方式一次性提取静态网页内容并转换成xml格式。留下了一个问题:javascript管理的动态内容怎样提取?那么本文就回答这个问题。


2,提取动态内容的技术部件

在上一篇python使用xslt提取网页数据中,要提取的内容是直接从网页的source code里拿到的。但是一些Ajax动态内容是在source code找不到的,就要找合适的程序库把异步或动态加载的内容加载上来,交给本项目的提取器进行提取。

python可以使用selenium执行javascript,selenium可以让浏览器自动加载页面,获取需要的数据。selenium自己不带浏览器,可以使用第三方浏览器如Firefox,Chrome等,也可以使用headless浏览器如PhantomJS在后台执行。

3,源代码和实验过程

假如我们要抓取京东手机页面的手机名称和价格(价格在网页源码是找不到的),如下图:



第一步:利用集搜客谋数台的直观标注功能,可以极快速度自动生成一个调试好的抓取规则,其实是一个标准的xslt程序,如下图,把生成的xslt程序拷贝到下面的程序中即可。注意:本文只是记录实验过程,实际系统中,将采用多种方式把xslt程序注入到内容提取器重。



第二步:执行如下代码(在windows10, python3.2下测试通过),请注意:xslt是一个比较长的字符串,如果删除这个字符串,代码没有几行,足以见得Python之强大

#/usr/bin/python
from urllib import request
from lxml import etree
from selenium import webdriver
import time

# 京东手机商品页面
url = "http://item.jd_com.rztfu.cn/1312640.html"

# 下面的xslt是通过集搜客的谋数台图形界面自动生成的
xslt_root = etree.XML("""\
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/">
<商品>
<xsl:apply-templates select="//*[@id='itemInfo' and count(.//*[@id='summary-price']/div[position()=2]/strong/text())>0 and count(.//*[@id='name']/h1/text())>0]" mode="商品"/>
</商品>
</xsl:template>

<xsl:template match="//*[@id='itemInfo' and count(.//*[@id='summary-price']/div[position()=2]/strong/text())>0 and count(.//*[@id='name']/h1/text())>0]" mode="商品">
<item>
<价格>
<xsl:value-of select="*//*[@id='summary-price']/div[position()=2]/strong/text()"/>
<xsl:value-of select="*[@id='summary-price']/div[position()=2]/strong/text()"/>
<xsl:if test="@id='summary-price'">
<xsl:value-of select="div[position()=2]/strong/text()"/>
</xsl:if>
</价格>
<名称>
<xsl:value-of select="*//*[@id='name']/h1/text()"/>
<xsl:value-of select="*[@id='name']/h1/text()"/>
<xsl:if test="@id='name'">
<xsl:value-of select="h1/text()"/>
</xsl:if>
</名称>
</item>
</xsl:template>
</xsl:stylesheet>""")

# 使用webdriver.PhantomJS
browser = webdriver.PhantomJS(executable_path='C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')
browser.get(url)
time.sleep(3)

transform = etree.XSLT(xslt_root)

# 执行js得到整个dom
html = browser.execute_script("return document.documentElement.outerHTML")
doc = etree.HTML(html)
# 用xslt从dom中提取需要的字段
result_tree = transform(doc)
print(result_tree)


第三步:下图可以看到,网页中的手机名称和价格被正确抓取下来了


4,接下来阅读

至此,我们通过两篇文章演示怎样抓取静态和动态网页内容,都采用了xslt一次性将需要的内容从网页上提取出来,其实xslt是一个比较复杂的程序语言,如果手工编写xslt,那么还不如写成离散的xpath。如果这个xslt不是手工写出来的,而是程序自动生成的,这就有意义了,程序员再也不要花时间编写和调测抓取规则了,这是很费时费力的工作。下一篇《1分钟快速生成用于网页内容提取的xslt》将讲述怎样生成xslt。

5,集搜客GooSeeker开源代码下载源

1. GooSeeker开源Python网络爬虫GitHub源

6,文档修改历史

2016-05-26:V2.0,增补文字说明
2016-05-29:V2.1,增加第五章:源代码下载源,并更换github源的网址

如果你有好的win10资讯或者win10教程,以及win10相关的问题想要获得win10系统下载的关注与报道。
欢迎加入发送邮件到657025171#qq.com(#替换为@)。期待你的好消息!
北京快乐8最快开奖 北京快乐8预测手机版 北京pk10冠亚和刷水 北京pk10改单软件 上海时时乐奖金 北京pk10博彩
北京pk10冠军走势图 北京pk10冠亚军技巧 北京pk10冠军走势图 北京pk10倍投计划 北京pk10高手技术分享 3d走势图
北京pk10冠军选号技巧 北京pk10猜冠军技巧 北京pk10冠军走势图 北京pk10冠军选号技巧 北京pk10冠亚军技巧 北京pk10冠军选号技巧
11选5任选一最大遗漏 北京快乐农家电商骗局 奇偶校验 北京赛车pk10冠军公式 赛车北京pk10开奖记录 上海时时乐能赚钱吗
早点连锁加盟店 加盟特色早点 早餐加盟什么好 北京早点摊加盟 早点来早餐加盟
营养早点加盟 天津早点加盟有哪些 早餐粥店加盟 我想加盟早点 春光早点工程加盟
连锁店加盟 正宗早点加盟 北京早点小吃加盟店 口口香早点加盟 包子早餐加盟
卖早餐加盟 移动早餐加盟 早餐加盟好项目 大华早点怎么加盟 早餐面馆加盟
贵州11选5技巧 排列3开奖结果 山西省11选5 澳洲快乐8开奖走势 彩友网
大上海现场娱乐 幸运飞艇开奖视频直播 湖南快乐十分直播 菲博娱乐倒闭了? 江苏快3直播
体彩排列5预测 哈尔滨11选5 时时彩四星做号软件 时时彩技巧 个人经验 通宝娱乐
黑龙江省快乐十分开奖结果 wnba比分直播 北京赛车网站 加拿大快乐8查询 福彩3d太湖字谜