zoukankan      html  css  js  c++  java
  • python爬虫之selenium的使用[转发]+总结

    https://www.cnblogs.com/lweiser/p/11045023.html   selenium使用方法

    selenium使用流程,selenium本质就是浏览器自动化测试

    1.在python中安装selenium模块和webdriver for Chrome、jsonpath(读取json数据用)

      联网状态:pip3 install selenium

      离线状态:www.pypi.org中下载tar.gz安装, pip3 install selenium_XX.tar.gz,需考虑虚拟环境问题,可以用pip3 list查看安装情况

      安装webdriver,把下载的文件chromedriver.exe复制到,C:usersadministratorappdatalocalgooglechromeapplication中,并把该目录加入到环境变量中,这样才能供python调用。

      也可以放到python中的scripts目录,只要存在环境变量中的目录就可以。

    2.代码-抓取数据写入文件

      # 登录并抓取数据

      from selenium import webdriver

      driver = webdriver.Chrome()

      driver.implicitly_wait(10)   # 全局等待页面数据返回,避免数据未返回就进行下一步操作

      driver.get('url')

      driver.find_element_by_id('username').send_keys('jack')  # 通过id定位input输入框,输入用户名

      driver.find_element_by_class_name('loginbtn').click()  # 通过class 定位元素,进行点击登录操作

      a = driver.find_element_by_xpath('//div[@id="boundlist"]/ul/li[3]')  # 通过xpath定位元素    xpath可以通过chrome中复制出来

      d = a.find_elements_by_class_name('x')

       

      rets = {}

      data = []

      count = 0

      for i in d:

        xxx = i.find_element_by_xpaht('.//td[1]').get_attribute('data')

        ret = {}

        ret.update({'xxx': xxx})

          data.append(ret)

        count += 1

      rets = dict(code="0", msg="", data=data)

      rets_str = json.dumps(rets, ensure_ascii=False, indent = 4)  # indent=4 格式化成json文本格式, ensure_ascii=False  json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False

      # 将数据写入文件

      with open('media/files/data.json', 'w', encoding='utf-8') as f:

        f.write(rets_str)

    3.代码-在ptyhon中读取文件

      import jsonpath  # 离线安装需到pypi中下载,通过pip3 install jsonpath.tar.gz安装到相应的虚拟环境中,jsonpath用法:https://www.cnblogs.com/youring2/p/10942728.html

      

    # 在django中调用爬取的json文件数据,并可实现查询 

    class GetSjfxFrsfzhmView(TemplateView): def get(self, request): if 'glks' in request.GET and request.GET['glks']: search_glks = request.GET['glks'] ojb = json.load(open('media/file/data.json', 'r', encoding='utf-8')) data = jsonpath.jsonpath(ojb, '$.data[?("' + search_glks + '" in @.glks)]') #通过request.GET获取前端参数,在jsonpath中查询相关数据 page_index = request.GET.get('page') page_limit = request.GET.get('limit') paginator = Paginator(data, page_limit) page_data = paginator.page(page_index) page_data_info = [x for x in page_data] rets = dict(code="0", msg="", count=len(data), data=page_data_info) else: ojb = json.load(open('media/file/data.json', 'r', encoding='utf-8')) data = jsonpath.jsonpath(ojb, '$.data[*]') page_index = request.GET.get('page') page_limit = request.GET.get('limit') paginator = Paginator(data, page_limit) page_data = paginator.page(page_index) page_data_info = [x for x in page_data] rets = dict(code="0", msg="", count=len(data), data=page_data_info) return HttpResponse(json.dumps(rets, cls=DateEncoder), content_type="application/json")
  • 相关阅读:
    Mac environment setting
    详解nginx.conf文件配置项(包括负载均衡)
    检查windows端口被占用
    linux下的环境变量
    利用MVC思想和php语言写网站的心得
    React学习:列表&&Key
    React学习:条件渲染
    事件处理
    state&生命周期
    react学习:组件&props
  • 原文地址:https://www.cnblogs.com/yanjidong/p/13503444.html
Copyright © 2011-2022 走看看