python采集js

2017-09-29  本文已影响0人  白敏鸢

今天玩玩pyton采集js,
首先介绍一下js,javascript,客户端脚本语言,国内用的很多,这哥们有个兄弟,AngularJS,谷歌搞出来的,
js简介:

现在浏览器多如牛毛,不过根本上来说,就是格式化的现实一些数据和可以对这些数据进行操作,
js就是可以操作网页上东西的一种语言。js中有个jquery,这兄弟里面很很多写好的js,
我们可以直接调用,还有个ajax,听名字就知道,异步js和xml.
这位仁兄是专门和我们后台交互数据的,但是又不会引起页面刷新。

python采集v1

python最让我觉得牛逼的地方之一就是库贼方便,这里我使用selenium这个库。最初这哥们是
做网站自动测试的,现在用来和浏览器一起happy,造化弄人啊,不多说,先玩玩
step1,先去找一个喜欢的浏览器吧,我这里使用phantomjs,
      去下载一个吧。选择自己的版本.
step2,下载安装我们的selenium,
        pip install selenium
step3,既然要用到js,那就得找个页面,为了方便我就使用本地以前使用过的页面吧。
      springboot跑起来,ok!
step4,ok,准备工作完成,开始我们的python
from selenium import webdriver
import time

driver = webdriver.PhantomJS(executable_path='xxx')
driver.get("localhost/pages/test1.html")
time.sleep(5)
print(driver.find_element_by_id("content").text)
driver.close()
这里有几个坑,配置path要把phantomjs加上,diver.find是和页面元素绑定的,
运行一下
    hello,test1.
没问题。其他的方法类似,这里有selenium的中文文档
https://www.gitbook.com/book/wizardforcel/selenium-doc/details

python采集V2

现在我们已经可以实现在单个页面找找ajax这哥们后面的东西,
思考一个问题,ajax数据提交,我们可以找到,那么页面如果变化了呢?
没错,就是我们的重定向啦
重定向2中,一种页面重定向,一种服务器重定向。
服务端重定向可以使用urllib来搞定,我们这里只考虑页面重定向,

先想想怎么做呢?比较重来都不是一个简单的事情,所以要找到2个东西的区别,我这里是
这样做的,记录2个对象转换过程发生的事情,
for example
  1分钟之前的你a和一分钟之后的你b有什么变化?
  idea1:把a,b抽象出来,然后对每个属性记录,比较其中的不同,true,一样,false,不一样
  idea2,我们记录其中你的改变,不定义a与b,只是考虑a与b之间的做的事情c,c存在不一样,c不存在,一样
ok,思路有了,开始写Python吧from selenium import webdriver
import time
from selenium.webdriver.remote.webelement import WebElement
from selenium.common.exceptions import StaleElementReferenceException

def waitForLoad(driver):
    elem = driver.find_element_by_tag_name("html")
    count = 0
    while True:
        count += 1
        if count > 20:
            print("Timing out after 10 seconds and returning")
            return
        time.sleep(.5)
        try:
            elem == driver.find_element_by_tag_name("html")
        except StaleElementReferenceException:
            return

#REPLACE WITH YOUR DRIVER PATH. EXAMPLES FOR CHROME AND PHANTOMJS
driver = webdriver.PhantomJS(executable_path='xxx')
#driver = webdriver.Chrome(executable_path='xxx')
driver.get("http://localhost/pages/test1.html")
waitForLoad(driver)
print(driver.page_source)

这个py没半分钟检测一下,看看html标签在不在,limit为10妙,是不是和redis持久化类似呢?
没错,我就是抄的redis的想法
上一篇下一篇

猜你喜欢

热点阅读