返回列表 上一主題 發帖

[原創] python上市櫃三大法人買賣超日報資料下載

剛想了一下,以這個頁面來說,其實也不用用到BeautifulSoup,直接用re就可以了。
  1. import requests
  2. import re

  3. url = 'http://church.oursweb.net/slocation.php?w=1&c=TW&a=台中市&t='

  4. res = requests.get(url)

  5. total_num = re.findall(r'/\s\d{1,3}', res.text)[0].replace('/ ','')

  6. print(total_num)
複製代碼

TOP

回復 92# c_c_lai
說指導不敢當,我也是趁這個機會一邊做一邊學。
其實好不好抓跟網頁的html編排有很大的關係,會提這個數字是因為我自己試了覺得這個數字還有點小麻煩。

您如果是用chrome,可以在想抓取的資料上按右鍵,選「檢查」,應該可以看到類似圖中的畫面(有時候需要點開樹狀結構)。
以這個結構來說,除了上面table的class="tb_pages",我沒有看到什麼容易用的東西,所以我會選這個table做為起始的參考點。
(通常找到目標的方式都會有非常多種,只要能找得到就好了),用下面的code就可以找到整個句子:
  1. url = 'http://church.oursweb.net/slocation.php?w=1&c=TW&a=台中市&t='

  2. res = requests.get(url)

  3. res.encoding='utf-8'

  4. soup = BeautifulSoup(res.text, 'lxml')

  5. target = soup.select('.tb_pages td')[0].text

  6. print(target)
複製代碼
但是數字還是藏在裡頭,真是有點煩人。
到這邊我是再用regular expression把它取出來。
  1. import re
  2. total_num = re.search(r'/\s\d{1,3}', target).group().replace('/ ','')
  3. print(total_num)
複製代碼
另一個比較簡單的方式則是用lxml。

TOP

回復 91# zyzzyva
現在談功力還差太遠了(初淺),還無法駕馭尚請指導,
努力學習中,我幾乎將近有半年多未曾接觸 Python,
應用方面還尚未完全上手,正好碰上你們才使我重拾信心。
(前半個月才動完眼睛手術) 真有麻煩你指教了!

TOP

回復 90# c_c_lai
太好了!如果這樣也不行就頭痛了。
原文中有提到希望可以用縣市為單位來抓。因為網站本身就有提供縣市別分類的連結,如:
http://church.oursweb.net/slocation.php?w=1&c=TW&a=台中市&t=
其實只要把連結換一下,總頁數改一下用現有的 code就可以把該區域的資料抓下來了。
但如果要讓使用者選擇呢?假設我們已經依使用者選擇進入該分區的頁面,但是要如何決定總頁數呢?
以台中市來說。 Screenshot_1.png ,能把圖裡藍圈中的31抓出來嗎?

TOP

本帖最後由 c_c_lai 於 2016-9-12 10:17 編輯

回復 89# zyzzyva
加上         f.write('\ufeff') 後,
一切即恢復平靜 (正常的不得了),這招還真管用呢!
謝謝囉!(執行前即先將 CSV 檔案移除,而後即從兩方面進行觀察,均不予以儲存條件下)
再來一個實用範例,那我的 Python 學習應將開始起步了!
  1. with open('gospel2.csv', 'a', new='', encoding='utf-8') as f:
  2.         fieldnames = ['建檔 ID', '中文名稱', '英文名稱', '分類', '宗派', '母會', '網址', '國別區域', '設立時間', '負責人', '電話', '傳真', '電郵', '會址', '通訊處']
  3.         f.write('\ufeff')
  4.         w = csv.DictWriter(f, fieldnames)
  5.         w.writeheader()
  6.         w.writerows(myList)
  7.         print('gospel2.csv 檔案儲存完畢!')
複製代碼

TOP

回復 83# c_c_lai
後面那段我能理解,是excel讀取csv預設編碼的問題,2007以後的版本應該寫入BOM(byte of mark)可以解決。
之前在encoding=utf-8後面加上sig就是加上BOM,不知道為什麼在2010不行。您有空的話再試試看把他改回去utf-8,
然後在下面加一行「f.write('\ufeff')」手動寫入試試看。
前面那段的問題我實在想不出原因,抓下來的資料在筆記本裡有時正常有時亂碼?
有沒有辦法複製錯誤?確認是不是特定情況或是頁面會出現亂碼的問題,這樣比較有個方向。
pandas就我所知主要用在後段的資料分析,準備資料通常應該還是需要其他工具輔助。

TOP

回復 86# lpk187
你也是我的 Python 啟蒙老師呦!
一起加油吧!

TOP

回復 85# clianghot546
Python(x,y) is a free scientific and engineering development software for numerical computations, data analysis and data visualization based on Python programming language. 它對股市數據的分析圖表非常好用;
而目前的案例是非數值之資料錄數據,謝謝妳!
也歡迎你一同討論!

TOP

回復 84# c_c_lai

我和你一樣也只是初學Python ,對於Python也尚在研究之中,
昨天看到你和zyzzyva大大研究這篇倒也是引發我很大的興趣!
其實我對 pandas 認識也不深,也僅是剛好看到 pandas 可以製作表格 參考網址
其他的可不太懂的, HTML 代碼。對我來說,可是處在完全不懂啊!唉!
對Beautiful Soup 4,呃!也是看得花花的 ,參考網址
一起加油吧!

TOP

回復 32# c_c_lai
可參考 使用python(x,y)

TOP

        靜思自在 : 甘願做、歡喜受。
返回列表 上一主題