在如今的大數(shù)據(jù)時代,企業(yè)決策越來越依賴于數(shù)據(jù)分析,而數(shù)據(jù)的高效獲取與處理是確保分析結(jié)果準(zhǔn)確的重要基礎(chǔ)。然而,面對網(wǎng)絡(luò)反爬蟲技術(shù)的進步和復(fù)雜的法律合規(guī)要求,很多企業(yè)在采集全球數(shù)據(jù)時遇到了困難。為了應(yīng)對這些挑戰(zhàn),本文將介紹一種常見的代理服務(wù)技術(shù),并結(jié)合實際案例展示其在市場調(diào)研和數(shù)據(jù)采集中的應(yīng)用。
實際案例:利用代理服務(wù)抓取企業(yè)信息
以下代碼演示了一個簡單的爬蟲,它通過代理服務(wù)訪問某網(wǎng)站,獲取企業(yè)的基本信息。這些數(shù)據(jù)不僅能夠幫助企業(yè)了解競爭對手的基本運營情況,還可以作為市場調(diào)研的重要依據(jù)。
導(dǎo)入必要的庫
import re
from selenium import webdriver
from selenium. webdriver. chrome. service import Service
from selenium. webdriver. common. by import By
from selenium. webdriver. common. keys import Keys
from selenium. webdriver. support. ui import WebDriverWait
from selenium. webdriver. support import expected_conditions as EC
import time
re
: 用于正則表達式匹配,在代碼中沒有使用,但在一些數(shù)據(jù)處理任務(wù)中常見。selenium
: 這是自動化網(wǎng)頁操作的核心庫。
webdriver
: 用于啟動和控制瀏覽器的對象。Service
: 用于設(shè)置和管理 ChromeDriver 的服務(wù)。By
: 用于定位網(wǎng)頁元素(如按 XPath、CSS 選擇器等)。Keys
: 模擬鍵盤操作,例如按回車鍵。WebDriverWait
: 用于顯式等待,等待某個元素加載完成。expected_conditions as EC
: 通過預(yù)期條件來控制 WebDriverWait,確保在執(zhí)行操作前頁面元素已完全加載。 time
: 用于處理時間延遲,盡管在此代碼中大部分時間都使用了顯式等待而不是靜態(tài)延時。 設(shè)置和啟動 ChromeDriver
service = Service( executable_path= r'D:\google download\chromedriver-win64\chromedriver-win64\chromedriver.exe' )
driver = webdriver. Chrome( service= service)
這里通過指定 ChromeDriver 路徑來啟動一個 Chrome 瀏覽器實例。 executable_path
是 ChromeDriver 的安裝路徑,確保 ChromeDriver 版本與 Chrome 瀏覽器兼容。 訪問目標(biāo) URL
url = 'https://www.tianyancha.com/company/639627788'
driver. get( url)
使用 driver.get()
方法打開目標(biāo)網(wǎng)址,天眼查某個公司頁面。 顯式等待并進行交互操作
# 等待并點擊第一個按鈕
first_button = WebDriverWait( driver, 10 ) . until(
EC. element_to_be_clickable( ( By. XPATH, '//*[@id="J_NavTypeLink"]/span' ) )
)
first_button. click( )
顯式等待 : 使用 WebDriverWait
和 expected_conditions
讓代碼等待指定元素的出現(xiàn)。例如,首先等待第一個按鈕可點擊,然后點擊該按鈕。這里使用了 XPath 來定位按鈕。 接下來的操作包括:
登錄操作
# 輸入用戶名和密碼
username_field = WebDriverWait( driver, 10 ) . until(
EC. presence_of_element_located( ( By. XPATH, '//*[@id="mobile"]' ) )
)
password_field = driver. find_element( By. XPATH, '//*[@id="password"]' )
# 輸入實際賬號和密碼
username_field. send_keys( '賬號' )
password_field. send_keys( '密碼' )
顯式等待用戶名輸入框的加載,然后填寫用戶名和密碼。 這些賬號信息需要替換為實際的登錄憑證。 同意隱私政策并提交
# 勾選隱私政策復(fù)選框
privacy_policy_checkbox = driver. find_element( By. XPATH, '//*[@id="agreement-checkbox-account"]' )
privacy_policy_checkbox. click( )
# 使用回車提交
password_field. send_keys( Keys. RETURN)
勾選隱私政策復(fù)選框并提交登錄表單。使用 Keys.RETURN
模擬按下回車鍵。 等待頁面加載并抓取數(shù)據(jù)
# 提取參保人數(shù)
insured_num_element = WebDriverWait( driver, 10 ) . until(
EC. presence_of_element_located( ( By. XPATH, '//*[@id="page-root"]/div[3]/div[1]/div[4]/div/div[3]/div[2]/div[2]/div[1]/div/div[2]/table/tbody/tr[8]/td[2]' ) )
)
company_info[ '參保人數(shù)' ] = insured_num_element. text. strip( )
提取公司信息 : 代碼繼續(xù)使用顯式等待定位元素并提取信息。通過 XPath 定位到頁面中的表格,提取公司 參保人數(shù) 、法定代表人 、電話 和 注冊資本 等數(shù)據(jù)。 使用 text.strip()
清理文本中的前后空白字符。 打印抓取的數(shù)據(jù)
for key, value in company_info. items( ) :
print ( f' { key} : { value} ' )
將提取到的數(shù)據(jù)存儲在字典 company_info
中,最后遍歷字典并打印每個鍵值對。 關(guān)閉瀏覽器
driver. quit( )
操作完成后,調(diào)用 driver.quit()
關(guān)閉瀏覽器并釋放資源。
完整代碼
import re
from selenium import webdriver
from selenium. webdriver. chrome. service import Service
from selenium. webdriver. common. by import By
from selenium. webdriver. common. keys import Keys
from selenium. webdriver. support. ui import WebDriverWait
from selenium. webdriver. support import expected_conditions as EC
import time
# 設(shè)置 ChromeDriver 路徑
service = Service( executable_path= r'D:\google download\chromedriver-win64\chromedriver-win64\chromedriver.exe' )
# 啟動 Chrome WebDriver
driver = webdriver. Chrome( service= service)
# 訪問 URL
url = 'https://www.tianyancha.com/company/639627788'
driver. get( url)
# 使用顯式等待代替 time.sleep
try :
# 等待并點擊第一個按鈕
first_button = WebDriverWait( driver, 10 ) . until(
EC. element_to_be_clickable( ( By. XPATH, '//*[@id="J_NavTypeLink"]/span' ) )
)
first_button. click( )
# 等待并點擊密碼登錄按鈕
login_button = WebDriverWait( driver, 10 ) . until(
EC. element_to_be_clickable( ( By. XPATH, '//*[@id="web-content"]/div/div/div/div/div[2]' ) )
)
login_button. click( )
# 等待并點擊第二個按鈕
second_button = WebDriverWait( driver, 10 ) . until(
EC. element_to_be_clickable( ( By. XPATH, '//*[@id="web-content"]/div/div/div/div/div[6]/div/div[1]/div[2]' ) )
)
second_button. click( )
except Exception as e:
print ( "操作失敗:" , e)
# 輸入用戶名和密碼
try :
username_field = WebDriverWait( driver, 10 ) . until(
EC. presence_of_element_located( ( By. XPATH, '//*[@id="mobile"]' ) )
)
password_field = driver. find_element( By. XPATH, '//*[@id="password"]' )
# 輸入實際賬號和密碼
username_field. send_keys( '賬號' )
password_field. send_keys( '密碼' )
# 勾選隱私政策復(fù)選框
privacy_policy_checkbox = driver. find_element( By. XPATH, '//*[@id="agreement-checkbox-account"]' )
privacy_policy_checkbox. click( )
# 使用回車提交
password_field. send_keys( Keys. RETURN)
# 等待頁面加載完成
WebDriverWait( driver, 10 ) . until(
EC. presence_of_element_located( ( By. CLASS_NAME, 'company-header-content' ) )
)
except Exception as e:
print ( "輸入用戶名或密碼時出錯:" , e)
# 存儲提取的數(shù)據(jù)
company_info = { }
try :
time. sleep( 30 )
# 提取參保人數(shù)
insured_num_element = WebDriverWait( driver, 10 ) . until(
EC. presence_of_element_located( ( By. XPATH, '//*[@id="page-root"]/div[3]/div[1]/div[4]/div/div[3]/div[2]/div[2]/div[1]/div/div[2]/table/tbody/tr[8]/td[2]' ) )
)
company_info[ '參保人數(shù)' ] = insured_num_element. text. strip( )
# 提取法定代表人
legal_representative_element = driver. find_element( By. XPATH, '//*[@id="page-root"]/div[3]/div[1]/div[4]/div/div[3]/div[2]/div[2]/div[1]/div/div[2]/table/tbody/tr[2]/td[2]/div/div/div/div[2]/div/a' )
company_info[ '法定代表人' ] = legal_representative_element. text. strip( )
# 提取電話
phone_element = driver. find_element( By. XPATH, '//*[@id="page-root"]/div[3]/div/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[2]/div[1]/span[2]/span' )
company_info[ '電話' ] = phone_element. text. strip( )
# 提取注冊資本
registered_capital_element = driver. find_element( By. XPATH, '//*[@id="page-root"]/div[3]/div[1]/div[4]/div/div[3]/div[2]/div[2]/div[1]/div/div[2]/table/tbody/tr[4]/td[4]/div' )
company_info[ '注冊資本' ] = registered_capital_element. text. strip( )
except Exception as e:
print ( "提取數(shù)據(jù)時出錯:" , e)
# 打印提取到的數(shù)據(jù)
for key, value in company_info. items( ) :
print ( f' { key} : { value} ' )
# 關(guān)閉瀏覽器
driver. quit( )
運行結(jié)果
通過結(jié)合亮數(shù)據(jù)的代理服務(wù),我們可以使該爬蟲程序在訪問大量數(shù)據(jù)時更加穩(wěn)定,不受網(wǎng)絡(luò)封禁的影響。亮數(shù)據(jù)的全球代理IP網(wǎng)絡(luò)(即日起,注冊新用戶,可以獲得2+5共7美金免費試用產(chǎn)品的機會。 )確保用戶可以靈活地從不同地區(qū)采集數(shù)據(jù),規(guī)避IP封禁帶來的阻礙。同時,亮數(shù)據(jù)的智能管理系統(tǒng)能夠?qū)崟r更換IP,并為用戶提供智能助手支持,幫助其快速上手并解決技術(shù)難題。
亮數(shù)據(jù)的技術(shù)優(yōu)勢與應(yīng)用場景
通過使用全球代理服務(wù),我們可以確保數(shù)據(jù)抓取過程的穩(wěn)定性,尤其是在需要跨境訪問數(shù)據(jù)時。代理網(wǎng)絡(luò)能夠幫助用戶避免因頻繁訪問相同目標(biāo)而被封禁。同時,智能管理系統(tǒng)能自動更換IP,提升抓取效率。
適用場景:靈活應(yīng)對多樣化的數(shù)據(jù)需求
市場調(diào)研與競爭情報 : 采集競爭對手的產(chǎn)品、價格和促銷信息。金融數(shù)據(jù)抓取與分析 : 獲取實時市場行情、匯率等數(shù)據(jù)。品牌保護與知識產(chǎn)權(quán)管理 : 監(jiān)控電商平臺上是否存在假冒偽劣產(chǎn)品。
產(chǎn)品更新:簡化注冊流程與智能助手升級
為了提升用戶體驗,亮數(shù)據(jù)近期對產(chǎn)品做了一系列的更新,其中包括注冊流程的簡化和智能助手的升級。新客戶首次充值優(yōu)惠,充多少送多少,最高500美金。
1.一鍵注冊,立即上手
亮數(shù)據(jù)的注冊流程現(xiàn)已簡化,普通用戶無需復(fù)雜的審核流程,僅需填寫基礎(chǔ)信息即可快速注冊并開始使用。注冊頁面經(jīng)過優(yōu)化,用戶可以在短短幾秒鐘內(nèi)完成注冊,點擊驗證郵件即可進入系統(tǒng),大幅提升了注冊效率。
2.智能助手升級,隨時提供幫助
亮數(shù)據(jù)的智能助手內(nèi)嵌了ChatGPT技術(shù),能夠幫助用戶解答各種關(guān)于代理設(shè)置的問題。用戶可以直接用中文提問,獲得即時幫助。智能助手不僅提供基本的操作指導(dǎo),還能根據(jù)用戶的問題提供深度建議,確保即便是復(fù)雜的數(shù)據(jù)抓取任務(wù),用戶也能找到適合的解決方案。
3.豐富的技術(shù)支持
為了確保用戶能夠順利使用產(chǎn)品,亮數(shù)據(jù)提供了豐富的技術(shù)支持,包括幫助文檔、操作視頻、客戶服務(wù)等。用戶可以通過官網(wǎng)的技術(shù)支持頁面,找到所需的資源,學(xué)習(xí)如何充分利用亮數(shù)據(jù)的強大功能。
數(shù)據(jù)中心代理和靜態(tài)代理,最近做了大幅的價格和收費模式的調(diào)整,頗具競爭力,有興趣的 可以上公司主頁了解詳情。以上充值贈送活動,針對數(shù)據(jù)中心和靜態(tài)代理同樣有效!
立即注冊,開啟您的數(shù)據(jù)抓取之旅!
隨著數(shù)據(jù)需求的不斷增加,亮數(shù)據(jù)也在不斷創(chuàng)新,計劃未來繼續(xù)擴大IP資源庫,同時引入更先進的代理管理系統(tǒng)。亮數(shù)據(jù)還將進一步優(yōu)化用戶體驗,特別是在智能助手方面,通過增加更多的自動化功能,幫助用戶簡化復(fù)雜的代理設(shè)置,真正實現(xiàn)數(shù)據(jù)抓取的高效化和智能化。
亮數(shù)據(jù)為此次內(nèi)容提供額外優(yōu)惠:現(xiàn)在注冊可以享受以上所有的價格優(yōu)惠的同時,再送15美金特別試用金!歡迎訪問亮數(shù)據(jù)官網(wǎng) ,體驗高效的數(shù)據(jù)抓取服務(wù),助您在數(shù)據(jù)驅(qū)動的競爭中搶占先機!不論是企業(yè)還是個人,都可以通過亮數(shù)據(jù)找到適合的代理解決方案。