还在搜百度图片?太LOW了!
文 |?閑歡
來源:Python 技術「ID: pythonall」
你現在還去什么圖片網站搜圖片嗎?
你現在還在百度圖片等圖片網站搜素材嗎?
今天給大家分享一種全新的方式來獲取圖片素材,你想要的這里全都有!
它就是新浪微博!全新一代的超級流量入口,甚至好多人現在將其作為替代百度搜索的工具,以前是有事問度娘,現在是有事搜微博。
比如,某宅男想要看清純少女圖片,越多越好的那種。他會這樣搜:
然后,他會一頁一頁地翻閱欣賞這樣的養眼圖片,遇到特別喜歡的還會下載大圖到本地保存。
作為一個 python 程序員,我是懶得這樣一頁又一頁的翻的,我喜歡全部下載下來慢慢欣賞,撐爆硬盤的那種!類似下面這樣:
這種簡單問題對于我們會寫爬蟲的 pythoner 來說,簡直易如反掌,何樂而不為呢?下面直接給大家分享一下。
分析目標網站
微博這個搜索結果是分頁的,所以我們的思路肯定是按分頁來處理,逐頁解析。
我們先來看看搜索結果:
我們點擊“搜索”按鈕后,很容易就可以發現這個搜索的請求,這里網頁呈現的是第一頁的結果。
接著我們點擊“下一頁”,可以發現請求變成下面這樣:
細心的你可能一眼就發現了,請求后面多了一個page參數,它指的是頁碼,這樣就很容易了,我們只需要改變這個頁碼就可以請求到相應頁面的內容。
由于這個請求返回的是一個 HTML 頁面,所以我們需要在這個頁面上下功夫,找到圖片的鏈接。我們隨便使用頁面元素檢查來定位一張圖片,就會看到下面的效果:
我們可以看到這個?div?里面的?action-data?是一個合集,而下面的?li?里面的?img?的?action-data?是單個圖片的數據。
接下來,我們點擊“查看大圖”按鈕,瀏覽器會跳轉到新頁面,頁面內容就是一張大圖。
從請求的 URL 中順著找下來,我找到了這個:
我復制這個 URL 到瀏覽器請求,發現這正是我們需要的大圖。我們也很容易看到這個 URL 的特點,就是在最后把我們上面的?action-data?里面的?pic_id?加進去了。
這樣一來,我們的思路就很清晰了,下面是獲取一頁圖片的思路:
獲取到頁面內容;
在頁面內容中找到圖片的ID;
拼接查看大圖的 URL 進行請求,獲得圖片;
將圖片寫到本地。
碼代碼
思路理清楚了,需要碼代碼來驗證。由于代碼相對簡單,這里就一次性呈現給大家了。
import?requests import?re import?os import?time cookie?=?{'Cookie':?'your?cookie' } header?=?{'User-Agent':?'Mozilla/5.0?(Windows?NT?10.0;?Win64;?x64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/84.0.4144.2?Safari/537.36' } get_order?=?input('是否啟動程序??yes?or?no:???') number?=?1 store_path?=?'your?path' while?True:if?get_order?!=?'no':print('抓取中......')??#?下面的鏈接填寫微博搜索的鏈接url?=?f'https://s.weibo.com/weibo?q=%23%E5%B0%91%E5%A5%B3%E5%86%99%E7%9C%9F%23&wvr=6&b=1&Refer=SWeibo_box&page={number}'response?=?requests.get(url,?cookies=cookie)result?=?response.textprint(result)detail?=?re.findall('data="uid=(.*?)&mid=(.*?)&pic_ids=(.*?)">',?result)for?part?in?detail:uid?=?part[0]mid?=?part[1]pids?=?part[2]for?picid?in?pids.split(','):url_x?=?f'https://wx1.sinaimg.cn/large/%s.jpg'%picid??#?這里就是大圖鏈接了response_photo?=?requests.get(url_x,?headers=header)file_name?=?url_x[-10:]if?not?os.path.exists(store_path+uid):os.mkdir(store_path+uid)with?open(store_path+uid?+?'/'?+?file_name,?'ab')?as?f:??#?保存文件f.write(response_photo.content)time.sleep(0.5)print('獲取完畢')get_order?=?input('是否繼續獲取下一頁??Y:yes?N:no:???')if?get_order?!=?'no':number?+=?1else:print('程序結束')breakelse:print('程序結束')break我這里使用了逐頁斷點的形式,目的是方便調試,大家如果想一次性獲取所有頁的圖片,可以去掉這些輸入判斷,直接一次性跑完。代碼里面的 cookie 和 圖片存放路徑需要大家替換成自己本地的。
跑完的結果如下:
這里面我把圖片按照微博分了文件夾,如果你覺得不直觀,想把所有圖片都放在一個目錄下,可以去掉這一層文件夾。
總結
本篇介紹了如何通過簡單爬蟲來獲取微博圖片搜索結果,代碼量相當少,但是對某些人來說卻很有幫助,省時省力。大家也可以擴展一下,除了圖片,也可以去獲取其他的搜索內容,比如微博正文、視屏、購物鏈接等等。
推薦閱讀
Pandas處理數據太慢,來試試Polars吧!
懶人必備!只需一行代碼,就能導入所有的Python庫
絕!關于pip的15個使用小技巧
介紹10個常用的Python內置函數,99.99%的人都在用!
可能是全網最完整的 Python 操作 Excel庫總結!
總結
以上是生活随笔為你收集整理的还在搜百度图片?太LOW了!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最全整理!Python 操作 Excel
- 下一篇: 读取Excel的文本框,除了解析xml还