iT邦幫忙

0

python+selenium抓取搜尋結果的某段文字

  • 分享至 

  • xImage

前輩好
基本上我沒學過python 單純用GPT寫了一段
然後貼到pycharm使用
用途是要在【經濟部商業司】https://findbiz.nat.gov.tw/fts/query/QueryList/queryList.do
這邊隨便找家公司統編當範例 86386290
搜尋結果會顯示
歐科商業電訊股份有限公司
統一編號:86386290 , 登記機關:臺北市政府 , 登記現況:核准設立 , 地址:臺北市南港區三重路19之13號8樓 , 資料種類:公司 , 核准設立日期 :0820105 , 核准變更日期:1120626

而我要抓取公司統編的核准變更日期:1120626 <==這7個數字 (之後有變動要Line通知我)
這邊先討論抓取問題
目前狀況是PYcharm run下去後能看到程式自動開啟chrome和網頁搜尋,到自動關閉網頁
但py的run最後還是會跳一堆錯誤~~ 且沒顯示出日期
請問該怎麼修改才能讓檔案顯示出【核准變更日期:1120626】 ,或也許存個LOG之類的


from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager

# 安装和启动 ChromeDriver
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)

try:
    # 访问指定网站
    driver.get("https://findbiz.nat.gov.tw/fts/query/QueryBar/queryInit.do")

    # 查找搜索输入框
    search_box = driver.find_element(By.ID, "qryCond")

    # 输入公司号码并提交
    search_box.send_keys("86386290")
    search_box.send_keys(Keys.RETURN)

    # 等待页面加载并检查结果是否出现
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "div.table-responsive"))
    )

    # 抓取搜索结果文本
    result_text = driver.find_element(By.CSS_SELECTOR, "div.table-responsive").text
    print(result_text)  # 打印抓取的文本进行调试

    # 查找 "核准變更日期" 并提取后面的七位数字
    keyword = "核准變更日期:"
    if keyword in result_text:
        start_index = result_text.find(keyword) + len(keyword)
        date_seven_digits = result_text[start_index:start_index + 7]
        print("提取的七位数: ", date_seven_digits)
    else:
        print("未找到核准變更日期")

finally:
    # 关闭浏览器
    driver.quit()

-------------------------
最後會跳出 ~~等錯誤~~    
selenium.common.exceptions.TimeoutException: Message: 
Stacktrace:
	GetHandleVerifier [0x0055B8E3+45827]
	(No symbol) [0x004EDCC4]
	(No symbol) [0x003E150F]
	(No symbol) [0x004220BC]
	(No symbol) [0x0042216B]
	(No symbol) [0x0045E0F2]
	(No symbol) [0x00442E44]
	(No symbol) [0x0045C034]
	(No symbol) [0x00442B96]
	(No symbol) [0x00416998]
	(No symbol) [0x0041751D]
	GetHandleVerifier [0x00814513+2899763]
	GetHandleVerifier [0x0086793D+3240797]
	GetHandleVerifier [0x005E13B4+593364]
	GetHandleVerifier [0x005E82DC+621820]
	(No symbol) [0x004F70A4]
	(No symbol) [0x004F37A8]
	(No symbol) [0x004F3947]
	(No symbol) [0x004E59FE]
	BaseThreadInitThunk [0x761CFCC9+25]
	RtlGetAppContainerNamedObjectPath [0x76F880CE+286]
	RtlGetAppContainerNamedObjectPath [0x76F8809E+238]
```**
看更多先前的討論...收起先前的討論...
Hi,目前我丟到我的爬蟲中看起來是單純CSS_SELECTOR選取元素標籤沒有下好而已

以下是稍微做調整的部分,實測後確實能抓到你要的資料
# 等待页面加载并检查结果是否出现
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "vParagraph"))
)

#----新增先抓取table元素----
table = driver.find_element(By.ID, "vParagraph")

# 抓取搜索结果文本
result_text = table.find_element(By.CSS_SELECTOR, "div div:nth-child(2)").text
print(result_text) # 打印抓取的文本进行调试
比較好奇div.table-responsive這個標籤是從哪裡抓到的
因為我從開發者工具裡面好像沒找到XD
UncleBen iT邦新手 5 級 ‧ 2024-06-17 11:01:42 檢舉
感謝steven兄~
不知為何 # 等待页面加载
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "vParagraph"))
)一直跳這行錯誤~顯示
WebDriverWait(driver, 10).until(
NameError: name 'WebDriverWait' is not defined

所以 # 等待页面加载 改成用GPT的 #time.sleep(3) <==換成這句就好了
有點神奇 因為上面的import是有將他導入的
不確定是不是因為你是用PYcharm的緣故
但只是從彈性等待變成強制等待3秒
問題不大XD
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
Jolia5314
iT邦新手 5 級 ‧ 2024-06-14 16:14:43
【**此則訊息已被站方移除**】

尚未有邦友回答

立即登入回答