★ 前序

【Python】入門・ 從安裝衝到爬蟲・準備階段 − crawler 筆記

★ 正文

サービスです

首先要先記錄一點
就是TypeError的錯誤
簡單來說就是型態宣告不同導致,而 python 無需事先定義宣告變數型態,所以在撰寫時要注意這個問題
當初我卡這邊卡了一兩個小時才發現......

所以 Error Log 很重要,請不要忽視~

上一篇有說到 lib import 是不同的,所以這部分要稍微注意一下,這篇就繼續開始寫下去(其實已經快寫完了)
這篇開始主要是要分析要爬的資料到底長成什麼鬼樣子,然後從中取出來
除了 HTML Parser 外,活用 Regex 以及內部 string 的 method 會是捷徑

......
雖然想找範例可是好像會有點問題所以......
直接就我有用到的每個地方做簡單解說跟筆記呈現好了

  1. 讀檔(json)
  2. 寫檔(json)
  3. 印出
  4. 迴圈
  5. if else
  6. json array object
  7. boolean
  8. 讀取需要爬蟲的網站 html
  9. regex

1. 讀檔(json)

讀 json 檔
with open('xxx.json') as data_file:    
    data = json.load(data_file)

2. 寫檔(json)

將 json 寫入檔案中
with open('NewFile.json', 'w') as f:
     json.dump(arrayList, f)

修正:@Ching Yi Chan(qrtt大神) 該寫 dict 與 list,不是寫 json object 跟 json array

參考資料:寫入與讀檔
參考資料:寫入與讀檔

3. 印出

為什麼要特別多出印出呢?不就 print 嗎?
其實不是,單純的 print 會把 json 資料當成字串印出,我們要分析資料其實很難看
所以我有用另外一個 lib: pprint

pprint import
from pprint import pprint

這樣就可印出乾淨的 json 資料了
(題外話:我本來想有個連結可以導去上一篇 import lib 的位置,結果似乎 logdown 不支援......真的要換 blog 了)

4. 迴圈

for迴圈大家應該都很熟悉
不過有兩種寫法大家應該也很熟悉
一個是用第幾個位置(i)來做計算,一個是直接跑裡面有多少個物件的 for each

for loop
// 範圍在 1 ~ 50
for i in range(1, 50):
    ..
    print(data[i])
  ..
  
for each
for item in arrayList:
    ..
  print(item)
  ..

參考資料:for loop
參考資料:for loop

錯誤訊息參考資料:TypeError: string indices must be integers
出現原因:用迴圈跑一個持續增加的 array list
實際原因還沒有確認,不過目前用迴圈跑一個 array,並持續對其新增 item,就會發生此問題
歡迎 python 高手指錯! Orz

5. if else

判斷式就是寫在 java 或 c 括弧裡的判斷,python 不需要括弧,但要記得加冒號
if 判斷式 :
    ..
  break
else :
    ..
  continue

否定句:

java、c 都是驚嘆號 !, python 是用 not
if not 判斷式 :

參考資料

6. json array object

// 建立 json object
arrayList = {}
// 塞入一個 key  results  json array
arrayList["results"] = []
添加 object 進 array
arrayList["results"].append(jsonObj)

參考資料:JSON 長度
參考資料:給值
參考資料:append
參考資料:python append to array in json object
參考資料:Serializing python object instance to json
參考資料:Parsing values from a JSON file in Python

7. boolean

python 的布林值也有些不同
寫法是:

boolean
hasData = True
hasData = None

參考資料:布林值

8. 讀取需要爬蟲的網站 html

html = urlopen(url)
soup = BeautifulSoup(html.read(), "html.parser")

此時,soup 可用來搜尋所有需要的 tag 或 attribute 、 value

參考資料:BeautifulSoup文件
參考資料:soup.find
參考資料:find parent
警告、錯誤參考資料:No parser was explicitly specified

建議:@余澄弈 除了 bs4 外推薦 pyquery 唷!

9. regex

regex,Regular Expression (正規表示式) 縮寫
主要可以幫助搜尋 BeautifulSoup 無法 cover 的一些規則
下面列幾個參考資料,不過主要還是有特別需要用到的時候再去找就行了
大家可以用線上測試的網站來做 regex 是否正確的練習~

參考資料:find key value
參考資料:match 例子
參考資料:搜尋任何數字
重要參考資料:線上測試 regex

綜合參考資料:boolean and json
綜合參考資料:unicode-全形之類文字

Comments

comments powered by Disqus