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:\users\administrator\appdata\local\google\chrome\application\中,并把该目录加入到环境变量中,这样才能供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")

 

posted on 2020-09-02 16:08  东门乱弹琴  阅读(342)  评论(0编辑  收藏  举报

导航