抓取国家电⽹电⼦商务平台所有招标公告,下载“项⽬公告⽂件” 将下载的项⽬公告⽂件解压后,寻找有'货物清单'字样的Excel表格, 将所有的货物清单统⼀合并成⼀个csv⽂件 获取货物清单Excel表格中的指定共15列数据 '包号', '⽹省采购申请⾏号', '项⽬单位', '需求单位', '项⽬名称', '⼯程电压等级', '物资名称', '物资描 述','单位', '数量', '交货⽇期', '交货地点', '备注', '技术规范ID', '状态' 其中'状态'列是后期添加列,指的是本标书的项⽬状态,例如'已经截标','正在评标','评标结束'等 状态 写出代码
时间: 2023-12-23 19:05:04 浏览: 137
好的,下面是一个Python代码示例,用于抓取国家电网电子商务平台所有招标公告,下载“项目公告文件”,解压后寻找包含“货物清单”字样的Excel表格,提取指定的15列数据并保存为一个CSV文件:
```python
import os
import time
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from zipfile import ZipFile
# 设置Chrome浏览器的驱动程序路径
driver_path = "chromedriver.exe"
# 设置Chrome浏览器的下载文件夹路径
download_path = "D:/downloads"
# 创建Chrome浏览器实例,并设置下载文件夹路径和禁用图片加载
chrome_options = webdriver.ChromeOptions()
prefs = {"download.default_directory": download_path, "profile.managed_default_content_settings.images": 2}
chrome_options.add_experimental_option("prefs", prefs)
browser = webdriver.Chrome(driver_path, chrome_options=chrome_options)
# 打开国家电网电子商务平台并登录
browser.get("https://b2bepc.sgcc.com.cn/")
# TODO: 在此处填写登录账号和密码
username = "your_username"
password = "your_password"
browser.find_element_by_id("username").send_keys(username)
browser.find_element_by_id("password").send_keys(password)
browser.find_element_by_id("login_btn").click()
# 进入招标信息页面并获取所有招标信息的链接
browser.get("https://b2bepc.sgcc.com.cn/web/supplier/bidding/biddinginfo?viewType=4")
wait = WebDriverWait(browser, 10)
all_links = []
while True:
links = browser.find_elements_by_xpath("//a[contains(@href,'/web/supplier/bidding/biddinginfo/view')]")
for link in links:
all_links.append(link.get_attribute("href"))
try:
next_page = wait.until(EC.element_to_be_clickable((By.XPATH, "//a[@title='下一页']")))
next_page.click()
time.sleep(2)
except:
break
# 循环访问每个招标信息的链接,下载项目公告文件并解压缩
for link in all_links:
browser.get(link)
try:
wait.until(EC.presence_of_element_located((By.XPATH, "//a[contains(text(),'项目公告文件')]")))
download_btn = browser.find_element_by_xpath("//a[contains(text(),'项目公告文件')]")
download_btn.click()
time.sleep(5) # 等待下载完成
# 解压缩项目公告文件并寻找包含“货物清单”字样的Excel表格
zip_file = max([download_path + "/" + f for f in os.listdir(download_path) if f.endswith(".zip")], key=os.path.getctime)
with ZipFile(zip_file, 'r') as zip:
for filename in zip.namelist():
if "货物清单" in filename and filename.endswith(".xls"):
excel_file = download_path + "/" + filename
break
# 读取Excel表格并提取指定的15列数据
df = pd.read_excel(excel_file, engine='xlrd', usecols=['包号', '网省采购申请行号', '项目单位', '需求单位', '项目名称', '工程电压等级', '物资名称', '物资描述', '单位', '数量', '交货日期', '交货地点', '备注', '技术规范ID'])
# 添加“状态”列并保存为CSV文件
df['状态'] = ''
csv_file = download_path + "/" + "all_data.csv"
if os.path.exists(csv_file):
df.to_csv(csv_file, mode='a', header=False, index=False)
else:
df.to_csv(csv_file, index=False)
except:
pass
# 关闭浏览器
browser.quit()
```
需要注意的是,由于国家电网电子商务平台的页面结构可能会发生变化,因此以上代码仅供参考,具体实现需要根据实际情况进行调整。另外,在实现过程中,需要遵守相关法律法规,避免侵犯他人的合法权益。
阅读全文