[问题] 公开资讯观测站股东会爬虫

楼主: ccherry225 (猫咪QQ)   2021-08-14 22:16:42
各位大神们好!我在爬公开资讯观测站的资料遇到一个问题,已经卡了我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()
作者: a367560 (欸参陆柒)   2021-08-15 00:39:00
看了很久你的code 感觉是你没有处理跳转到弹出式视窗导致得到的东西是你说的那个大概看了一下 位置上抓到的东西 确实是召集受益人大会公告没错 建议你再好好读一下你参考的文章 他里面好像有教
作者: Kitten1156 (Frank_kitten)   2021-08-15 01:02:00
噢噢 确实是楼上说的 我才刚想贴的说driver.switch_to_window(driver.window_handles[0])上面这句应该是要1啦
楼主: ccherry225 (猫咪QQ)   2021-08-15 09:20:00
谢谢Kitten1156!可以了 谢谢大家!
作者: g919233 (Jia)   2021-08-15 21:04:00
如果你需要 ajax 的话:POSThttps://mops.twse.com.tw/mops/web/ajax_t108sb16data = "encodeURIComponent=1&TYPEK=sii&DATE1=20210422&SEQ_NO=1&COMP=2330&SKIND=A&step=2&firstin=1&BJP=false"

Links booklink

Contact Us: admin [ a t ] ucptt.com