Python爬蟲入門-利用scrapy爬取淘女郎照片

最近看到有個相對來說比較簡單的可以爬取淘女郎的鏈接地址,它主要可以通過改變URL中page參數來實現翻頁。
我們這個這個鏈接進入到一個淘女郎的頁面,進入相冊頁面,里面有很多相冊,我們打開其中一個,可以發現照片是慢慢加載出來的,打開F12,刷新,過濾出所有的JS請求,然后不斷下拉照片,可以發現也不斷有一些JS請求加載出來,打開response,可以看到里面返回的是json格式的數據,里面就有我們要獲取的圖片的鏈接地址:

分析-01.png
分析-02.png

講上面幾個URL拷貝出來對比一下,并進行簡化,可以看出要想得到圖片的鏈接地址,我們就要構造出含有use_id、album_id、page三個重要參數的URL:

分析-03.png

我們返回到這個淘女郎有所有相冊的這個頁面,同樣F12、刷新,選中XRH,然后點擊下面的翻頁,可以看出有相關的請求加載出來,并且在response中有我們想要的album_id:

分析-04.png

將請求的URL拷貝下來對比一下,并進行簡化,可見要獲得所有相冊的album_id,我們需要構建出含有user_id和page兩個參數的URL(由于還沒有想到如何更好的獲取這個page,所以在后面我就默認page為1,也就是只獲取第一頁相冊頁的內容):

分析-05.png

我們再返回起始頁,F12、刷新在原始的請求里面就有各個淘女郎的信息,我們可以提取到鏈接,然后利用正則就可以將user_id提取出來:

分析-06.png

下面就可以開始寫代碼了:

taobao.py:

from Taonvlang.items import TaonvlangItem
from bs4 import BeautifulSoup
import re
import json

class TaobaoSpider(scrapy.Spider):
    Num=1
    name = 'taobao'
    # allowed_domains = ['www.taobao.com']

    def start_requests(self):
        urls=['https://mm.taobao.com/json/request_top_list.htm?page={}'.format(i) for i in range(1,2)]
        for url in urls:
            yield scrapy.Request(url,callback=self.parse_user_id)

    def parse_user_id(self, response):
        urls=response.css('.list-item .personal-info .pic-word .top a::attr(href)').extract()
        user_ids=[url.split('=')[-1] for url in urls if url]
        for user_id in user_ids:
            url='https://mm.taobao.com/self/album/open_album_list.htm?_charset=utf-8&user_id%20={}&page=1'.format(user_id)
            yield scrapy.Request(url,meta={'user_id':user_id},callback=self.parse_album_id)

    def parse_album_id(self, response):
        user_id=response.meta.get('user_id')
        if response.status==200:
            html=response.text
            soup=BeautifulSoup(html,'lxml')
            results=soup.select('.mm-photo-list.clearfix .mm-photo-cell')
            for result in results:
                link=result.select('.mm-photo-cell-middle h4 a')[0]['href']
                album_id=re.search('album_id=(.*?)&',link).group(1)
                page_content=result.select('.mm-photo-cell-middle .mm-pic-number')[0].text
                pages=int(re.findall('\d+',page_content)[0])
                for page in range(1,int(pages/16)+2):
                    print('開始處理用戶:{},相冊編號:{},第{}頁,#{}'.format(user_id,album_id,page,self.Num))
                    self.Num=self.Num+1
                    url='https://mm.taobao.com/album/json/get_album_photo_list.htm?user_id='+str(user_id)+'&album_id='+str(album_id)+'&page='+str(page)
                    yield scrapy.Request(url,callback=self.parse)

    def parse(self,response):
        item=TaonvlangItem()
        html=response.text
        contents=json.loads(html)
        piclists=contents.get('picList')
        for piclist in piclists:
            item['user_id'] = piclist.get('userId')
            item['album_id'] = piclist.get('albumId')
            item['title']=piclist.get('des')
            item['picurl']='http:'+piclist.get('picUrl').replace('_290x10000','_620x10000')
            yield item
settings.py:

BOT_NAME = 'Taonvlang'

SPIDER_MODULES = ['Taonvlang.spiders']
NEWSPIDER_MODULE = 'Taonvlang.spiders'

MONGO_URI='localhost'
MONGO_DB='taonvlang'

ROBOTSTXT_OBEY = False
DOWNLOAD_DELAY = 0.5
COOKIES_ENABLED = False

DEFAULT_REQUEST_HEADERS = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en',
    'user-agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
    'cookie':'tracknick=tb4192332_2012; _cc_=U%2BGCWk%2F7og%3D%3D; tg=0; UM_distinctid=15dbfe52514207-04b2f5bc0dad73-5c6a3a7a-100200-15dbfe52516189; miid=1819893462062305719; hng=CN%7Czh-CN%7CCNY%7C156; thw=cn; x=e%3D1%26p%3D*%26s%3D0%26c%3D0%26f%3D0%26g%3D0%26t%3D0%26__ll%3D-1%26_ato%3D0; CNZZDATA30063598=cnzz_eid%3D1240630502-1506404882-https%253A%252F%252Fmm.taobao.com%252F%26ntime%3D1506410623; mt=ci%3D-1_0; v=0; cookie2=1f2c6d580c0f148fbc23e44a72de8f8f; t=161b12068ebd1c81ad307468bd85c61c; _tb_token_=51e38b59445f8; CNZZDATA30064598=cnzz_eid%3D1465862291-1506410103-https%253A%252F%252Fmm.taobao.com%252F%26ntime%3D1506497588; CNZZDATA30063600=cnzz_eid%3D657822935-1506407601-https%253A%252F%252Fmm.taobao.com%252F%26ntime%3D1506497588; cna=KHPKEQF/owQCAd5P091TEN2z; isg=AqWlkF1UEG9PMHRxJxBdyAqptGGxCilIDLs31KeKYVzrvsUwbzJpRDNePhQz; JSESSIONID=94615D4E06F9128BD591C9C4B3A69B13; uc1=cookie14=UoTcCfQsoQo68g%3D%3D'
}

ITEM_PIPELINES = {
    'Taonvlang.pipelines.MyImagesPipeline':1,
   'Taonvlang.pipelines.MongoPipeline': 300,
}

IMAGES_STORE='E:\python\Pycharm\Taonvlang'
IMAGES_EXPIRES=90

IMAGES_THUMBS={
    'small':(50,50),
    'big':(200,200),
}

這個是最終的運行結果:

運行-01.png

這是下載下來的淘女郎的照片(此處若有涉及侵權我將第一時間刪除):

000be1f0aa019cbe8e92869a5c03df3aca5cb99d.jpg
0b05048c75b5adb2061d303092e84504fe73a0a7.jpg

存在的問題:
1、代碼中有好幾個地方還是可以再完善一下的
2、寫代碼中還是會出現卡殼的情況,有些地方還不是運用的很熟練
3、還是要多學新知識、運用新知識來解決問題

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容