2021年2月27日 星期六

Python+Firefox+網頁XPath取得GoodInfo股票資訊

 今天我們要講解的是,如何使用Firefox+Python+網頁XPath來抓取GoodInfo股票資訊

Python使用的套件為requests、re與lxml

requests可以幫助取得網頁內容

re能夠快速取得或移除字串內容

lxml則能夠從網頁中有效的提取資料

今天要抓取的標的是大立光,股票代號3008 

首先抓取公司名稱與產業別

這邊使用requests.get取得了網頁內容 ,並填入標頭資料,模擬瀏覽器的行為

headers = {

    'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'

}

UrlCompanyInfo = 'https://goodinfo.tw/StockInfo/StockDetail.asp?STOCK_ID='

strID='3008'

resInfo = requests.get(UrlCompanyInfo+strID, headers=headers)


宣告其編碼為UTF-8

resInfo.encoding='utf-8'


並使用etree.HTML解析

htmlInfo = etree.HTML(resInfo.text)


接著使用xpath取出公司名稱與產業別節點內容,因為lxml不認得tbody,所以要使用re將tbody給取代成空白

XpathCompanyName = '/html/body/table[2]/tbody/tr/td[3]/table/tbody/tr[2]/td[3]/table[2]/tbody/tr[1]/td[2]'

CompanyName = htmlInfo.xpath(re.sub(r'/tbody([[]\\d[]])?', '', XpathCompanyName) + '/text()')[0]

XpathCompanyIndustry = '/html/body/table[2]/tbody/tr/td[3]/table/tbody/tr[2]/td[3]/table[2]/tbody/tr[2]/td[2]'

CompanyIndustry = htmlInfo.xpath(re.sub(r'/tbody([[]\\d[]])?', '', XpathCompanyIndustry) + '/text()')[0]


最後將資料印出

print(CompanyName)

print(CompanyIndustry)


那網頁的節點該如何去尋找呢?

首先連到goodinfo中的StockDetail頁面

接著往下拉到公司基本資料表格中的名稱,點選右鍵選擇檢測元素,

Firefox檢測器會跳到該節點位置,選擇複製XPath,即可抓取公司名稱節點

同樣對產業別內容點選右鍵,選擇檢測元素

檢測器會跳到該節點位置,選擇複製XPath,即可抓取產業別內容節點

接著來抓取股利政策,來到StockDividendPolicy頁面,對表格內容點選檢測元素

會發現到有些資料佔用的不只一列或一欄

因此,需要把佔用的欄跟列補上資料,這樣才不會抓出來的標頭是空字串

再來設定要抓取的資料

最後來抓取獲利指標,來到StockBzPerformance頁面,對表格內容點選檢測元素

跟股利政策頁面一樣,會有些資料佔用的不只一列或一欄

一樣把佔用的欄跟列補上資料

再來設定要抓取的資料


程式碼


教學與操作影片



0 意見:

張貼留言

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Blogger Templates