天天看點

python爬蟲之桌面的下載下傳python爬蟲之桌面的下載下傳

python爬蟲之桌面的下載下傳

好久沒有寫部落格了,暑假這段時間在學校裡面忙着寫小論文,沒機會寫我最喜歡的爬蟲了(雖然很簡單,但架不住哥喜歡。。。)

好了,廢話不多說了,開始把

本次爬蟲爬取的是 手機桌面(愛換桌面的男人傷不起啊)

目标網址就定在 偉大的貼吧裡了(桌面吧)

這裡插一句,以前用的IDE都是pycharm,雖說比較好用,但是最近發現一款IDE,就是anaconda内自帶的spyder,感覺比pycharm更适合程式設計人員,因為它可以實作同步和局部編譯,十分友善地檢視每一個部分的結果。。各位看官可以試試。。



    老規矩,先打開目标網頁http://tieba.baidu.com/p/5235094306,本次選的是桌面吧裡面的一個精品貼,裡面的桌面還是很吸引人的
           
python爬蟲之桌面的下載下傳python爬蟲之桌面的下載下傳
不錯把,個人還是挺喜歡這種星空風格的。
           
python爬蟲之桌面的下載下傳python爬蟲之桌面的下載下傳
來吧,讓我們端一碗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)
    代碼效果如下:     
           
python爬蟲之桌面的下載下傳python爬蟲之桌面的下載下傳
至此,我們就獲得了我們滿意的請求頁面,接下來需要對其進行分析,找出我們需要下載下傳的圖檔的位置

    貼吧裡,我尋找桌面,一般隻看文章的主人,也就是 隻看樓主 這個選項,其實真正我們要爬取得網頁是在這個界面上如: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循環即可實作我們所需要的多頁
           
python爬蟲之桌面的下載下傳python爬蟲之桌面的下載下傳
再說關鍵點,我們需要将頁面中桌面的連結所找到并下載下傳下來,第一步就得将桌面連結抓取下來:
           
python爬蟲之桌面的下載下傳python爬蟲之桌面的下載下傳
觀察發現,所有的桌面的連結都隐藏在  3 号箭頭所指的地方,該連結王權可以用BeautifulSoup解析出來,上代碼:
           
bsObj = BeautifulSoup(html.text,'lxml')
    imgs = bsObj.find_all('img',class_="BDE_Image")
    for i in imgs[:]:
        print(i)
           
python爬蟲之桌面的下載下傳python爬蟲之桌面的下載下傳
python爬蟲之桌面的下載下傳python爬蟲之桌面的下載下傳
接下來隻需進行下載下傳的步驟就好了:    
           
python爬蟲之桌面的下載下傳python爬蟲之桌面的下載下傳
python爬蟲之桌面的下載下傳python爬蟲之桌面的下載下傳

上圖隻是部分測試代碼,以辨明下載下傳效果,文章末尾處會補充完整代碼:

# -*- 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'))
           
python爬蟲之桌面的下載下傳python爬蟲之桌面的下載下傳
基本完成了,寫這樣圖檔多的部落格好麻煩啊,爬蟲類的以後還是少寫點。
PS:在用這個markdown編輯器的時候,get了一個小竅門,更改上傳圖檔的大小
一般我們上傳圖檔後,會得到一個如下圖所示的部分:
           
python爬蟲之桌面的下載下傳python爬蟲之桌面的下載下傳

此時,我們隻需要将其改成:

python爬蟲之桌面的下載下傳python爬蟲之桌面的下載下傳

width:寬度百分比

height:高度百分比

就能随心所欲的控制你的圖檔大小了