python+selenium获取分页表格数据并导入excel中

本文介绍了一种使用Selenium和xlsxwriter库从网页抓取表格数据并将其保存到Excel文件的方法。通过定位table标签和其子标签,实现了数据的批量抓取。同时,通过输入页码实现分页数据的获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.准备工作:
安装环境:python3,selenium库,xlsxwriter库,chorme浏览器,chormedriver(具体安装步骤自行百度)
2.开始编写代码
首先导入我们必须要的库:

from selenium import webdriver
import xlsxwriter
from selenium.webdriver.common.keys import Keys

接着编写一个打开网址的方法:

def OpenChorme(url):
    chorm_drive = r'E:\python\chromedriver.exe' # 此处是我chormedriver放的位置
    driver = webdriver.Chrome(executable_path=chorm_drive)
    driver.get(url) # url你选择要打开的网址
    return driver

我要打开的一个网站是我们这里内网的一个网址,就不给出来了。我们要抓取网站上的表格数据如下图:在这里插入图片描述
通过chorme的开发者工具,我们可以定位到该table标签的 id 为 list在这里插入图片描述然后再查看其包含的子标签tbody>tr在这里插入图片描述
其中,每一行tr标签又包含列td在这里插入图片描述每一行tr标签里的子标签td就包含着我们需要抓取的数据,那么我们就可以通过selenium的定位方法去定位标签,获取标签里的数据。
接下来,我们写一个获取所有表格数据的方法:

def find_all_data(driver):
    dat = []
    lst = []
    # 通过css选择器找到table的位置
    element = driver.find_element_by_css_selector('#list')
    # 找到所有table下面所有的tr
     tr_contents = element.find_elements_by_tag_name('tr')
     for tr in tr_contents:
     	 # 遍历查找每个tr下面的td
         for td in tr.find_elements_by_tag_name('td'):
         	 # 将每个td的内容存储到lst中
             lst.append(td.text)
         dat.append(lst)
         lst = []
    return dat

上面的代码我们只获取到了当页的数据我们要获取分页的数据,那么就应该为上段代码做些修改。
在这里插入图片描述通过调试工具我们得到了页码输入框的位置,在这里,该input框没有id,因此我们可以通过它的XPath来定位标签,我们在控制台选中该标签后,鼠标单击右键,然后选中 copy->copy XPath。就可以得到了,下一步修改find_all_data()方法。

# page:总共有多少页
def find_all_data(driver,page):
    dat = []
    lst = []
    for i in range(1, page + 1):
    	# 获取分页输入框标签的定位
        inputpage = driver.find_element_by_xpath("//*[@id='pager_center']/table/tbody/tr/td[2]/input")
        # 首先清除输入框里面的数字
        inputpage.clear()
        # 然后发送页码,我们为了方便,就把第一页也写在了里面
        inputpage.send_keys(str(i))
        # 最后模拟键盘点击Enter键
        inputpage.send_keys(Keys.ENTER)
        # 为了是数据刷新出来,做了一个小小的死延时处理
        time.sleep(3)
        element = driver.find_element_by_css_selector('#list')
        tr_contents = element.find_elements_by_tag_name('tr')
        for tr in tr_contents:
            for td in tr.find_elements_by_tag_name('td'):
                lst.append(td.text)
            dat.append(lst)
            lst = []
    return dat

最后写一个main函数测试一下:

if __name__ == '__main__':
    driver = OpenChorme('此处为你自己的网址')
    # 不用管,这是我登录输入账号、密码和验证码的过程
    local = (656, 346, 765, 385)
    # 登录方法
    Login_succ(driver,'admin','admin',local)
    time.sleep(5)
    # 获取到前三页的数据
    lst = find_all_data(driver,3)
    time.sleep(2)
    driver.close()
    # 创建一个表格
    workbook = xlsxwriter.Workbook('D:/Demo1.xlsx')
    # 添加一个sheet
    worksheet = workbook.add_worksheet()
    # 获取表格的行、列
    coloum = len(lst)
    row = len(lst[0])
    print(coloum,row)
    for i in range(0,coloum):
        for j in range(0,row):
            text = lst[i][j]
            # 循环写入表格内
            worksheet.write(i,j,text)
    workbook.close()

结果如下:

<think>嗯,用户让我用Python写一个功能强大的爬虫,爬取生态产品品牌的案例,输出Excel表格。首先,我需要明确用户的具体需求。生态产品品牌相关的案例可能涉及多个网站,但用户没有指定具体的来源,可能需要爬取多个网站或者使用搜索引擎的结果? 不过,考虑到爬虫的复杂性,特别是针对不同网站的结构,可能需要先确定几个目标网站。比如,可能是一些环保组织网站、企业官网或者电商平台上的生态品牌产品页面。但用户可能没有明确说明,这时候可能需要一步询问,但用户可能希望一个通用的解决方案。 接下来,我需要考虑爬虫的实现步骤。通常,爬虫的工作流程包括发送请求、解析内容、存储数据。为了功能强大,可能需要处理反爬机制,比如设置User-Agent、使用代理、处理JavaScript渲染的页面等。不过,对于初学者来说,可能先从简单的静态页面开始,使用requests和BeautifulSoup库。 然后,数据存储部分需要生成Excel,所以会用pandas库来整理数据导出为xlsx文件。此外,可能需要处理分页,遍历多个页面来收集足够的数据。同时,异常处理也很重要,比如网络错误、页面结构变化等,需要try-except块来捕获异常,确保爬虫的稳定性。 另外,用户提到的“生态产品品牌案例”可能需要爬取的信息包括品牌名称、产品类型、案例描述、网址等字段。需要确定这些信息在目标页面中的HTML结构,比如通过CSS选择器或XPath来提取。 不过,由于不同网站结构不同,编写一个通用的爬虫比较困难。可能需要用户指定目标网站,或者选择一个示例网站来演示。比如,假设用户想爬取某个特定环保网站上的案例,比如example-eco-site.com,但如果没有具体网站,可能需要做一个示例框架,用户可以根据需要修改选择器和URL。 另外,法律和伦理问题也需要考虑,确保爬虫遵守目标网站的robots.txt协议,不侵犯隐私或版权。在代码中添加注释说明这一点很重要,提醒用户合法使用。 现在,综合这些考虑,可以分步骤实现: 1. 导入必要的库:requests, BeautifulSoup, pandas。 2. 发送HTTP请求,获取页面内容,处理可能的异常。 3. 解析HTML,提取所需数据。 4. 处理分页,循环请求多个页面。 5. 存储数据到DataFrame,导出Excel。 6. 添加反爬措施,如设置请求头,延迟请求等。 可能的挑战包括网站的反爬机制,比如需要登录、验证码、动态加载内容等。对于动态内容,可能需要使用Selenium或Scrapy框架,但这样会增加复杂度。考虑到用户可能希望一个简单但功能强大的脚本,暂时使用requests和BeautifulSoup,处理静态页面。 代码结构可能如下: - 定义请求头,模拟浏览器访问。 - 编写函数获取页面内容,处理错误。 - 编写解析函数,提取数据。 - 循环多个页面,收集数据。 - 保存到Excel。 测试时可能需要一个示例URL,比如假设某个网站分页结构是page参数,如?page=1,然后遍历。但如果没有具体网站,代码可能需要用户自定义部分,比如URL模板、选择器等。 最后,提醒用户根据实际网站调整选择器和URL,遵守相关法律法规。</think>以下是一个使用Python编写的爬虫示例,用于爬取生态产品品牌案例输出Excel表格。该代码以静态网页爬取为基础框架,包含反爬机制和异常处理,您需要根据目标网站的具体结构行调整: ```python import requests from bs4 import BeautifulSoup import pandas as pd import time from fake_useragent import UserAgent # 配置参数 BASE_URL = "https://example-eco-site.com/brands?page={}" # 替换为目标网站 MAX_PAGE = 5 # 最大爬取页数 OUTPUT_FILE = "eco_brands.xlsx" # 伪装浏览器访问 headers = { "User-Agent": UserAgent().random, "Accept-Language": "en-US,en;q=0.9", } def get_page(url): try: response = requests.get(url, headers=headers, timeout=10) response.raise_for_status() return response.text except Exception as e: print(f"Error fetching {url}: {str(e)}") return None def parse_page(html): soup = BeautifulSoup(html, "lxml") brands = [] # 根据目标网站结构调整选择器 for item in soup.select(".brand-item"): # 修改为实际CSS选择器 brand = { "name": item.select_one(".name").text.strip(), "category": item.select_one(".category").text.strip(), "description": item.select_one(".description").text.strip()[:100], # 截取前100字符 "website": item.select_one("a")["href"], "location": item.select_one(".location").text.strip(), } brands.append(brand) return brands def main(): all_brands = [] for page in range(1, MAX_PAGE+1): url = BASE_URL.format(page) print(f"Processing page {page}: {url}") html = get_page(url) if html: brands = parse_page(html) if not brands: break # 无数据时停止 all_brands.extend(brands) time.sleep(1) # 降低请求频率 # 保存结果 df = pd.DataFrame(all_brands) df.to_excel(OUTPUT_FILE, index=False) print(f"成功保存 {len(df)} 条数据到 {OUTPUT_FILE}") if __name__ == "__main__": main() ``` --- **关键功能说明**: 1. **反爬机制**: - 随机User-Agent头(需安装`fake-useragent`) - 请求间隔时间控制 - 自动处理HTTP状态码 2. **数据采集字段**: - 品牌名称 - 产品类别 - 案例描述 - 官网链接 - 所在地(可根据需要增减) 3. **异常处理**: - 网络请求超时 - HTTP错误状态码 - 数据解析容错 --- **使用前需要调整**: 1. 替换`BASE_URL`为目标网站的实际分页URL格式 2. 根据目标网站的HTML结构修改`parse_page()`中的CSS选择器 3. 可能需要添加代理支持(如需) --- **扩展建议**: 1. 添加动态渲染支持(使用Selenium或Playwright) 2. 集成代理池应对IP封锁 3. 添加验证码识别模块 4. 实现增量爬取功能 5. 添加数据清洗模块 --- **法律声明**: 1. 使用前请检查目标网站的`robots.txt`协议 2. 遵守《网络安全法》和相关数据保护法规 3. 控制请求频率避免对目标网站造成压力 4. 建议用于学习研究目的 --- **环境准备**: ```bash pip install requests beautifulsoup4 pandas openpyxl fake-useragent ``` 建议在实际使用时根据目标网站的具体情况调整CSS选择器、URL参数和异常处理逻辑。如果需要处理JavaScript渲染的页面,可以考虑使用Selenium或Pyppeteer。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值