5分鐘擼了個(gè)小小爬蟲....
前言
這幾天在用“必應(yīng)”搜索時(shí),發(fā)現(xiàn)必應(yīng)的背景圖片挺好看的,有的是風(fēng)景,有的是動(dòng)物。。。于是產(chǎn)生了一個(gè)想法,爬下來當(dāng)做桌面背景圖吧。。
由于是每天必應(yīng)的圖片都會(huì)變,所以后續(xù)結(jié)合電腦自帶的定時(shí)任務(wù),可以達(dá)到每天自動(dòng)抓取圖片的效果。
開工
簡單的分析下:必應(yīng)首頁。

打開 F12 ,找到對(duì)應(yīng)的請求,可以很容易的看到有這么個(gè)鏈接,然后點(diǎn)一下,就會(huì)新打開一個(gè)頁面,此時(shí)顯示的就是背景圖片。
如何下載呢?其實(shí)很簡單,說下邏輯。
requests庫請求主頁,正則匹配地址,再用 requests 請求,將返回的 content 以二進(jìn)制的形式寫入文件,保存為圖片。
核心代碼:
- url = 'https://cn.bing.com'headers = { 'User-Agent': 'Mozilla/5.0
- (Macintosh; Intel Mac OS X 10_15_1) ' 'AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3
- Safari/605.1.15'}r = requests.get(url=url, headers=headers)# 正則匹配
- 到 url 地址a = re.findall(r'rel="preload" href="(.*?)" as="image"',
- r.text)if a: # 拼接 https://cn.bing.com/xxxxxx圖片的地址
- picture_url = parse.urljoin(url, a[0]) print(f'當(dāng)前圖片地址:
- {picture_url}') r_picture = requests.get(url=picture_url,
- headers=headers) write_file(file, r_picture.content) # 寫入文件
執(zhí)行后的結(jié)果:

主要是正則表達(dá)式,如何書寫,匹配出來,用 urllib 的 urljoin 方法拼接下圖片地址即可??梢钥聪潞诵拇a的相關(guān)注釋。
定時(shí)任務(wù)
Python代碼一共 25 行,關(guān)鍵是如何利用系統(tǒng)定時(shí)來制造每天觸發(fā)的效果。
使用方法,兩個(gè)。
編輯 crontab :
- crontab -e

回車后,進(jìn)入內(nèi)容,用法和 vim 一樣,按下 i 即可編寫,然后 wq 保存。

- 0 10 * * * /Users/sy/anaconda3/bin/python /Users/sy/PycharmProjects
- /python-tools/spider/bing_picture/crawl_bing.py > /Users
- /sy/PycharmProjects/python-tools/spider/bing_picture/log
第一段,是cron特有的時(shí)間配置表達(dá)式,可以看下圖的簡介,順便給大家一個(gè)網(wǎng)址,可以在線查看其表達(dá)式的含義。而我腳本中寫的則是每天十點(diǎn)整執(zhí)行 Python。

工具網(wǎng)址:
crontab執(zhí)行時(shí)間計(jì)算tool.lu

寫完 cron 表達(dá)式,后面跟的其實(shí)就是 python xxx.py 這樣的命令,只不過,在 cron 中一定要寫絕對(duì)路徑,否則不生效。
再執(zhí)行 python 命令的基礎(chǔ)上,我還追加了 > xxx.log 這樣,意思是將 python 腳本的打印內(nèi)容輸出到一個(gè)指定目錄的 log 文件里。
2.查看定時(shí)任務(wù) crontab:
- crontab -l

cron -l 則是查看定時(shí)任務(wù)列表內(nèi)容的,可以看到有多少任務(wù)配置了。如果有多個(gè)定時(shí)腳本,則可以回車換行繼續(xù)添加即可。
每日自動(dòng)抓取,導(dǎo)入圖片,換背景即可。

總結(jié)
嗯,這就是本次的 5 分鐘擼一個(gè)小爬蟲系列!
本篇介紹的定時(shí)工具,其實(shí)用途很大,因?yàn)榛谙到y(tǒng)層面,所以不依賴于腳本,只要你電腦開著,就可以隨心所欲的觸發(fā)你寫的腳本,而不依賴你腳本本身使用代碼的定時(shí)任務(wù)!