2018/1/24 一個簡單的爬蟲,批量爬取京東上手機圖片


韋老師的課程練習,寫一個小爬蟲,爬取京東上的手機圖片

1.正則表達式:

  通過查看京東手機頁面的源代碼確定了兩個過濾的正則表達式:

  a.是確定手機展示部分的起始標志位和結束標志位,正則表達式為:

    <div id="plist".+?<div class="page clearfix">

 

  b.是圖片的正則表達式,也是從網頁的源代碼可以發現其正則表達式為:

pat = '<img width="220" height="220" data-img="1" data-lazy-img="//(.+?\.jpg)">'

# 括號表示分組,將括號的內容捕獲到分組當中
# .+表示匹配至少一個任意字符,問號?表示懶惰匹配,也就是匹配盡可能少的字符串。
#  .+?\.jpg合起來表示盡可能少匹配字符的匹配到.jpg,避免匹配范圍超出src的范圍
#  這個括號也就可以匹配網頁中圖片的url了

 

   接下來寫代碼:

   思路主要是:

  1.建立一個爬取圖片的自定義函數,該函數負責爬取一個頁面下我們想爬取的圖片

      a.通過urllib.request.urlopen(url).read()讀取對應網頁全部源代碼

      b.通過兩個正則表達式進行信息過濾,提取圖片目標鏈接,將地址存儲在列表中,隨后遍歷該列表

  2.分別將對應鏈接通過urllib.request.urlretrieve(imageurl,filename = imagename) 存儲到本地,建立異常處理,通過x+1自動跳到下一個圖片

  3.通過for循環,調用函數,開始爬取

 

# -*- coding:utf-8 -*-
# Author : 何子辰

# 爬取京東手機圖片 ——批量爬取

import re
import urllib.request
def craw(url,page):
    html1 = urllib.request.urlopen(url).read()
    html1 = str(html1)
    pat1 = '<div id="plist".+?<div class="page clearfix">'
            #第一次過濾,網頁源代碼中標志位
    result1 = re.compile(pat1).findall(html1)
    result1 = result1[0]
    pat2 = '<img width="220" height="220" data-img="1" data-lazy-img="//(.+?\.jpg)">'
    imagelist = re.compile(pat2).findall(result1)

    x = 1
    for imageurl in imagelist:
        imagename = "F:/爬蟲/2018.1.24/jdpics/"+str(page)+str(x)+".jpg"
        imageurl = "http://"+imageurl
        try:
            urllib.request.urlretrieve(imageurl,filename=imagename)
        except urllib.error.URLError as e:
            if hasattr(e,"code"):
                x+=1
            if hasattr(e,"reason"):
                x+=1
        x+=1

for i in range(1,20):
    url = "https://list.jd.com/list.html?cat=9987,653,655&page="+str(i)
    craw(url,i)

最后在文件夾里就可以收圖片了

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM