Использование Python + Selenium для реализации данных таблицы сканирования сканером (2)

Python

Введение

Прошел месяц с момента публикации последнего блога о краулерах, поэтому сегодня мы напишем, как использовать краулер для захвата данных таблицы и сохранения их в Excel, на этот раз я перешел на собственный образец, а затем взгляну на детали реализации. .

детали реализации

еще в оригиналеlogin.pyимпортируется в файлpandasНабор инструментов для анализа структурированных данных

import pandas as pd
from openpyxl import load_workbook

После введения мы можемИспользование Python + Selenium для реализации входа в симуляцию сканера (1)авторизоваться

self.browser.find_element_by_name('commit').click()  # 登录
time.sleep(1) #

После успешного входа в систему действительно успешная страница выполнит анализ узлов, имитируя уровень открытия левой боковой панели.

# 定位到第一层级
span_tags = self.browser.find_elements_by_xpath('//span[text()="用户"]')
span_tags[0].click()

# 打开微信用户页面
a_tags = self.browser.find_elements_by_xpath('//a[@href="/admin/wxusers"]')
a_tags[0].click()

image.pngС помощью приведенного выше кода мы полностью расширили содержимое боковой панели и открыли страницу, а самый важный код находится здесь. Так как написанный на этот раз внутренний Sample не отделен от front и back end, необходимо получить количество страниц на странице.Общее количество страниц получается с помощью следующего кода:

b_tags = self.browser.find_element_by_class_name('pagination.page.width-auto').find_elements_by_tag_name('b')
pageSize =  int(b_tags[1].text)

После получения количества страниц нам нужно сделатьforцикл:

row = 10 # 记录每次写入Excel的行数
for i in range(pageSize):

Внутри цикла найдите таблицу и получите содержимое таблицы

lst = []  # 将表格的内容存储为list
element = self.browser.find_element_by_tag_name('tbody')  # 定位表格
# 提取表格内容td
tr_tags = element.find_elements_by_tag_name("tr")  # 进一步定位到表格内容所在的tr节点
for tr in tr_tags:
    td_tags = tr.find_elements_by_tag_name('td')
    for td in td_tags[:4]: #只提取前4列
        lst.append(td.text) #不断抓取的内容新增到list当中

После извлечения содержимого первой страницы содержимое разделяется и постоянно сохраняется в Excel.

    # 确定表格列数
    col = 4
    # 通过定位一行td的数量,可获得表格的列数,然后将list拆分为对应列数的子list
    lst = [lst[i:i + col] for i in range(0, len(lst), col)]
    
    # list转为dataframe
    df = pd.DataFrame(lst)  # 列表数据转为数据框
  
    #等于1 表示当前是第一条数据,直接省成Excel
    if i == 0:
        df.to_excel('demo.xlsx', sheet_name='sheet_1', index=False,header=False)

    #在现有的文件当中新增内容并保存
    book = load_workbook('demo.xlsx')
    writer = pd.ExcelWriter('demo.xlsx', engine='openpyxl')
    writer.book = book
    writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
    df.to_excel(writer, sheet_name='sheet_1', index=False,startrow=row,header=False)
    writer.save()
    time.sleep(1) # 停顿一秒是以防把本地的Sample并发过高
    row = row + 10 # 记录存储Excel的行数

После того, как содержимое будет сохранено, нажмите на следующую страницу и так далее, пока цикл не остановится, и наши данные будут захвачены.

# 点击下一页
self.browser.find_element_by_class_name('next').click()

Подтвердить и протестировать

image.pngВыше приведен контент, захваченный и сохраненный на этот раз. В настоящее время я не записал видео для второй части, и я надеюсь, что друзья смогут проверить это сами, но что я могу гарантировать, так это то, что это коды, проверенные мной.

Эпилог

  • Нажмите здесь для первогоИспользование Python + Selenium для реализации входа в симуляцию сканера (1)
  • Инструмент сохранения Excel, использованный на этот раз, — pandas.
  • Это очень простой сканер. В следующий раз я должен написать более сложную часть машинного обучения, так что следите за обновлениями.
  • Если вам нужен полный код, пожалуйста, свяжитесь со мной