爬蟲案例-爬取某企數據

文章目錄

      • 1、準備要爬取企業名稱數據表
      • 2、爬取代碼
      • 3、查看效果

1、準備要爬取企業名稱數據表

企業名稱
紹興市袍江王新國家庭農場
紹興市鄭杜糧油專業合作社
紹興市越城區興華家庭農場
紹興市越城區銳意家庭農場
紹興市越城區青甸畈家庭農場
紹興市袍江王新國家庭農場
紹興市袍江月明家庭農場
紹興市越城區夏景權鮮果園
紹興市越城區匡群家庭農場
紹興市袍江趙成興家庭農場
紹興市越城區真香果園
紹興市越城區聚客來家庭農場
紹興市越城區果真不錯果園
紹興市越城區亮豐家庭農場
紹興縣富盛鎮北山糧油專業合作社
紹興市袍江銀軍家庭農場
紹興市袍江仲康家庭農場
紹興市越城區娜家果園
紹興市越城區建峰家庭農場
紹興市越城區國信家庭農場

在這里插入圖片描述

2、爬取代碼

import time
import requests
from bs4 import BeautifulSoup
import re
import json
import pandas as pd
import jsonpath
from datetime import datetime
import random
from urllib3.exceptions import ConnectTimeoutError# 初始化會話和請求頭
session = requests.Session()url = "https://www.qcc.com/web/search?"header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0","accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","accept-encoding": "gzip, deflate, br, zstd","accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6","cookie": ""  #填寫自己cookie}proxy_url = 'http://api.89ip.cn/tqdl.html?api=1&num=60&port=&address=%E5%B9%BF%E4%B8%9C%E7%9C%81&isp='
test_url = 'http://httpbin.org/ip'  # 用于測試代理是否有效的地址valid_proxies = []
# 獲取有效代理池和構造代理字典
def get_valid_proxies():try:resp = requests.get(proxy_url, timeout=10)resp.raise_for_status()proxy_ips = re.findall(r'\d+\.\d+\.\d+\.\d+:\d+', resp.text)for ip in proxy_ips:proxy = {'http': f'http://{ip}', 'https': f'http://{ip}'}try:# 測試代理是否有效(設置短超時快速篩選)test_resp = requests.get(test_url, proxies=proxy, timeout=5)if test_resp.status_code == 200:valid_proxies.append(proxy)# 構造代理字典print( {'http': f'http://{ip}','https': f'http://{ip}'})except (requests.exceptions.ProxyError, ConnectTimeoutError, requests.exceptions.Timeout):#print(f"無效代理: {ip}")continuereturn valid_proxiesexcept Exception as e:print(f"獲取代理失敗: {e}")return None# 測試獲取有效代理池
#get_valid_proxies()
#隨機選擇一個有效代理IP
def get_proxy():"""獲取代理"""try:# 隨機選擇一個代理ip_port = random.choice(get_valid_proxies())print("選擇的代理IP:", ip_port)except Exception as e:print(f"獲取代理失敗: {e}")return None# 初始化數據存儲列表(放在循環外部)
company_data = []
# 讀取Excel文件
red_execl= pd.read_excel(r"C:\Users\zzx\Desktop\浙江_紹興_1.xlsx")company_names = red_execl.iloc[:,0].tolist()
#print(company_names)def safe_jsonpath(data, path, default="",strict_type=False):"""安全解析 JSONPath,返回第一個匹配值或默認值- 自動處理 None、空列表、類型不匹配- 根據 default 參數類型自動轉換返回值類型"""result = jsonpath.jsonpath(data, path)# 處理無效路徑或非列表結果if not isinstance(result,list) or len(result) == 0:return defaultvalue = result[0]# 處理空值和類型轉換if value is None:return default# 類型處理邏輯if strict_type:if isinstance(value, type(default)):return valuereturn defaulttry:return type(default)(value)  # 根據 default 的類型轉換結果except (TypeError, ValueError,):return default
TAG_LIST = ["高新技術企業", "科技型中小企業", "專精特新小巨人企業","專精特新中小企業", "創新型中小企業", "制造業單項冠軍企業","制造業單項冠軍產品企業", "獨角獸企業", "瞪羚企業", "企業技術中心","重點實驗室", "技術創新示范企業", "技術先進型服務企業","眾創空間", "隱形冠軍企業"
]
def parse_tags(data):"""解析企業標簽"""tags_info = safe_jsonpath(data, "$..TagsInfoV2", default=[])return { f"是否{tag}":  "是" if any(t.get('Name') ==  tag for t in tags_info)  else "否" for tag in TAG_LIST }def process_company_data(name):"""處理單個公司數據"""max_retries = 3for attempt in range(max_retries):try:proxies = get_proxy()'''proxies = {'http': 'http://120.24.73.25:8181','https': 'http://120.24.73.25:8181'}'''params = {"key": name}response = session.get(url,headers=header,params=params,proxies=proxies,timeout=10)#print(response.json())if response.status_code != 200:raise Exception(f"狀態碼: {response.status_code}")if "驗證碼" in response.text:raise Exception("觸發反爬驗證碼")# 用BeautifulSoup提取所有<script>標簽soup = BeautifulSoup(response.text, 'html.parser')#print(soup)scripts = soup.find_all('script')#print(scripts)# 正則匹配目標變量(例如window.__INITIAL_STATE__)pattern = re.compile(r'window\.__INITIAL_STATE__\s*=\s*({.*?});', re.DOTALL)for script in soup.find_all('script'):if script.string and (match := pattern.search(script.string)):data = json.loads(match.group(1))#print(data)#國標行業--碼值credit_code = safe_jsonpath(data, "$..CreditCode", default="")#org_code = ""#if len(credit_code) >= 10:  # 確保可以安全切片org_code = f"{credit_code[8:-2]}-{credit_code[-2]}"if credit_code else ""#成立日期處理start_date = safe_jsonpath(data, "$..StartDate",default=0)#formatted_date = ""#if isinstance(start_date, (int, float)) and start_date > 0:formatted_date = datetime.fromtimestamp(start_date / 1000).strftime("%Y-%m-%d")if start_date else ""#營業期限allottedSpan = safe_jsonpath(data, "$..allottedSpan",default=0)formatted_allottedSpan =  datetime.fromtimestamp(allottedSpan / 1000).strftime("%Y-%m-%d")if allottedSpan else ""company_info = {"企業名稱": re.sub(r'<[^>]+>', '', safe_jsonpath(data, "$..Name", default="")),"法定代表人": safe_jsonpath(data, "$..OperName", default=""),"登記狀態": safe_jsonpath(data, "$..ShortStatus", default=""),"成立日期": formatted_date,"注冊資本": safe_jsonpath(data, "$..RegistCapi", default=""),# "實繳資本":jsonpath.jsonpath(data,"$..RegistCapi")[0],# "人員":jsonpath.jsonpath(data,"$..companyScale")[0],"國標行業--碼值": safe_jsonpath(data, "$..IndustryCode", default="") + safe_jsonpath(data, "$..SmallCategoryCode", default=""),"國標行業--中文": safe_jsonpath(data, "$..SmallCategory", default=""),"統一社會信用代碼": safe_jsonpath(data, "$..CreditCode", default=""),"組織機構代碼": org_code,"登記號": safe_jsonpath(data, "$..No", default=""),"納稅人識別號": safe_jsonpath(data, "$..CreditCode", default=""),#"納稅人資質": "一般納稅人","核準日期": safe_jsonpath(data, "$..CheckDate",default=""),"登記機關": safe_jsonpath(data, "$..City", default="") + safe_jsonpath(data, "$..County",default="") + "市場監督管理局","企業類型": safe_jsonpath(data, "$..EconKind", default=""),#"營業期限": formatted_allottedSpan ,"所屬地區": safe_jsonpath(data, "$..Province", default="") + safe_jsonpath(data, "$..City",default="") + safe_jsonpath(data, "$..County", default=""),# "英文名": jsonpath.jsonpath(data, "$..EnglishName")[0],# "經營范圍": jsonpath.jsonpath(data, "$..Scope")[0],"電話": safe_jsonpath(data, "$..ContactNumber", default=0),"注冊地址": safe_jsonpath(data, "$..Address", default=""),"官網": safe_jsonpath(data, "$..GW", default=""),"郵箱": safe_jsonpath(data, "$..Email", default=""),"企業規模": safe_jsonpath(data, "$..Scale", default="")}print(company_info)#合并標簽信息return {**company_info,**parse_tags(data)}breakexcept Exception as e:print(f"嘗試 {attempt + 1}/{max_retries} 失敗: {e}")time.sleep(10)return NoneBATCH_SIZE = 10  #
# 主處理循環
for index, name in enumerate(company_names):print(f"處理第 {index + 1} 家公司: {name}")# 獲取公司數據info = process_company_data(name)if info:company_data.append(info)else:print(f"警告:{name} 數據為空")# 每處理10個公司保存一次if (index+1) % BATCH_SIZE == 0:pd.DataFrame(company_data).to_excel("temp_result.xlsx", index=False)# 隨機延遲time.sleep(30 + random.randint(5, 15))
if company_data:df = pd.DataFrame(company_data)df.to_excel(r"C:\Users\zzx\Desktop\company_data.xlsx",index=False)print("數據添加成功")
else:print("所有公司數據獲取失敗")

3、查看效果

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78093.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78093.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78093.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

足球 AI 智能體技術解析:從數據采集到比賽預測的全鏈路架構

一、引言 在足球運動數字化轉型的浪潮中&#xff0c;AI 智能體正成為理解比賽、預測賽果的核心技術引擎。本文從工程實現角度&#xff0c;深度解析足球 AI 的技術架構&#xff0c;涵蓋數據采集、特征工程、模型構建、實時計算到決策支持的全鏈路技術方案&#xff0c;揭示其背后…

怎么配置一個kubectl客戶端訪問多個k8s集群

怎么配置一個kubectl客戶端訪問多個k8s集群 為什么有的客戶端用token也訪問不了k8s集群&#xff0c;因為有的是把~/.kube/config文件&#xff0c;改為了~/.kube/.config文件&#xff0c;文件設置成隱藏文件了。 按照kubectl的尋找配置的邏輯&#xff0c;kubectl找不到要訪問集群…

[QMT量化交易小白入門]-四十六、年化收益率118%的回測參數,如何用貪心算法挑選50個兩兩相關性最小的ETF組合

本專欄主要是介紹QMT的基礎用法,常見函數,寫策略的方法,也會分享一些量化交易的思路,大概會寫100篇左右。 QMT的相關資料較少,在使用過程中不斷的摸索,遇到了一些問題,記錄下來和大家一起溝通,共同進步。 文章目錄 相關閱讀準備工作安裝所需庫導入所需模塊下載所有ETF數…

幾何編碼:啟用矢量模式地理空間機器學習

在 ML 模型中使用點、線和多邊形&#xff0c;將它們編碼為捕捉其空間屬性的向量。 自地理信息系統 (GIS) 誕生之初&#xff0c;“柵格模式”和“矢量模式”之間就存在著顯著的區別。在柵格模式下&#xff0c;數據以值的形式呈現在規則的網格上。這包括任何形式的圖像&#xff0…

Leetcode98、230:二叉搜索樹——遞歸學習

什么是二叉搜索樹&#xff1a;右子樹節點 > 根節點 > 左子樹節點&#xff0c; 二叉搜索樹中的搜索&#xff0c;返回給定值val所在的樹節點 終止條件為傳進來的節點為空、或者節點的值 val值&#xff0c;返回這個節點&#xff1b; 單程遞歸邏輯&#xff1a;定義一個resu…

每天學一個 Linux 命令(30):cut

??可訪問網站查看,視覺品味拉滿: http://www.616vip.cn/30/index.html cut 命令用于從文件或輸入流中提取文本的特定部分(如列、字符或字節位置)。它常用于處理結構化數據(如 CSV、TSV)或按固定格式分割的文本。以下是詳細說明和示例: 命令格式 cut [選項] [文件...]…

Tauri 2.3.1+Leptos 0.7.8開發桌面應用--Sqlite數據庫選中數據的表格輸出

在前期工作的基礎上&#xff08;Tauri 2.3.1Leptos 0.7.8開發桌面應用--Sqlite數據庫的寫入、展示和選擇刪除_tauri leptos sqlite 選擇刪除-CSDN博客&#xff09;&#xff0c;實現將選中的數據實時用表格展示出來&#xff0c;效果如下&#xff1a; 1. 后臺invoke調用命令 Tau…

使用Tauri 2.3.1+Leptos 0.7.8開發桌面小程序匯總

近期斷斷續續學習了Rust編程&#xff0c;使用Tauri 2.3.1Leptos 0.7.8開發了一個自用的桌面小程序。Win10操作系統&#xff0c;使用VS Code及rust analyzer插件搭建的開發環境&#xff0c;后期開始使用Roo Code綁定DeepSeek API 輔助編程&#xff0c;對我這個初學者編程幫助很大…

考研英一學習筆記

2024 年全國碩士研究生招生考試 英語&#xff08;一&#xff09;試題 &#xff08;科目代碼&#xff1a;201&#xff09; Section Ⅰ Use of English Directions: Read the following text. Choose the best word(s) for each numbered blank and mark A, B, C or D on the ANS…

【技術筆記】Cadence實現Orcad與Allegro軟件交互式布局設置

【技術筆記】Cadence實現Orcad與Allegro軟件交互式布局設置 更多內容見專欄&#xff1a;【硬件設計遇到了不少問題】、【Cadence從原理圖到PCB設計】 在做硬件pcb設計的時候&#xff0c;原理圖選中一個元器件&#xff0c;希望可以再PCB中可以直接選中。 為了達到原理圖和PCB兩兩…

卷積神經網絡(CNN)詳解

文章目錄 引言1.卷積神經網絡&#xff08;CNN&#xff09;的誕生背景2.卷積神經網絡&#xff08;CNN&#xff09;介紹2.1 什么是卷積神經網絡&#xff1f;2.2 卷積神經網絡&#xff08;CNN&#xff09;的基本特征2.2.1 局部感知&#xff08;Local Connectivity&#xff09;2.2.…

8051單片機所有Keil C51匯編偽指令和C語言關鍵字大全

8051單片機所有Keil C51匯編偽指令和C語言關鍵字大全 作者將狼才鯨創建日期2025-04-21 CSDN閱讀地址&#xff1a;8051單片機所有Keil匯編偽指令和C語言關鍵字的詳細解釋 8051單片機所有Keil匯編偽指令和C語言關鍵字的詳細解釋&#xff0c;在Keil已安裝文件夾D:\Keil_v5\C51\H…

機器視覺的智能手機屏貼合應用

在智能手機制造領域&#xff0c;屏幕貼合工藝堪稱"微米級的指尖芭蕾"。作為影響觸控靈敏度、顯示效果和產品可靠性的關鍵工序&#xff0c;屏幕貼合精度直接決定了用戶體驗。傳統人工對位方式已無法滿足全面屏時代對極窄邊框和超高屏占比的嚴苛要求&#xff0c;而Mast…

運維打鐵:網絡基礎知識

文章目錄 一、網絡架構1. 網絡架構圖2. 各層級功能3. 機房網絡常見問題及解決方案 二、交換技術1. 交換技術基礎2. 交換技術分類3. 廣播域相關概念4. ARP 協議5. 三層交換機6. VLAN&#xff08;虛擬局域網&#xff09; 三、路由技術1. 路由器端口類型及功能2. 路由器功能3. 路由…

使用C#和FFmpeg開發RTSP視頻播放器的完整指南

RTSP(Real Time Streaming Protocol)是流媒體技術中廣泛使用的協議&#xff0c;廣泛應用于視頻監控、視頻會議和在線直播等領域。本文將詳細介紹如何使用C#和FFmpeg開發一個功能完整的RTSP視頻播放器&#xff0c;涵蓋從環境搭建到核心功能實現的全部過程。 一、開發環境準備 …

前端基礎之《Vue(9)—混入》

一、什么是混入 1、是一種代碼復用的技巧 Vue組件是由若干選項組成的&#xff0c;向組件中混入可復用的選項。 2、作用 比如我封裝兩個組件&#xff0c;一個是A組件&#xff0c;一個是B組件&#xff0c;發現它里面有相同的選項&#xff0c;就可以用混用的方式來復用它。 二、…

Anything V4/V5 模型匯總

??????二次元風格生成擴散模型-anything-v4.0Stable Diffusion anything-v5-PrtRE模型介紹及使用深度探索 Anything V5&#xff1a;安裝與使用全攻略anything-v5x0.25少兒插畫_v1xyn-ai/anything-v4.0

一天學完Servlet!!!(萬字總結)

文章目錄 前言Servlet打印Hello ServletServlet生命周期 HttpServletRequest對象常用api方法請求亂碼問題請求轉發request域對象 HttpServletResponse對象響應數據響應亂碼問題請求重定向請求轉發與重定向區別 Cookie對象Cookie的創建與獲取Cookie設置到期時間Cookie注意點Cook…

Springboot整合 xxljob,自定義添加、修改、刪除、停止、啟動任務

目錄 一、模擬登錄方式 二、注解方式 三、訪問者調用 四、測試 本次自定義方式分為兩種&#xff1a;一種是模擬登錄&#xff0c;另一種是使用注解的方式 一、模擬登錄方式 修改xxl-job-admin工程&#xff0c;在controller里面添加一個MyApiController&#xff0c;在里面添…