~~###### tags: `python` ~~
# IG 爬蟲 note
> 折騰了一天
結果圖 (ゝ∀・)b

# header
IG
```
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'
```
# 正題開始
由於在 IG 上無法直接又見下載圖片,所以就決定來 coding 囉,為了圖片而戰⁽⁽ ◟(∗ ˊωˋ ∗)◞ ⁾⁾
> 再爬 IG 時,會使用到 ```javascript``` 動態頁面的東西(AJAX),可以先去理解一下在繼續
## 用到的工具
1. requests
2. json
3. BeautifulSoup
4. os
## 找尋圖片位置
你會發現圖片會放在 ```v1Nh3 kIKUG _bz0w``` 下面,按下 ```ctrl + U``` ,會發現找不到該關鍵字,那是因為裡面的內容是動態產生的
找著找會發現其圖片網址是包含於 ```<script type="text/javascript">window._sharedData``` 裡面的,這時就按下 ```F12``` 開始找阿找,會找到圖片是放在這個檔案裡 (json數據快)

對左邊資料案右鍵,就可以找到片位於,```display_url``` 中的 ```nodes``` 裡
接下來當然就是獲取的urls拉 d(・∀・)b
## XHR分析
但裡頭只有 12 張圖片該怎辦?
回到 IG 頁面繼續往下滑,看開發者視窗,會看到不斷有 ```?query_hash=``` 的資料不斷出現,後來加載的圖片都在裡面
那麼該怎麼拿到其他的圖片呢?
你可以看開發者視窗,找阿找,救星出現了

沒錯,下一個請求的資訊就在這裡
而請求的格式是

接著就是把 ```end_cursor``` 裡的資料抓出來,放到 request 的網址裡, ```has_next_page``` 為 ```false``` 時就是沒下一筆資料了

把網址拿去搜尋,會得到一個 json 檔案,再去分析,會找到其他剩餘的圖片,這就是我們要的結果
接下來只要把後來加載的頁面都 run 一遍,找出所有圖片網址,那就大功告成囉(〃∀〃)
**(」・ω・)」うー!(/・ω・)/にゃー!**
**(」・ω・)」うー!(/・ω・)/にゃー!**
**(」・ω・)」うー!(/・ω・)/にゃー!**
# Problem
```
requests.exceptions.ChunkedEncodingError: ("Connection broken: ConnectionResetError(10054, '遠端主機已強制關閉一個現存的連線。', None, 10054, None)", ConnectionResetError(10054, '
遠端主機已強制關閉一個現存的連線。', None, 10054, None))
```
> 請求次數太多,休息一下就可以了