python爬蟲之桌面的下載下傳
好久沒有寫部落格了,暑假這段時間在學校裡面忙着寫小論文,沒機會寫我最喜歡的爬蟲了(雖然很簡單,但架不住哥喜歡。。。)
好了,廢話不多說了,開始把
本次爬蟲爬取的是 手機桌面(愛換桌面的男人傷不起啊)
目标網址就定在 偉大的貼吧裡了(桌面吧)
這裡插一句,以前用的IDE都是pycharm,雖說比較好用,但是最近發現一款IDE,就是anaconda内自帶的spyder,感覺比pycharm更适合程式設計人員,因為它可以實作同步和局部編譯,十分友善地檢視每一個部分的結果。。各位看官可以試試。。
老規矩,先打開目标網頁http://tieba.baidu.com/p/5235094306,本次選的是桌面吧裡面的一個精品貼,裡面的桌面還是很吸引人的
不錯把,個人還是挺喜歡這種星空風格的。
來吧,讓我們端一碗BeautifulSoup雞湯。。。話說,确實很好用啊
#coding:utf-8
from bs4 import BeautifulSoup
import requests
沒有安裝這個酷的人,随便pip下就安裝好了啊(忘記說了,本代碼是基于python3.6)
簡單的說,requests是為了擷取網頁源代碼的,然後使用BS來對html格式進行修正,以便後續更友善的使用BeautifulSoup來對其中我們需要的内容進行抓取。編寫你就知道了
url = 'http://tieba.baidu.com/p/5235094306'
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0"}#紅色箭頭的标示出了
html = requests.get(url,headers=headers)
bsObj = BeautifulSoup(html.text,'lxml')
BeautifulSoup的基本用法在網上有很多,個人推薦其官方文檔,附上連結:[Beautiful Soup 4.2.0 文檔](https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html)
代碼效果如下:
至此,我們就獲得了我們滿意的請求頁面,接下來需要對其進行分析,找出我們需要下載下傳的圖檔的位置
貼吧裡,我尋找桌面,一般隻看文章的主人,也就是 隻看樓主 這個選項,其實真正我們要爬取得網頁是在這個界面上如:http://tieba.baidu.com/p/5235094306?see_lz=1&pn=2
這裡插一句,我們爬蟲的目的是自己的興趣,但是死記住 代碼這個是不靠譜的,網頁千變萬化的,難道要一個個記住嗎?是以,側重思路
仔細觀察上面這個連結,這是我在選中“隻看樓主”選項後,調到第二頁的情況下,所顯示的網頁連結,你不妨多點點其他的頁數,會發現出現如下規律:
http://tieba.baidu.com/p/5235094306?see_lz=1&pn=2
http://tieba.baidu.com/p/5235094306?see_lz=1&pn=3
http://tieba.baidu.com/p/5235094306?see_lz=1&pn=4
我們可以将其看成是三部分組成:
1 baseUrl = 'http://tieba.baidu.com/p/5235094306'
2 seeLZ = '?see_lz'
3 PN = '&pn='
利用一個for循環即可實作我們所需要的多頁
再說關鍵點,我們需要将頁面中桌面的連結所找到并下載下傳下來,第一步就得将桌面連結抓取下來:
觀察發現,所有的桌面的連結都隐藏在 3 号箭頭所指的地方,該連結王權可以用BeautifulSoup解析出來,上代碼:
bsObj = BeautifulSoup(html.text,'lxml')
imgs = bsObj.find_all('img',class_="BDE_Image")
for i in imgs[:]:
print(i)
接下來隻需進行下載下傳的步驟就好了:
上圖隻是部分測試代碼,以辨明下載下傳效果,文章末尾處會補充完整代碼:
# -*- coding: utf-8 -*-
"""
Created on Wed Aug 23 20:20:33 2017
@author: hhh
"""
#%%
import requests
from bs4 import BeautifulSoup
import urllib
import time
base_url = 'https://tieba.baidu.com/p/4645322258?see_lz=1&pn='
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'}
#%%
def get_text(url,headers):
return requests.get(url,headers)
#%%
def download(img_url,j,k):
urllib.request.urlretrieve(img_url, 'E:\\wallPapers\\%d_%d.jpg' %(j,k))
#%%
for i in range(,):
page_url = base_url+str(i)
html = get_text(page_url,headers=headers)
bsObj = BeautifulSoup(html.text,'lxml')
imgs = bsObj.find_all('img',class_="BDE_Image")
k=
for link in imgs:
download(link.get('src'),i,k)
time.sleep()
k+=
print(link.get('src'))
基本完成了,寫這樣圖檔多的部落格好麻煩啊,爬蟲類的以後還是少寫點。
PS:在用這個markdown編輯器的時候,get了一個小竅門,更改上傳圖檔的大小
一般我們上傳圖檔後,會得到一個如下圖所示的部分:
此時,我們隻需要将其改成:
width:寬度百分比
height:高度百分比
就能随心所欲的控制你的圖檔大小了