發表文章

目前顯示的是 4月, 2018的文章

[ Selenium ] 偽造身份進行網路爬蟲

圖片
網路爬蟲做到這步,通常是在要大量訪問同一個網站,從事某些行為。這真的超不乖的,好孩子千萬別學。 訪問某些網站時,網站其實能因應不同的瀏覽器、作業系統等,提供不同的回應。例如下載軟體時會自動導向到適合的下載連結。這些訊息都藏在 header中的 user-agent中。 當大量訪問同一個網站,若 server端的警覺心比較強的情況下只依賴 Tor進行爬蟲,會發現每個訪問的用戶都來自一樣的瀏覽器和作業系統。 server端可能會使大量訪問的目的失效。 因此除了串改 ip外,最好也修改 user-agent,使 server端無法有效辨識。 Tor的部分可以參考之前分享的 " 使用 Tor進行網路爬蟲 " 和 " 多開 Tor client "。 >>> from selenium import webdriver >>> from selenium.webdriver.chrome.options import Options >>> >>> opts = Options() >>> >>> opts.add_argument("--incognito") # 使用無痕模式。用 selenium開瀏覽器已經很乾淨了,但疑心病重的可以用一下 >>> >>> proxy = "socks5://localhost:9050" >>> opts.add_argument('--proxy-server={}'.format(proxy)) # 讓 selenium透過 tor訪問 internet >>> >>> ua = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0" >>> opts.add_argument("user-agent={}".format(ua)) # 使用偽造的 use

[ Arduino ] 使用 PyBluez對 Arduino發送訊息

圖片
第一次學寫 Arduino,先試個水溫使用 Pybluez對 Arduino發送訊息。 Arduino的部分 #include <liquidcrystal.h> #include <softwareserial.h> LiquidCrystal lcd(12,11,5,4,3,2); SoftwareSerial BT(9, 10); void setup() { lcd.begin(16,2); BT.begin(9600); BT.setTimeout(10); lcd.print("Hello, world!"); } void loop() { if (BT.available()) // if text arrived in from BT serial... { String cod=(BT.readString()); lcd.setCursor(0,0); // choose first line of LCD lcd.print(cod); } } 安裝 PyBluez 安裝前請先參閱各平台的 Requirement 。 Windows或 Linux應該是可以直接安裝 $ pip install pybluez 我使用的是 MacOS,但 Python的 Bluetooth packages中似乎對 MacOS沒有很好的支援,甚至無法直接使用 pip安裝。 不過 GitHub上都沒有提出這類 issues,有可能我是個案 :P $ pip install git+https://github.com/pybluez/pybluez.git 安裝後會在 packages中找到 lightblue資料夾,當中會有一個檔案 _bluetoothsockets.py。 class _BluetoothSocket(object): ... def send(self, data, flags=0): # if not isinstance(data, str): # raise TypeError("data must be string