2015年12月28日 星期一

Python 基本爬蟲程式 (crawler) 範例 - 以 Google 新聞為例

目標:以 Google 新聞網頁為例,擷取焦點新聞各主題新聞標題與連結網址。

Google 新聞-焦點新聞 範例
以 InfoLite (Chrome擴充工具) 可以發現我們要擷取的資料在網頁原始碼中的 .esc-body 和 .esc-lead-article-title 兩個 class  中可以找到。



工具:
Python Packages 也可以 pip 方式進行安裝:
export http_proxy=http://proxy.hinet.net:80
export https_proxy=http://proxy.hinet.net:80

pip install requests
pip install BeautifulSoup4



程式:
# coding=utf-8

import requests
from bs4 import BeautifulSoup

res = requests.get("https://news.google.com")
soup = BeautifulSoup(res.text)
print soup.select(".esc-body")

count = 1

for item in soup.select(".esc-body"):
    print '======[',count,']========='
    news_title = item.select(".esc-lead-article-title")[0].text
    news_url = item.select(".esc-lead-article-title")[0].find('a')['href']
    print news_title
    print news_url
    count += 1


Python3 版本 (2017/04/02新增)
#!/usr/bin/env python3

# coding=utf-8
# -*- coding: utf8 -*-

from urllib.request import urlopen
from bs4 import BeautifulSoup

res = urlopen("https://news.google.com")
soup = BeautifulSoup(res, "html.parser")
#print soup.select(".esc-body")

count = 1

for item in soup.select(".esc-body"):
    print('======[',count,']=========')
    news_title = item.select(".esc-lead-article-title")[0].text
    news_url = item.select(".esc-lead-article-title")[0].find('a')['href']
    print(news_title)
    print(news_url)
    count += 1

執行結果:
======[ 1 ]=========
美河市案宣判柯P解讀:2個小官非常賤
http://www.chinatimes.com/realtimenews/20151228002594-260401
======[ 2 ]=========
北海道巴士對撞11台灣客受傷【更新】
http://www.cna.com.tw/news/firstnews/201512285015-1.aspx
======[ 3 ]=========
邱毅再爆816專案小英研究兩國論索262萬
http://www.chinatimes.com/realtimenews/20151228002822-260401
======[ 4 ]=========
芝加哥警射殺2非裔家屬淚訴停止暴力
http://www.cna.com.tw/news/firstnews/201512285013-1.aspx

...

======[ 40 ]=========
食安再爆!素食也不安全蒟蒻竟摻工業用碱粉
http://www.uho.com.tw/hotnews.asp?aid=39330
======[ 41 ]=========
(用錯染髮劑增膀胱癌風險,3大守則安心變色/圖片取自優活健康網)
http://www.uho.com.tw/hotnews.asp?aid=39317
======[ 42 ]=========
當市長完成創傷急救體系柯P感概想到朱立倫
http://news.ltn.com.tw/news/politics/breakingnews/1553878



延伸閱讀:




參考資料:



#

2015年12月17日 星期四

R - 簡單洗牌函數

> # 洗牌 to shuffle cards
> to_shuffle_cards <- function() {
+ rep_times = 1
+ cards <- matrix(nrow=4, sample(rep(1:52,times=rep_times), 52, replace=FALSE))
+ rownames(cards) <- c("player1","player2","player3","player4")
+ cards <- as.table(cards)
+ return(cards)
+ }

> x <- to_shuffle_cards()
> y <- to_shuffle_cards()
> x
         A  B  C  D  E  F  G  H  I  J  K  L  M
player1  4 34 19 45  3 42 27 24 37 40 51 22  5
player2 35 16 17 38  1 30 13 47 33 26 15 44 52
player3  7 39 41 10 36 23 48 14 20 31 25  6 46
player4 12 49  8 21 18 43  2 50 28  9 32 29 11

> y
         A  B  C  D  E  F  G  H  I  J  K  L  M
player1 31 17 15 37  5 18 43  3 51 13  9 38 19
player2 20 27 10 45 30 32  7 48 47 11  2 25 42
player3 41 34 29 50  8  4 28 35 23 44  1 12 52
player4  6 49 16 24 40 14 36 21 26 33 46 22 39

#

2015年11月30日 星期一

Windows 7 下幫 R 設定 HTTP Proxy 參數

將 RGui.exe ICON 上按下滑鼠右鍵,選擇內容修改程式執行捷徑,加上 http_proxy 設定即可:

原始設定:"D:\R\R-3.2\bin\x64\Rgui.exe"

設定Proxy:"D:\R\R-3.2\bin\x64\Rgui.exe" http_proxy=http://userId:password@your.proxy.domain:8080/

#

2015年10月18日 星期日

Mac OS X El Capitan 10.11 + FT232 USB模組 + Arduino Pro mini (5V, 16MHz)

材料

  • Arduino Pro mini x 1
  • FT232 USB 模組 x 1
  • USB傳輸線 x 1 (連結Mac電腦和 USB TO FT232)

安裝Virtual COM Port Driver
  • 至FTDI網站找適合的驅動程式,範例安裝Mac OS X 10.9以上 x64 v2.3 FTDI USB Serial Driver
FTDI網站下載VCP Driver

接線
  • FT232 USB 模組和Arduino Pro mini 恰好六支pin腳對應上
    (DTR, RX<->TX, TX<-RX, VCC, CTS, BLK)

DTR, RX<->TX, TX<->RX, VCC, CTS, BLK 分別對應好
利用FT232 USB模組的pin腳和Arduino Pro mini連接
接上電腦後應該就能看到LED亮燈


上傳Arduino範例程式 : 範例 > 01.Basics > Blink
  • 板子:Arduino Pro Mini
  • 處理器:ATMega328 (5V, 16MHz)
  • 序列埠:找到您自己電腦上的,範例為 cu.usbserial-A9UHPBRJ
  • 燒錄器:AVRISP mkII


板子選擇Arduino Pro mini

處理器選擇 ATmega328 (5V, 16Mhz)

序列埠選擇您自己電腦上對應的USB Serial Port

燒錄器選擇AVRISP mkII

按下選單左上方➡(上傳)功能鍵

上傳時,正常情況應能看到 FT232 USB模組上的RX/TX LED一閃一滅,表示程式正傳輸到Arduino Pro mini 上。

上傳成功後,接著您就能看到 Arduino Pro mini 上面的LED一閃一滅囉~ 恭喜啦!

#


2015年6月13日 星期六

Bash Shell - 隨機產生小於10000的數字

給自己的備忘錄:

範例一:每隔5秒鐘持續執行一次,不會停止

while (true); 
do 
  n=$RANDOM;
  echo $(( n %= 10000));
  sleep 5;
done

範例二:每隔3秒鐘執行一次,總共執行迴圈5次
for i in {1..5};
do
  n=$RANDOM;
  echo $(( n %= 10000));
  sleep 3;
done

#

2015年4月17日 星期五

Mac OS X / *nix 找出目錄中檔案大小為0的檔案

給自己的備忘錄:

找出檔案 size = 0 :
> find $dirpath -type f -size 0 -exec ls {} \;

找出檔案 size > 100K
> find $dirpath -type f -size +100k -exec ls {} \;

找出檔案 size > 1M
> find $dirpath -type f -size +1M -exec ls {} \;

找出檔案 size > 1000 Bytes
> find $dirpath -type f -size +1000c -exec ls {} \;

#


2015年3月17日 星期二

關閉 iOS 8.2 體能追蹤開關設定,節省手機電力

新版iOS 8.2更新後,新增了一個無法移除的 Apple Watch APP,同時也開啟相關開關設定。對於尚未擁有Apple Watch的iPhone使用者來說,若為了節省電力、避免不必要的背景耗能功能,建議可以將「體能追蹤」的開關設定為關閉。

 設定方式可參考下圖或步驟:

設定 > 隱私權 > 運動與健身 > 體能追蹤 > 設定關閉

設定關閉體能追蹤開關

簡單幾個步驟,就能讓您多省下一些手機電力囉。

#