1. 程式人生 > 實用技巧 >python爬蟲之selenium的使用[轉發]+總結

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=Falsejson.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")