[問題] 公開資訊觀測站股東會爬蟲

看板Python作者 (貓咪QQ)時間2年前 (2021/08/14 22:16), 編輯推噓3(3012)
留言15則, 4人參與, 2年前最新討論串1/1
各位大神們好!我在爬公開資訊觀測站的資料遇到一個問題,已經卡了我2天QQ 就是我想要抓取股東會的開會日期跟辦理過戶日期的時間。 爬蟲的程式碼,輸入股票代碼跟跳出新的視窗顯示文件都沒問題,但是要抓下開會日期跟 停止過戶日期都抓不到。 使用 tbody =driver.find_element_by_xpath(' //*[@id="table01"]/center/table[3]/ tbody') 然而 tbody.text都只顯示 '召集受益人大會公告',以致我自訂函數抓日期都抓不到。 不曉得是有哪邊出錯了,或是有什麼相關網址可以參考,再麻煩各位善心的大大們回答了 !謝謝!再次感謝大家 我的電腦是 Mac 使用的是 Anaconda 下的 Spyder 有參考 https://medium.com/smartalpha/使用-selenium-firefox-動態爬取公開觀測站 資料-eb84e7b034c 程式碼如下: from openpyxl import * # for excel from selenium import webdriver # open browser from selenium.webdriver.support.ui import Select from bs4 import BeautifulSoup # 解析html import time #休息時間 import requests driver = webdriver.Firefox(executable_path = '/usr/local/bin/geckodriver') url = 'https://mops.twse.com.tw/mops/web/t108sb16_q1' driver.get(url) # 前往這個網站 data_list = [] data_dict = {} ticker = '2330' try: print(ticker,"Start searchinh!") keyword = driver.find_element_by_id("co_id") keyword.clear() keyword.send_keys(ticker) search_button = driver.find_element_by_css_selector("#search_bar1 > div > input[type=button] ") search_button.click() time.sleep(2) except: driver.quit() try: go_to_data_page_button = driver.find_element_by_xpath( "/html/body/center/table/tbody/tr/td/div[4]/table/tbody/tr/td/div/tabl e/tbody/tr/td[3]/div/div[5]/div/center/form/table[2]/tbody/tr[2]/td[5]/input" ) go_to_data_page_button.click() except Exception as e: print("查無:",ticker) def find_between(s,first,last): try: start = s.index(first)+len(first) end = s.index(last,start) return s[start:end] except ValueError: return "" def analyze_text(text): shareholders_meeting_date = find_between(tbody.text,"開會日期:","").strip () shareholders_meeting_date = shareholders_meeting_date.replace("年",'/') shareholders_meeting_date = shareholders_meeting_date.replace("月",'/') shareholders_meeting_date = shareholders_meeting_date.replace("日",'') shareholders_last_transfer_date = find_between(tbody.text,"辦理過戶日期時 間:","").strip() shareholders_last_transfer_date = shareholders_last_transfer_date.replace( "年",'/') shareholders_last_transfer_date= shareholders_last_transfer_date.replace(" 月",'/') shareholders_last_transfer_date = shareholders_last_transfer_date.replace( "日",'') return [shareholders_meeting_date,shareholders_last_transfer_date ] tbody = driver.find_element_by_xpath(' //*[@id="table01"]/center/table[3]/tbod y') analyze_text(tbody.text) data_list.append([ticker, analyze_text(tbody.text)]) data_analyzed = analyze_text(tbody.text) data_dict[ticker] = data_analyzed print(ticker,":",data_analyzed) driver.close() -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.217.46.235 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1628950605.A.401.html

08/15 00:39, 2年前 , 1F
看了很久你的code 感覺是你沒有處理跳轉到彈出式視窗導致
08/15 00:39, 1F

08/15 00:40, 2年前 , 2F
得到的東西是你說的那個
08/15 00:40, 2F

08/15 00:41, 2年前 , 3F
大概看了一下 位置上抓到的東西 確實是召集受益人大會公
08/15 00:41, 3F

08/15 00:42, 2年前 , 4F
告沒錯 建議你再好好讀一下你參考的文章 他裡面好像有教
08/15 00:42, 4F

08/15 01:02, 2年前 , 5F
噢噢 確實是樓上說的 我才剛想貼的說
08/15 01:02, 5F

08/15 01:02, 2年前 , 6F
driver.switch_to_window(driver.window_handles[0])
08/15 01:02, 6F

08/15 01:03, 2年前 , 7F
上面這句應該是要1啦
08/15 01:03, 7F

08/15 09:20, 2年前 , 8F
謝謝Kitten1156!可以了 謝謝大家!
08/15 09:20, 8F

08/15 21:04, 2年前 , 9F
如果你需要 ajax 的話:
08/15 21:04, 9F

08/15 21:05, 2年前 , 10F
POST
08/15 21:05, 10F

08/15 21:05, 2年前 , 11F

08/15 21:06, 2年前 , 12F
data = "encodeURIComponent=1&TYPEK=sii&DATE1=202104
08/15 21:06, 12F

08/15 21:06, 2年前 , 13F
08/15 21:06, 13F

08/15 21:06, 2年前 , 14F
22&SEQ_NO=1&COMP=2330&SKIND=A&step=2&firstin=1&BJP=
08/15 21:06, 14F

08/15 21:07, 2年前 , 15F
false"
08/15 21:07, 15F
文章代碼(AID): #1X5z1DG1 (Python)