抓取基金网站N页JS生成的内容(多页)

回顾

http://blog.csdn.net/github_26672553/article/details/78589068
前面我们已经完成了 利用phantomjsselenium2个包 抓取到了基金网站第二页的html内容。

我们后面认为只要循环就可以抓第三页、第四页、。。。。,但其实这有个坑。
这里写图片描述
看见没有,其实我们只能循环到第五页。
这个就尴尬了!!!!

抓取任意页

这里写图片描述

仔细看上图,在获取到总页面的情况下,我们利用去第xx页就可以实现循环抓取了。

# 去第几页 输入框
tonum = driver.find_element_by_id("tonum")
# 去第几页 提交按钮
jumpBtn = driver.find_element_by_id("btn_jump")

tonum.clear() # 情况输入框
tonum.send_keys(6) # 去第6页
jumpBtn.click() # 点击按钮

WebDriverWait(driver,20).until(lambda driver:driver.find_element_by_id("pager")\
        .find_element_by_xpath("span[@value=6 and @class!='end page']")\
        .get_attribute("class").find("at") != -1)

print(driver.page_source) # 打印网页源代码

最后打印网页源代码确实是第6页的内容,说明代码没有问题。

稍作说明:WebDriverWait().until()里我们前面不一样(之前传递了一个函数名),现在这种是lambda语法,我们线简单理解成python中的”回调函数”。
until()方法就是判断 是否是第6页。

2、我们定义一个函数:获取第start页第end页,并且保存抓取到的html内容。

def getData(start, end):
    for x in range(start, end+1):
        # 去第几页 输入框
        tonum = driver.find_element_by_id("tonum")
        # 去第几页 提交按钮
        jumpBtn = driver.find_element_by_id("btn_jump")

        tonum.clear()  # 第x页 输入框
        tonum.send_keys(str(x))  # 去第x页
        jumpBtn.click()  # 点击按钮

        WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_id("pager") \
                                        .find_element_by_xpath("span[@value={0} and @class!='end page']".format(x)) \
                                        .get_attribute("class").find("at") != -1)

        # 保存抓取到的html内容
        # 保存到html目录下
        with open("./htmls/{0}.txt".format(x),"wb") as f:
            f.write(driver.find_element_by_id("tableDiv").get_attribute("innerHTML").encode("utf8"))
            f.close()

上面代码最后我们没有保存所有html内容,只是保存了基金网站表格部分(tableDiv)

3、调用函数,测试抓取5~7页的内容:

# 调用函数 抓取5~7页的内容
getData(5,7)

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值