selenium直接用滑鼠點選(基於x,y座標)進行網頁爬取
阿新 • • 發佈:2019-01-09
食品生產許可獲證企業(SC)的爬取
只有名字和編號
這個網站是動態載入,並對請求ur進行了加密l
所以使用selenium
但是,selenium使用不知道為什麼一旦進行了對頁面資料的操作後,就無法請求到下一頁的資料了,所以只能一頁一頁的請求不停的從第一頁跳轉,不能使用下一頁跳轉
from selenium import webdriver import pyautogui as pag from selenium.webdriver.common.keys import Keys from selenium.webdriver import ActionChains import time import pyautogui #建立瀏覽器物件 def find_coordinate(): """返回下一頁座標,最大頁數""" #"""返回文字框座標,go按鈕位置,和最大頁數 """ d = webdriver.Chrome()#可以看到瀏覽器介面 d.implicitly_wait(10)#隱性等待10秒如果10秒內該視窗完成渲染渲染完畢就不再等待,10秒還未渲染成功就不再等待 d.maximize_window()#視窗最大化 time.sleep(2) d.get('http://app1.sfda.gov.cn/datasearch/face3/base.jsp?tableId=120&tableName=TABLE120&title=%CA%B3%C6%B7%C9%FA%B2%FA%D0%ED%BF%C9%BB%F1%D6%A4%C6%F3%D2%B5(SC)&bcId=145275419693611287728573704379') time.sleep(3) text_location = d.find_element_by_xpath('//*[@id="goInt"]').location # 輸入框所在位置 go_location = d.find_element_by_xpath('//*[@id="content"]/div/table[4]//tr/td[7]/input').location # go按鈕所在位置 ma = 9595 # time.sleep(5) d.close() return text_location,go_location, ma def get_text(z1,z2,pagination): """傳入文字框位置,go按鈕位置,查詢的頁數 返回要查詢的資訊(公司名及代號)""" d = webdriver.Chrome()#可以看到瀏覽器介面 d.implicitly_wait(10)#隱性等待10秒如果10秒內該視窗完成渲染渲染完畢就不再等待,10秒還未渲染成功就不再等待 d.maximize_window()#視窗最大化 time.sleep(2) d.get('http://app1.sfda.gov.cn/datasearch/face3/base.jsp?tableId=120&tableName=TABLE120&title=%CA%B3%C6%B7%C9%FA%B2%FA%D0%ED%BF%C9%BB%F1%D6%A4%C6%F3%D2%B5(SC)&bcId=145275419693611287728573704379') # 文字框輸入 pag.click(z1[0]+10 , z1[1]+10 )#點選文字框 time.sleep(1) pyautogui.hotkey('ctrl', 'a')#按下ctrl+a,全選文字框內容 pag.typewrite(str(pagination))#輸入要跳轉頁數 time.sleep(1) pag.click(z1[0]+10+60 , z1[1]+10)#根據文字框位置定位go按鈕位置並點選 time.sleep(2) node_list = d.find_elements_by_xpath('//*[@id="content"]/table[2]//tr/td/p/a') # 獲取所需資訊 # print(node_list) data = [] for node in node_list: t = node.get_attribute('text') print(t) data.append(t) d.close() return data def writ(data): with open('公司.txt','a',encoding='utf-8')as f: for i in data: f.write(i+'\n') def run(): z1,z2,max = find_coordinate() z1 =[z1['x'],z1['y']+110]#因為使用的是pyautogui所以定位的位置和移動的位置有偏差也就是高度偏差110左右(具體的網頁具體分析,不一定都是這麼高) z2 = [z2['x'], z2['y']]#z2沒用到所以沒用但是因為程式碼原因.沒刪 # print(z1,z2) for i in range(1,max+1): data = get_text(z1,z2,i) writ(data) if __name__ == '__main__': run()