excel抓取网页动态数据(如何利用Python+Selenium实现爬虫模拟登录(一)|)

优采云 发布时间: 2021-10-20 09:08

  excel抓取网页动态数据(如何利用Python+Selenium实现爬虫模拟登录(一)|)

  介绍

  距离上次写爬虫博客已经一个月了,所以今天我们继续写下如何使用爬虫抓取表格数据并保存在excel中。这次改成了内部写的Sample。接下来,我们来看看实现细节。.

  实施细则

  还是介绍一下原创login.py文件中分析结构化数据的pandas工具集

  import pandas as pd

from openpyxl import load_workbook

复制代码

  介绍完之后,我们可以根据上一篇(一)中的登录)使用Python+Selenium实现爬虫模拟登录

  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()

复制代码

  

  通过上面的代码,我们完全展开侧边栏的内容,打开页面。下一个最重要的代码来了。由于这次写的内部Sample没有前后端分离,所以我们需要获取页面的页数。通过以下代码获取总页数:

  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()

复制代码

  验证和测试

  

  以上是本次抓取保存的内容。目前我没有录制第二篇文章的视频。希望朋友们可以自行验证,但我能保证的是,这些都是我通过测试的代码。

  结束语

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线