---
# System prepended metadata

title: web_crawler
tags: [python]

---

# User Agent  
簡稱 UA，會讓服務器了解發送請求的客戶端的操作系統之類的訊息，在爬蟲時就是表明身分的概念  

## 常見 UA  
### 解析  
```
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36
```

解析上方 :  
* `Mozilla/5.0` : 通常都是這個開頭(可以是 5.0 或 4.0--4.0是很古早的)  
* `Windows NT 10.0` : window 10 系統  
下方提供更多案例 :  
	:::spoiler  
	- Windows NT 5.0 : Windows 2000  
	- Windows NT 5.1 : Windows XP  
	- Windows NT 5.2 : Windows Server 2003 R2  
	- Windows NT 6.0 : Windows Vista 或 Windows Server 2008  
	- Windows NT 6.1 : Windows 7 或 Windows Server 2008 R2  
	- Windows NT 6.2 : Windows 8 或 Windows Server 2012  
	- Windows NT 6.3 : Windows 8.1 或 Windows Server 2012 R2  
	- Windows NT 10.0 : Windows 10 或 Windows Server 2016  
	:::  
* `Win64; x64` : x64 版瀏覽器在 x64 版 Windows 上執行  
下方提供更多案例 :  
	:::spoiler  
	- 沒特別註明 : x86 版瀏覽器在 x86 版 Windows 上執行  
	- WOW64 : x86 版瀏覽器在 x64 版 Windows 上執行  
	:::  
* `AppleWebKit/537.36` : 瀏覽器內核  
* `KHTML` : HTML 排版引擎  
* `like Gecko` : 不是 Geckeo 瀏覽器，但是運行的像 Geckeo 瀏覽器  
* `Chrome/119.0.0.0` : Chrome 的版本  
* `Safari/537.36` : 因為 AppleWebKit 渲染引擎是 Apple 開發的，而Google 採用它，為了獲得伺服器端的正確回應，就進行偽裝  

### 範例  
以下是常見的 UA 範例 :  
* PC/ Chrome : `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36`

### 看自己的 UA  
執行以下步驟 :  
`F12` $\Rightarrow$ 到`web`裡面 $\Rightarrow$ 隨意點擊一個名稱裡的資料 $\Rightarrow$ 右方的 `header` 往下滑會找到 `User-Agent`  


# IP  
這是自己電腦的定位  
可以用 https://www.whatismyip.com.tw/ 來看自己目前的 IP  

假設在爬蟲時不想給別人得知自己的 IP  
可以使用下面的方法更改 IP :  

* 最推薦的當然還是 VPN，但大多數都要收費  

* 這是可以獲取隨機 IP 的程式碼  
雖然能順利執行，但似乎沒辦法使用它提供的 IP 進行爬蟲  
https://github.com/Python3WebSpider/ProxyPool  

* 或是也可以使用現成的網站，但要登入之類的，不過也是免費  
Scrapingdog：https://www.scrapingdog.com/

:::danger  
資安小補充  
如果只是單純更改自己的 IP 其實對於黑客來說還是有辦法得知你的真實 IP  
所以有些黑客會使用更多的 IP 進行跳板  
但太多的跳板可能會使連線非常緩慢  
所以通常會用 3 - 5 個 IP 當作跳板  
紅方(攻擊者) 通常會在跳板中加入路由器或 Cisco 的產品  
這樣在攻擊之後可以把日誌清除掉  
這樣藍方(防守方)在追蹤的時候就會找不到登陸的 IP  
實現斷點  
如果都是使用主機的話有機會被恢復日誌找回真實 IP  

資料來源 :  
https://www.datarecovery.com.tw/news/hardware/2010-10-31/792.html
:::  



# python 中實做  
先下載這個套件  
```python=
pip install fake_useragent
```
:::warning  
補充 :  
假設下載了套件但執行時無法使用  
請先在網路上找到 fake_useragent 的 .json 檔  
接著改成裝在這個路徑當中  
`"C:\Users\ACER\AppData\Local\Temp\"`  
應該就可以使用了  
:::  

然後就可以使用這個套件獲取到隨機的 UA 了  
```python=
from fake_useragent import UserAgent
ua = UserAgent()

# Get a random browser user-agent string
print(ua.random)
```

:::info  
其實還可以有更多用法  
可以從網路上找尋  
:::  

得到 UA 後  
就是要讓我們爬蟲時送出的請求包含我們隨機產生的 UA  
```python=
url = 'https://www.google.com/'

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17'}
           
response = get(url, headers=headers)
html_doc = response.text
```
:::info  
在 headers 當中其實還可以包含更多可以設定的參數  
像是 accept 之類的  
如果有必要可以視情況加入  
:::  

:::warning  
補充--Referer :  
假設遇到一些圖片之類的沒辦法直接爬取  
這時可以在 headers 當中加入 'Referer':'...'  
'Referer' 當中就是放入一個網站  
這個網站就是我們要偽造請求的網站  
像是爬圖片的話就可以放入這個圖片的主頁面的網址  
:::  

:::warning  
補充--Proxy :  
這是可以更改發送請求的 IP  
下面是舉例  
```
# set ip and port
proxy = "94.181.174.77:4153"

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(f'--proxy-server={proxy}')

driver = webdriver.Chrome(service = s, options=chrome_options)
```
:::  

除此之外，也可以設定延遲時間讓網站不會判斷是自動程式  
```python=
time.sleep(2)  # 延遲 2 秒
```












