秘密,一般人我不告诉他.偷偷告诉你信创产品采购的正确打开方式:python爬虫实现

创作不易 只因热爱!!

热衷分享,一起成长!

“你的鼓励就是我努力付出的动力”


采购XX有没有找你诉说 , 某某ZFCG网上的信创产品, 品种太多太杂,无法细分查找,某某详情页面要一个个看, 真费时费力,于是乎…

!!!以下内容仅供学习使用,便于快速筛选找到需求产品!!!请勿对号入座!!!

python爬虫爬取信创产品

生成excel丢给采购XX, 结果, 采购XX在风中林乱
图文学习mark一下

# -*- coding: utf-8 -*-
"""以下仅供学习使用,便于快速筛选找到需求产品!!!请勿对号入座!!!"""
# import getpass
import json
# import platform
# import sys
import pandas as pd
import requests
# import configparser
# from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver import ChromeOptions
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.ui import WebDriverWait
# from selenium.webdriver.common.by import By# system = platform.system()
# if system.startswith("Windows"):
#     EXEC_DIR_PATH = f'C:/Users/{getpass.getuser()}/AppData/Local/Google/Chrome/Application/chrome.exe'
#     USER_DIR_PATH = f'C:/Users/{getpass.getuser()}/AppData/Local/Google/Chrome/User Data'
#     DRIVER_PATH = f'C:/Users/{getpass.getuser()}/AppData/Local/Google/Chrome/chromedriver.exe'request_url = '...'
headersstr ='''
POST /front/index/search/search HTTP/1.1
Accept: application/json, text/plain, */*...User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36
X-Requested-With: XMLHttpRequest
sec-ch-ua: "Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"
'''# 用于请求头字符串转字典
def headers_str2dict(headersstr):headerslist = [r for r in headersstr.split('\n') if ': ' in r]return dict(eval(str(headerslist).replace(': ',"\':\'").replace("[",'{').replace("]",'}')))def data_str2dict(post_data_c, page=1):post_data = post_data_c.replace('true','True').replace('false', 'False').replace('null','None').replace('"pageNo":1','"pageNo":'+str(page))return dict(eval(post_data))class CInit():# 配置项目fristurl = '...'title_after_dl = '...'  # 全局请求头 dict字典 header = headers_str2dict(headersstr)# 浏览器对象options = ChromeOptions()options.add_argument('--no-sandbox')options.add_argument('--disable-blink-features=AutomationControlled')options.add_experimental_option("excludeSwitches", ["enable-automation"])options.add_experimental_option("useAutomationExtension", False)driver = None# 初始化def __init__(self):pass# 更新头部, 每次访问一个地址就获取进行更新 Cookie Refererdef get_header(self, url):resCookie = ''for cookie_dict in self.driver.get_cookies():resCookie += cookie_dict['name'] + '=' + cookie_dict['value'] + ';' if cookie_dict['name'] != '' else cookie_dict['value'] + ';'self.header['Cookie'] = resCookieself.header['Referer'] = urltry:self.header.pop('Content-Length')except:passreturn self.header# 结束输出def end(self):print('=========================game over==========================')self.driver.get('about:blank')# self.driver.close()# 初始化浏览器
def GetWebdriver(ini):if ini.driver is None:print('*****************  初始化浏览器  *********************')ini.driver = webdriver.Chrome(options=ini.options)ini.driver.get(ini.fristurl)try:WebDriverWait(ini.driver, 9).until(ec.title_contains(ini.title_after_dl))except:print('未成功登陆首页地址')print('*****************  浏览器准备完毕  *********************')def get_excel(ini, url_c, pages, post_data_c, filename):# 浏览器访问网址ini.driver.get(url_c)# 更新头部, 用于requests请求头ini.get_header(url_c)css = []for page in range(1,pages,1):# 对post数据字符串处理, 并按页码循环请求, 接收数据post_data = data_str2dict(post_data_c, page)response = requests.post(request_url, headers = ini.header, data = json.dumps(post_data))res = response.json()# 返回数据的处理使用df1 = res["result"]["searchWithAggs"]["entities"]["data"] for row in df1 :list_att = [r for r in row["attributes"] if r.count(':')==1 and "'" not in r]tempdict = dict(eval(str(list_att).replace(':',"':'").replace("[",'{').replace("]",'}')))tempdict["N品牌名"] = row["brandName"] tempdict["N名称"] = row["originName"]tempdict["N价格"] = row["price"]tempdict["N规格"] = row["specification"]tempdict["N后端分类"] = row["backCategoryName"]tempdict["N分类"] = row["categoryName"]tempdict["N网址链接"] = ini.fristurl+'items/'+ str(row["id"]) +'?searchType=1'css.append(tempdict)# 字典数组转为excel, 方便直观进行筛选等操作 pd.DataFrame(css).to_excel(filename)    if __name__ == '__main__':ini =CInit()GetWebdriver(ini)url_c = '...'pages = 44+1post_data_c = '''{"pageNo":1,"pageSize":50,"matchDirectPurchase":false,"fcids":"1445395","hasStock":true,"deliveryCode":450302,"excludedIds":[],"tagSet":[],"sort":"0_0_0_0","normal":6}'''filename = r'D:\test服务器.xlsx'get_excel(ini, url_c, pages, post_data_c, filename)# # 测试过程数据# ini = CInit()# GetWebdriver(ini)# url = '...'# ini.driver.get(url)# ini.get_header(url_c)# data = {"pageNo":1,"pageSize":50,"matchDirectPurchase":False,"fcids":"1445402","hasStock":True,"deliveryCode":450302,"excludedIds":[],"tagSet":[],"sort":"0_0_0_0","normal":6}# response = requests.post(request_url, headers = ini.header, data = json.dumps(data))# res = response.json()# df1 = res["result"]["searchWithAggs"]["entities"]["data"]# for row in df1 :#     tempdict = dict(eval(str(row["attributes"]).replace(':','":"').replace("', '",'", "').replace("['",'{"').replace("']",'"}')))#     tempdict["N品牌名"] = row["brandName"] #     tempdict["N名称"] = row["originName"]#     tempdict["N价格"] = row["price"]#     tempdict["N规格"] = row["specification"]#     tempdict["N后端分类"] = row["backCategoryName"]#     tempdict["N分类"] = row["categoryName"]#     tempdict["N网址链接"] = ini.fristurl+'items/'+ str(row["id"]) +'?searchType=1'

图文学习mark一下

请大家指教
信创产品采购的正确打开方式:python爬虫实现

**

1.打开网址后进入Devtools

**
在这里插入图片描述
在这里插入图片描述

2.找到自己所需要的内容

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.请求地址和头部,内容等信息 准备好

在这里插入图片描述
在这里插入图片描述

4.运行后的打开excel结果如下

在这里插入图片描述

end

**你好呀,我是一个医信行业工程师,喜欢学习,喜欢搞机,喜欢各种捣,也会持续分享,如果喜欢我,那就关注我吧!**

往期精彩:

健康码项目笔记, python之flask框架内新增搭建api(一)
健康码项目笔记, python之flask框架内新增搭建api(二)
健康码项目笔记, python之flask框架内新增搭建api(三)
作者|医信工程师随笔|Carltiger_github

图片|自制|侵删

关注我,我们共同成长

“你的鼓励就是我分享的动力”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/47247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#WPF DialogHost.Show 弹出对话框并返回数据

在WPF中,使用DialogHost.Show方法显示一个对话框并获取返回数据,你需要定义一个对话框,并在对话框关闭时返回数据。以下是一个简单的例子: 首先,在主窗口中添加DialogHost控件: <MaterialDesign:DialogHost x:Name="dialogHost" /> 然后,创建一个对话…

【算法/序列】等差数列子序列算术序列最长对称子串

概念&#xff1a; 等差数列&#xff1a;任意两项的差总等于同一个常数 子数组 &#xff1a;是数组中的一个连续序列。 子序列&#xff1a;是通过从原序列删除零个或多个元素并在不改变顺序的情况下排列其余元素而获得的序列 算术序列&#xff1a;是一个数字列表&#xff0c;其中…

【时时三省】(C语言基础)变量

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ——csdn时时三省 变量 可以改变的量 比如 int age&#xff1d;20 &#xff08;类型 变量的名字&#xff1d;0&#xff09; 如果后面要改可以直接代入 age&#xff1d;age1 age可以是任何字母 变量的分类…

【C++】类和对象的基本概念与使用

本文通过面向对象的概念以及通俗易懂的例子介绍面向对象引出类和对象。最后通过与之有相似之处的C语言中的struct一步步引出C中的类的定义方式&#xff0c;并提出了一些注意事项&#xff0c;最后描述了类的大小的计算方法。 一、什么是面向对象&#xff1f; 1.面向对象的概念 …

【C++编程】标准模板库 STL 的基本概念

STL 从广义上分为&#xff1a;容器、算法、迭代器 容器、算法之间通过迭代器进行无缝连接 STL 六大组件&#xff1a; 容器&#xff1a;各种数据结构&#xff0c;如 vector、list、deque、set、map 等&#xff0c;用来存放数据 序列式容器&#xff1a;物理存放上有序关联式容器&…

算法训练营day72

题目&#xff1a;117. 软件构建 (kamacoder.com) #include<iostream> #include<unordered_map> #include<vector> #include<queue>using namespace std;int main() {int n, m;cin >> n >> m;vector<int> indegree(n, 0);unordered_…

约束条件和数据库的用户管理

数据库的增删改查 查 约束条件和用户管理 删 约束条件&#xff1a; 主键 主键约束 primary key 用于标识表中的主键列的值&#xff0c;而且这个值是全表当中唯一的&#xff0c;而且值不能为null。 一个表只能有一个主键。 外键&#xff1a;用来建立表与表之间的关系。…

微信小游戏 彩色试管 倒水游戏 逻辑 (四)

最近开始研究微信小游戏&#xff0c;有兴趣的 可以关注一下 公众号&#xff0c; 记录一些心路历程和源代码。 定义了一个名为 WaterFlow class&#xff0c;该类继承自 cc.Graphics&#xff0c;用于在 Cocos Creator 中创建和显示水流的动画效果。下面是对代码的详细解释&#x…

Font Awesome 图表图标

Font Awesome 图表图标 Font Awesome 是一个广泛使用的图标库&#xff0c;它提供了大量的图标&#xff0c;可以轻松地用于网页设计和开发中。在本文中&#xff0c;我们将重点介绍 Font Awesome 中的图表图标&#xff0c;探讨它们的特点、使用方法&#xff0c;并展示一些实际的…

FPGA FIR fdatool filter designer MATLAB

位数问题 fdatool 先确定输入信号的位宽&#xff0c;比如17位在fdatool中&#xff0c;选set quantization parameters 选input/output 设置input word length 为17bit(not confirmed) fir compiler implementation 注意&#xff1a; 当设置输入位宽为16位时&#xff0c;ip核…

Linux系统部署MySQL数据库

1.Linux插入光盘&#xff0c;使用df-h获取光盘信息&#xff0c;默认/dev/sr0文件为光盘文件 使用命令 mount -o ro /dev/sr0 /media进行手动挂载 mount -o ro /dev/sr0 /media 2.进入cd /etc/yum.repos.d目录 编辑配置yum库&#xff0c;编辑vim yum.repos [BaseOS] nameba…

Flutter 状态管理新境界:多Provider并行驱动UI

前言 在上一篇文章中&#xff0c;我们讨论了如何使用 Provider 在 Flutter 中进行状态管理。 本篇文章我们来讨论如何使用多个 Provider。 在 Flutter 中&#xff0c;使用 Provider 管理多个不同的状态时&#xff0c;你可以为每个状态创建一个单独的 ChangeNotifierProvider…

node+MySQL+Express实现账户登录,注册,重置之登录篇

nodeMySQLExpress实现账户登录 实现技术开发工具项目结构效果图app.js代码db.jsrouter下的account.jsdb下的account.jslogin.html数据库结构 实现技术 node.js,MySQL5.7(8.0以上版本会报错)&#xff0c;layui(前端框架)&#xff0c;Express notify(消息通知layui插件) 开发工…

如何使用在线工具将手机相册中的图片转换为JPG格式

我们经常在手机相册中保存大量的图片&#xff0c;无论是家庭聚会的照片还是旅行的瞬间&#xff0c;每一幅图像都承载着珍贵的记忆。然而&#xff0c;有时候我们会遇到图片格式不兼容的问题&#xff0c;尤其是在需要将图片分享到特定平台或编辑时。 例如&#xff0c;某些社交平台…

Java语音转文字及文字转语音教学 (离线版)

1. 语音转文字 1.1 maven导入以下包 <!-- 获取音频信息 --> <dependency><groupId>org</groupId><artifactId>jaudiotagger</artifactId><version>2.0.3</version> </dependency><!-- 语音识别 --> <dependen…

ubuntu使用vcan做本地测试

当本地没有can设备时&#xff0c;可以使用虚拟can在ubuntu本地进行模拟测试程序的正确性。 在Ubuntu上启用虚拟控制器区域网络(vCAN)&#xff0c;需要安装并配置CAN工具箱。以下是如何在Ubuntu上安装并设置vCAN的步骤 1. 安装can-utils包&#xff0c;它包含了vcan模块 sudo …

C++知识要点总结笔记

文章目录 前言一、c基础1.指针和引用指针和引用的区别函数指针 2.数据类型整型 short int long 和 long long无符号类型强制类型转换 3.关键字conststaticconst和static的区别define 和 typedef 的区别define 和 inline 的区别const和define的区别constexprvolatileextern前置与…

Linux服务器LVM分区扩展

1、检查服务器当前分配磁盘 查看服务器物理磁盘分配情况&#xff0c;可见服务器当前配置磁盘SDA共250G&#xff0c;已划分区sda1:4G&#xff0c;sda2:146G&#xff1b;其中sda2分区分为两个lvm分区&#xff08;centos-root和centos-swap&#xff09;; 查看磁盘分区挂载情况&am…

【实战】安装Webtours

首先&#xff0c;安装jdk。过程如下图。 添加环境变量&#xff0c;如下图。 安装activeperl&#xff0c;如下图。 复制Webtours文件夹到计算机中&#xff0c;之后双击webtours文件夹中的xigui32.exe&#xff0c;启动webtours的应用服务器。 之后&#xff0c;可以在任务栏右下角…

CSA笔记2-文件管理命令

tree 以树状图显示多级目录 示例&#xff1a; [rootlocalhost ~]# tree haha/ haha/ └── 111 └── 222 2 directories, 0 files [rootlocalhost ~]# tree -L 1 haha/haha/ └── 111 echo > >> < << 示例&#xff1a; [rootxxx ~]#…