zoukankan      html  css  js  c++  java
  • 百度指数感想

    一、百度指数的发现

    首先,我们先进入百度指数的官网:https://index.baidu.com/,如下图所示:

    经过进入百度指数发现百度指数并没有公开的API可以获取,因为百度似乎在有意的增加百度指数的抓取难度. 返回的数据进行了加密,并且数据并不直接出现在页面上.javascript把加密的数据直接变成了页面上看到的图形。比如我输入世界杯,就会出现指数的格式如下图所示:

    1、考虑能否直接采用抓取html协议

    直接通过get或者post参数来获取百度指数的返回页面,然后用网页DOM模型提取对应标签数据,或者用正则表达式来提取。然后这种方法是行不通的,要不然谁都可以去拿了,就不需要我们这么费劲了,,真的够可以的,看来百度真会玩哦。。。但是我相信一定可以解决这个会玩的家伙,嘻哈。

    既然她是一个图片,那我们就使用可以破解图片(也就是识别图片的方法来试一下,要是可以那就更好了,要是不可以,也不需要gg,路是慢慢的探索的)

    好了,回归正题,听说Tesseract OCR框架可以识别图片耶,真的还是假的,都说是听说啦,肯定需要试一下,才知道是真的还是假的了。

    首先,肯定需要安装很多需要的库拉。

    谷歌图像识别Tesseract OCR需要很多库,首先是

    pip install pillow

    pip install pyocr

    因为涉及到模拟点击,肯定需要安装火狐浏览器或者谷歌浏览器

    首先安装selenium (2.53.6) 这个版本最好是这个的以下,否则火狐浏览需要安装多一点东西,很麻烦的。(再提示一下,火狐也是最好是4.6得版本)

    如果是安装谷歌的话,那就需要再安装一个插件chromedriver.exe.

    2、进行实战

    首先要进行模拟登陆百度,所以就必须要密码和账号,然后手动输入验证码。

    百度模拟登陆:

    from selenium import webdriver
    import time
    url = "https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F"
    browser=webdriver.Firefox()
    browser.get(url)
    browser.find_element_by_id("TANGRAM__PSP_3__userName").clear()
    browser.find_element_by_id("TANGRAM__PSP_3__password").clear()
    username="xxxx"
    password="xxxx"
    browser.find_element_by_id("TANGRAM__PSP_3__userName").send_keys(username)
    browser.find_element_by_id("TANGRAM__PSP_3__password").send_keys(password)
    browser.find_element_by_id("TANGRAM__PSP_3__submit").click()
    select = input("请观察浏览器网站是否已经登陆(y/n):")
    while 1:
        if select == "y" or select == "Y":
          print("登陆成功!")
          print("准备打开新的窗口...")
          # time.sleep(1)
          # browser.quit()
          break
    
        elif select == "n" or select == "N":
          selectno = input("账号密码错误请按0,验证码出现请按1...")
          # 账号密码错误则重新输入
          if selectno == "0":
    
            # 找到id="TANGRAM__PSP_3__userName"的对话框
            # 清空输入框
            browser.find_element_by_id("TANGRAM__PSP_3__userName").clear()
            browser.find_element_by_id("TANGRAM__PSP_3__password").clear()
            browser.find_element_by_id("TANGRAM__PSP_3__userName").send_keys(username)
            browser.find_element_by_id("TANGRAM__PSP_3__password").send_keys(password)
            # 点击登陆sign in
            # id="TANGRAM__PSP_3__submit"
            browser.find_element_by_id("TANGRAM__PSP_3__submit").click()
    
          elif selectno == "1":
            # 验证码的id为id="ap_captcha_guess"的对话框
            input("请在浏览器中输入验证码并登陆...")
            select = input("请观察浏览器网站是否已经登陆(y/n):")
    
        else:
          print("请输入“y”或者“n”!")
          select = input("请观察浏览器网站是否已经登陆(y/n):")

     进入百度主页之后就打开一个新的页面,也就是百度指数的页面,链接:

    http://index.baidu.com

    进入输入关键词和点击事件的完成为:

    js = 'window.open("http://index.baidu.com");'
    browser.execute_script(js)
    # 新窗口句柄切换,进入百度指数
    # 获得当前打开所有窗口的句柄handles
    # handles为一个数组
    handles = browser.window_handles
    print(handles)
    # 切换到当前最新打开的窗口
    browser.switch_to_window(handles[-1])
    browser.find_element_by_id("schword").clear()
    browser.find_element_by_id("schword").send_keys('世界杯')
    browser.find_element_by_id("searchWords").click()

     登陆进去指数的页面如下:

    顿时好像笑呀,哈哈哈!接下来才是任务艰巨的时刻!更多精彩敬请期待!

    12/19:

    进入指数主页面之后,就可以看到天数 

     

    然后根据个人需要去自己选择所需要的天数,实现如下:

    sel = int(input("查询7天请按0,30天请按1,90天请按2,半年请按3:"))
    day = 0
    if sel == 0:
      day = 7
    elif sel == 1:
      day = 30
    elif sel == 2:
      day = 90
    elif sel == 3:
      day = 180

     找到需要坐标的东西啦啦啦。。。

    当你点击你需要的天数的时候,就会出现你想要如下的信息:

    所以,如果这个不出来,一切都是浮云。可是不知道为什么第一次刷新出来之后,后来都不可以了呢?难道真的就要gg了吗?哭晕在厕所了的日子应该不远了。

    主要获取这个之后,我们就可以获取到这个坐标了,然后就可以进行好好的玩耍了。

    这个主要是通过鼠标的转移就会加载出来的啦。

     点击每一个点的时候就会出现指数的对应的图片,如图所示:

    接下来就是激动人心的时刻到了,

    既然图片出来了,那就进行 识别吧!通过pytesseract去识别数字(注意:可能会存在识别不准确的原因,但是没有办法,这是宝宝想的目前可以实现的办法了)

    # 图像识别
    index = []
    image = Image.open(str(path) + "zoom.jpg")
    code = pytesseract.image_to_string(image)
    if code:
      index.append(code)

    识别出来的数字就存在一个列表里面,然后就进行存放数据库 ,demo大概完成。

     感想一下:由于近段时间太多事情忙,做了这个都是一些琐碎的时间,就靠平常的一些灵感去获取,可能结果不如我想像的那样子,每次做完一个东西的记录下来的感觉很好,我以后会不断更新我的学到的一些东西,敬请期待。

  • 相关阅读:
    远程办公的一天:魔幻24小时
    LVS:三种负载均衡方式比较
    程序员的二十句励志名言,看看你最喜欢哪句?
    个人服务器开通~
    jquery大全
    CSS大全
    英语中的连词说明
    高版本SqlServer转低版本SqlServer经验总结
    SQLServer中,sa帐号旁边有个小红箭头
    Entity Framework GroupBy usage
  • 原文地址:https://www.cnblogs.com/caicaihong/p/6252162.html
Copyright © 2011-2022 走看看