python+selenium對table表和分頁處理
python+selenium編寫實現爬蟲過程:
- 1.爬蟲循環處理table表,
- 2.table表分頁處理,
- 3.網頁table所有內容循環處理
- 4.獲取隱藏的href超鏈接內容,
- 5.所有數據本地csv保存,
代碼如下:
from selenium.webdriver.chrome.options import Options import pandas as pd import math from selenium import webdriver import time
# 配置chrome的參數 options = Options() options.add_argument('--headless') # options.add_experimental_option('excludeSwitches', ['enable-automation']) #避開驗證碼 # 獲取一個瀏覽器對象 browser = webdriver.Chrome(chrome_options=options) browser.get("C:\\Users\\XXXX\\XXXX.html") # 打印整個表格信息 # print(browser.find_element_by_xpath("//*[@id=\"versions-bom-layout\"]/div/div[5]/div/div/div/div[1]/table/tbody").text) data = [] # 建立空列表存儲表格信息 # 獲取總頁數(通過二次定位方法進行定位) # total_pages1 = len(browser.find_element_by_class_name("pagination").find_elements_by_tag_name("li")) - 2 # print("total_pages is %s" % (total_pages1)) # 共有多少個組件需要提取 total_num = \ browser.find_element_by_xpath("//*[@id=\"versions-bom-layout\"]/div/div[5]/div/div/div/div[1]/div").text.split( '共')[1] print(f'total_num====::::::::{total_num}') total_pages = math.ceil(int(total_num) / 100) + 1 # 每頁顯示100個組件, 獲取總頁數 print(f'total_pages====::::::::{total_pages}') time.sleep(10) # # total_pages = len(browser.find_element_by_tag_name('select').find_element_by_tag_name('option')) for i in range(1, total_pages): # page:總共有total_pages-1頁 # # 獲取分頁輸入框標簽的定位 # inputpage = browser.find_element_by_xpath("//*[@id='pager_center']/table/tbody/tr/td[5]/input") # # 首先清除輸入框裡面的數字 # inputpage.clear() # # 然後發送頁碼,我們為瞭方便,就把第一頁也寫在瞭裡面 # inputpage.send_keys(str(i)) # # 最後模擬鍵盤點擊Enter鍵 # inputpage.send_keys(Keys.ENTER) # # 為瞭是數據刷新出來,做瞭一個小小的死延時處理 time.sleep(10) # 讓瀏覽器先加載一下動態頁面 t_body = browser.find_element_by_tag_name('tbody') # 定位表格主體 tr_list = t_body.find_elements_by_tag_name('tr') # 定位表格每一行 numbers = len(tr_list) print(f'tr_list[0].text===={tr_list[0].text}') # for i in range(numbers): for tr in tr_list: td_list = tr.find_elements_by_tag_name('td') # 定位表格每個單元格 lst = [] # 建立空列表存儲每行信息 for td in td_list: # lst.append("B-momv2core-121-anyreport-BinaryScan") # 添加版本信息 lst.append(td.text) # 添加每個單元格的文本信息 href = td_list[4].find_element_by_tag_name('a').get_attribute("href") # 獲當前行第5個td單元格的超鏈接 print(u"第n行第n列的text:", href) lst.append(href) # print(u"第一行第二列的text:", href) # 添加文件鏈接 data.append(lst) # 添加每行信息 # 點擊下一頁邏輯判斷 # 如果table隻有1頁,不作處理,直接退出循環 # 如果table隻有2頁,點擊下一頁處理條件(total_pages == 3 and i == 1) # 如果table2頁以上,點擊下一頁處理條件(total_pages > 3 and i < (total_pages - 1)) if total_pages == 3 and i == 1: browser.find_element_by_xpath("//*[contains(text(),'下一頁')]").click() elif total_pages > 3 and i < (total_pages - 1): browser.find_element_by_xpath("//*[contains(text(),'下一頁')]").click() df = pd.DataFrame(data, columns=['選擇', '策略', '審核', '版本組', '匹配數', '3', '4', '5', '6', '7', '8', '9', '10', '來源鏈接']) df.to_csv('獲取未知xxx.csv', encoding='utf_8_sig') browser.quit()
效果圖:
到此這篇關於python+selenium對table表和分頁處理的文章就介紹到這瞭,更多相關python+selenium table表,分頁處理內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 使用selenium+chromedriver+xpath爬取動態加載信息
- python爬取全國水雨情信息詳解
- python基於selenium爬取鬥魚彈幕
- python+selenium小米商城紅米K40手機自動搶購的示例代碼
- selenium動態數據獲取的方法實現