返回列表 上一主題 發帖

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

回復 70# c_c_lai
Screenshot_4.png
tmpList沒有定義。
要記得在function外面加上:
myDict = {}
myList = []
tmpList = []
然後那個print(myUrl)可以註解掉。

TOP

回復 71# zyzzyva

TOP

回復 71# zyzzyva

TOP

回復 73# c_c_lai
跟get_detail放的位子也有關係(call function的時候python就會去找,如果還沒定義就會有問題)。
改了一個bug(之前會址沒處理到),加上輸出的部份。
目前的code我整理了一下,您用這個再測試看看。
  1. import requests
  2. from bs4 import BeautifulSoup
  3. import csv


  4. def get_detail(url, s):
  5.     print(url)
  6.     res = s.get(url)
  7.     res.encoding = 'utf-8'
  8.     soup = BeautifulSoup(res.text, 'lxml')
  9.     detail = soup.find_all('td', 'church_detail')
  10.     for ddd in detail[0].stripped_strings:
  11.         if '回報資料錯誤 >' in ddd:
  12.             continue
  13.         else:
  14.             tmpList.append(ddd)

  15.     for i, s in enumerate(tmpList):
  16.         if s == "":
  17.             continue
  18.         elif any(x in s for x in ['電郵', '網址', '宗派', '母會']):
  19.             myDict[s.replace(':', '')] = tmpList[i+1]
  20.         elif '會址' in s:
  21.             myDict[s.split(':')[0]] = (s.split(':')[1] + tmpList[i+1])
  22.         else:
  23.             try:
  24.                 myDict[s.split(':')[0]] = s.split(':')[1]
  25.             except:
  26.                 pass
  27.     myList.append(myDict)


  28. myDict = {}
  29. myList = []
  30. tmpList = []
  31. s = requests.session()

  32. for i in range(1, 2):
  33.     url = 'http://church.oursweb.net/slocation.php?w=1&c=TW&a=&t=&p=' + str(i)
  34.     res = s.get(url)
  35.     res.encoding = 'utf-8'
  36.     soup = BeautifulSoup(res.text, 'lxml')

  37.     for d in soup.select('a[href^="church.php?pkey"]'):
  38.         myUrl = 'http://church.oursweb.net/' + d.get('href')
  39.         get_detail(myUrl,s)
  40.         myDict = {}

  41.     i += 1

  42. with open('gospel2.csv', 'a', new='', encoding='utf-8') as f:
  43.         fieldnames = ['建檔 ID', '中文名稱', '英文名稱', '分類', '宗派', '母會', '網址', '國別區域', '設立時間', '負責人', '電話', '傳真', '電郵', '會址', '通訊處']
  44.         w = csv.DictWriter(f, fieldnames)
  45.         w.writeheader()
  46.         w.writerows(myList)
複製代碼

TOP

回復 74# zyzzyva

TOP

回復 75# c_c_lai
跟早上一樣的問題,不知道是bug還是有特殊原因,論壇不能輸入「線」的英文。

這邊改一下應該就可以了。

TOP

本帖最後由 c_c_lai 於 2016-9-11 18:42 編輯

回復 76# zyzzyva

謝謝你用心的指導!

TOP

本帖最後由 zyzzyva 於 2016-9-11 18:45 編輯

回復 77# c_c_lai
這樣應該是有work了,用excel開看看,如果是亂碼要用筆記本開起來存檔一下再重開。

TOP

回復 78# zyzzyva
筆記本內亦是一堆亂碼,有沒有辦法存檔時轉成 Big5 碼之類
如 Unicode 等,否則每次都需另找 NotePad++ 等工具轉碼
實在太麻煩了。

TOP

回復 79# c_c_lai
怪怪,我的可以說,您的在ipython裡可以顯示可是用筆記本開反而不行?
編碼的問題我也一直很頭痛,會用utf-8是因為資料裡有一些不是big5,像「平瀬義樹 牧師」的「瀬」。
在最後with open那邊的encoding改成encoding='utf-8-sig'試試看。

TOP

        靜思自在 : 不要小看自己,因為人有無限的可能。
返回列表 上一主題