python selenium 动态页面处理 中标项目信息获取
需求
为了寻找本地业务合作伙伴,在江西公共资源交易网提取相关项目信息,统计各公司中标信息。
因为关键字搜索后页面为动态页面
即翻页不会使网址发生变化
故使用selenium自动化脚本爬取信息
爬虫完整代码
python3支持中文赋值还是比较讨人喜欢的~
# coding=utf-8
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
import pandas as pd
import winsound
from selenium.webdriver.support.wait import WebDriverWait"""用于爬取公共资源交易网信息"""def alarm(x=1,y=200,z=440):"""提示音"""for i in range(x):duration = y # 时长freq = z # 赫兹winsound.Beep(freq, duration)def searchdown(关键词):"""信息爬取"""driver = webdriver.Chrome()driver.get('http://ggzy.jiangxi.gov.cn/web/jyxx/002006/002006006/jyxx.html')one=driver.current_window_handleelem=driver.find_element_by_id('xxTitle',Keys.BACKSPACE)elem.send_keys(Keys.CONTROL, 'a')elem.send_keys(关键词)driver.find_element_by_class_name('ewb-search-btn').click()time.sleep(3)翻页次数 = int(driver.find_element_by_class_name('pg_maxpagenum').text.split('/')[1])-1pf = pd.DataFrame()driver.switch_to.window(one)u = 0while u <= 翻页次数:u += 1lists=driver.find_element_by_id('showList').find_elements_by_class_name('ewb-list-node')for i in range(len(lists)):项目名称=lists[i].text.split('\n')[0]项目日期=lists[i].text.split('\n')[1]lists[i].click()driver.switch_to.window(driver.window_handles[1])# 这个while是为了防止页面长时间无响应或访问报错while True:try: # 无异常时退出while循环并进入下一条项目WebDriverWait(driver, 5, .2).until(lambda x:x.find_element_by_xpath('/html/body/div[1]/div/div[1]/div[2]/div/div/div[3]/label[2]'))time.sleep(.1)breakexcept: # 发生异常时发出提示音并重新加载页面alarm()driver.close()driver.switch_to.window(one)lists[i].click()driver.switch_to.window(driver.window_handles[1])time.sleep(.1)采购单位=driver.find_element_by_id('jianshedw').text中标单位=driver.find_element_by_id('zbdanweiname').text合同编号=driver.find_element_by_id('htno').text合同金额=driver.find_element_by_id('htjine').textdriver.close()driver.switch_to.window(one)df = pd.DataFrame([项目名称,项目日期,采购单位,中标单位,合同编号,合同金额]).Tpf = pf.append(df)print(项目名称[:45]+'\n'+中标单位)driver.find_element_by_class_name('next').click()time.sleep(5)driver.quit()pf.columns = ['项目名称','项目日期','采购单位','中标单位','合同编号','合同金额']pf.to_excel(关键词 + '项目.xlsx')将爬取的项目储存if __name__ == '__main__':关键字 = 'xx'searchdown(关键字)alarm(2)
依次爬取关键字为数据,系统、软件、信息、云、平台的项目信息。
输出表格如下(项目名称包含“数据
”的项目)
全部爬取完毕后将各个关键字的项目内容导出合并至总表:
软件=pd.read_excel('软件项目.xlsx')
系统=pd.read_excel('系统项目.xlsx')
信息=pd.read_excel('信息项目.xlsx')
云=pd.read_excel('云项目.xlsx')
平台=pd.read_excel('平台项目.xlsx')
数据=pd.read_excel('数据项目.xlsx')
全部=软件.append(系统).append(信息).append(云).append(数据).append(平台)
全部=全部.dropna() #去除包含空值的项目
全部=全部.drop_duplicates() #去除合并后的重复项目
全部=全部.reset_index(drop=True) #重建索引
全部.shape #查看全部项目的维度
(6840, 6)
结果为6840行,6列
#数据清洗
无关=pd.DataFrame()
#包含以下关键字的项目全部删除(筛除办公软件、图像识别、家具、硬件等的采购项目)
lists=['wps','WPS','正版','云锐','净化','办公软件','足迹','光谱','仪器采购','人脸','拍','灯','诊疗','镜','扫描仪','形象','诊断','望','影','播','对讲','检查','软件学院','整治工程','公车','低温','冷','图像','操作系统','摄影','空调','成像','物业','家具','计算机','电脑','手术','LED','led','屏','居家养老','办公设备','办公用品','数据库采购','点歌','广播','机房','等级保护','硬件采购','建筑工程','设备采购','一体机','会议','投影仪','数码','相机','画册','台电脑采购','监控','正版','设备改造','耗材','阅览桌','阅览椅','桌凳','桌椅','台式','笔记本电脑','打印机','传真机','复印机','office','视频']
for i in lists:df=全部[全部['项目名称'].str.contains(i)]无关=无关.append(df)全部.drop(全部[全部['项目名称'].str.contains(i)].index,inplace=True)
全部=全部.reset_index(drop=True)
全部=全部.drop_duplicates()
#统计各个中标公司的中标次数
排序=pd.DataFrame(全部.中标单位.value_counts()).reset_index()
排序.columns=['中标单位','中标次数']
全部=pd.merge(全部,排序).sort_values(by=['中标次数'],ascending=False)
全部=全部[['项目名称','中标单位','中标次数','项目日期','采购单位','合同金额','合同编号']]
全部=全部.sort_values(by=['中标次数','中标单位'],ascending=False)
#个别无关公司手动定位删除
全部=全部.query('中标单位!="南昌赣艺龙文化艺术发展有限公司"')
全部=全部.query('中标单位!="江西健云实业有限公司"')
全部=全部.query('中标单位!="南昌紫晶科技发展有限公司"')
全部.shape
(3875,7)
处理后数据为3875条,7列
储存
全部.to_excel('江西项目信息(3875条).xlsx',index=False)
python selenium 动态页面处理 中标项目信息获取相关推荐
- Python+Selenium动态网页的信息爬取
录 一.Selenium 1.1 简介 1.2 配置 二.对百度进行自动化测试 2.1 进入百度搜索界面 2.2 自动填充百度网页的查询关键字并完成自动搜索 三.爬取指定网页的名言 3.1 找到元素 ...
- python+selenium爬取智联招聘信息
python+selenium爬取智联招聘信息 需求 准备 代码 结果 需求 老板给了我一份公司名单(大概几百家如下图),让我到网上看看这些公司分别在招聘哪些岗位,通过分析他们的招聘需求大致能推断出我 ...
- 使用python+Selenium动态爬取《率土之滨》藏宝阁账号信息
目录 准备工具python + Selenium 使用Selenium打开<率土之滨>藏宝阁主页 爬取第一个商品的信息 收集武将数量,战法数量,宝物数量 收集价格.收藏人数.客户端类型.典 ...
- Python分布式动态页面爬虫研究
Selenium 的 Webdriver 爬取动态网页效果虽然不错,但效率方面并不如人意.最近一直研究如何提高动态页面爬虫的效率,方法无非高并发和分布式两种.过程中有很多收获,也踩了不少坑,在此一并做 ...
- python+selenium+apscheuler实现微信定时发信息
背景 在工作中每天下班前都需要在公司的报工系统中进行工作日志的记录.但是有很多同事常常都会忘记报工 . 这种现象也让我们组长感到头疼,也每天在群里面催.就上述问题,我就想能不能每天定时的通知大家报工呢 ...
- 【Python】Python下载动态页面图片
1.搭建Selenium环境: pip install selenium 到D:\python3.6.5\Lib\site-packages下把selenium文件夹复制到D:\python3.6.5 ...
- 【selenium学习笔记一】python + selenium定位页面元素的办法。
1.什么是Selenium,为什么web测试,大家都用它? Selenium设计初衷就是为web项目的验收测试再开发.内核使用的是javaScript语言编写,几乎支持所以能运行javaScript的 ...
- 使用python selenium爬取淘宝商品信息 自动登录淘宝和爬取某一宝贝的主图,属性图和详情图等等
selenium作为一个自动化测试工具非常好用,谁用谁知道啊. 先说如何登录淘宝,淘宝现在直接用会员名和密码登录会有滑块验证,找了网上说的几种方法和自己尝试了一番效果还是不太理想,实测过程中,即使滑块 ...
- python+selenium爬取淘宝商品信息+淘宝自动登录——爬虫实战
1.前言 继续学习爬虫内容,这回是以selenium模拟操作进行抓取,其中有几个需要登陆的注意事项. 2.自动登陆+查找页面 由于现在淘宝的反爬机制,需要登陆才好下一步操作.在搜索输入后页面会调入登陆 ...
最新文章
- 第二个Python程序:if,for,while,输出乘法口诀表
- mysql需要备份的数据_Mysql根据需要备份数据
- 小程序使用富文本完整代码及示例图
- 理解TCP的通信原理及IO阻塞
- python线程安全队列用法
- PowerDesigner 11 一些小技巧
- Scala 深入浅出实战经典 第91讲:Akka第一个案例动手实战架构设计
- Android 存储学习之在内部存储中读写文件
- c++语言函数参数传递方式,C++函数传递三种方式解读
- 翻译:控制容器的反转IoC和依赖注入模式DIP 概念发源地 Martin Fowler
- 倾斜摄影三维模型OSGB格式简化(压缩、优化)
- 【SVM分类】基于改进鲸鱼算法优化最小二乘支持向量机实现数据分类matlab代码
- 热敏电阻温度计算 公式 程序
- Windows 10 企业版LTSCjihuo
- pr中,视频导入后,视频画面大小显示不完整应该如何解决?
- 联想拯救者15isk清灰_清灰和升级容易 联想拯救者14拆机解析
- 计算机专业笔记本硬盘需要多少,笔记本电脑固态硬盘要多大的合适_教你购买适合的固态硬盘...
- OpenResty学习——第七章 Web开发实战2——商品详情页
- win32 007
- UUID太长怎么办?快来试试NanoId(Java版本)
热门文章
- 应届毕业生,绝对有你不知道的——档案,面试,合同法,薪水,为人处事等问题 1
- matlab离散线性时不变系统的分析,实验3线性时不变系统的时域分析及matlab实现.doc...
- 怎么做好团队代码review
- Unity打包aab上传谷歌商店超过150M
- 【配电网重构】基于粒子群算法实现配电网重构含Matlab源码
- python内置模块和开发规范
- #七、股市时空函数另一种间接拟合应用
- 信息学奥赛一本通:2031:【例4.17】四位完全平方数
- 不会做报表?零基础零代码带你玩转高质量报表
- python batch_size_Batch_Size 详解