最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python爬蟲獲取京東手機圖片的圖文教程

 更新時間:2017年12月29日 09:20:44   作者:丟你劉某  
下面小編就為大家分享一篇python爬蟲獲取京東手機圖片的圖文教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

如題,首先當然是要打開京東的手機頁面

因為要獲取不同頁面的所有手機圖片,所以我們要跳轉(zhuǎn)到不同頁面觀察頁面地址的規(guī)律,這里觀察第二頁頁面

由觀察可以得到,第二頁的鏈接地址很有可能是

https://list.jd.com/list.html?cat=9987,653,655&page=2

那么對應(yīng)第n頁的地址就是

https://list.jd.com/list.html?cat=9987,653,655&page=n

我們就可以利用這個規(guī)律在編程的時候打開自己想要獲取的頁面了

接著我們查看頁面的源代碼,觀察圖片鏈接的規(guī)律

我們使用在源代碼的頁面使用ctrl+f查找,然后在查找框里面輸入頁面第一臺手機的名字 “vivo X9s 全網(wǎng)通 4GB+64GB 玫瑰金 移動” 快速定位到圖片鏈接附近的代碼,便于后面編程對圖片范圍進行篩選

可以看到,上圖的畫紅線的三個部分,<div id="plist" 在這一頁中是唯一出現(xiàn)的一個元素,而且離圖片鏈接比較近,所以可以作為篩選頁面的開頭位置

<img width=“220”……這個是手機圖片的信息,我們要獲取的是后面

//img14.360buyimg.com/n7/jfs/t6088/107/5539077608/409616/7f98b2bb/596c2edaN9792cd20.jpg

這個鏈接,但是觀察發(fā)現(xiàn)后面也有一個圖片鏈接

img data-sku="5291744" width="25" height="25" class="loading-style2" src="http://img14.360buyimg.com/n9/jfs/t6088/107/5539077608/409616/7f98b2bb/596c2edaN9792cd20.jpg"

這個很明顯不是我們要找的手機圖片鏈接

所以我們要使用正則表達式將真正的圖片鏈接篩選出來,觀察發(fā)現(xiàn)這兩個圖片鏈接的區(qū)別在于手機圖片鏈接里面含有n7元素,而另外一個圖片鏈接含有n9元素,這樣子我們的正則表達式就可以表示為pat2 = '//.+?/n7/.+?\.jpg'

接著我們要找到這個頁面最后一張手機圖片的位置,方便找出可以作為篩選頁面的結(jié)束位置,方法和上面類似,在源代碼搜索框輸入 小米(MI) 紅米Note4X 手機 香檳金 全網(wǎng)通 3GB+32GB 定位到頁面最后一張圖片位置

可以看到,下面<div class="page clearfix">在該頁面中是唯一的,而且比較接近最后一張手機圖片附近的鏈接,所以可以作為篩選結(jié)尾位置的元素,其實篩選的元素只要滿足唯一并且接近我們要獲取的目標,那么也可以作為我們要選取的元素

經(jīng)過上面準備之后,我們得出了大概的思路

1首先進行第一次篩選,使用正則表達式pat1 = '<div id="plist".+<div class="page clearfix">'將圖片鏈接的范圍大概篩選出來

2然后進行第二次篩選,使用正則表達式pat2 = '//.+?/n7/.+?\.jpg'將手機圖片鏈接篩選出來

3使用urllib.urlretrieve保存鏈接圖片到本地

下面給出python代碼

# -*- coding: UTF-8 -*- 
import re 
import urllib2 
import urllib 
 
def craw(url, page): 
 html1 = urllib2.urlopen(url).read() 
 html1 = str(html1) 
 pat1 = '<div id="plist".+<div class="page clearfix">' 
 result1 = re.compile(pat1, re.DOTALL).findall(html1) 
 #獲取第一次篩選結(jié)果 
 result1 = result1[0] 
 #*匹配0個或者多個前面表達式 
 #.匹配任意字符,加上re.dotall包括換行符 
 #+匹配1個或者多個前面表達式 
 #?非貪婪匹配,就是只匹配一組 
 #篩選出圖片鏈接列表 
 pat2 = '//.+?/n7/.+?\.jpg' 
 imagelist = re.compile(pat2).findall(result1) 
 #x作為圖片文件的順序 
 x=1 
 
 for imageurl in imagelist: 
 imagename = "C:/Users/Administrator/Desktop/jdphone_img/" + str(page) + str(x) + ".jpg" 
 imageurl = "http:" + imageurl 
 try: 
  #保存圖片 
  urllib.urlretrieve(imageurl, filename=imagename) 
 except urllib2.URLError as e: 
  #hasattr判斷對象里面是否有name屬性 
  if hasattr(e, "code"): 
  x+=1 
  if hasattr(e, "reason"): 
  x+=1 
 x+=1 
 
for i in range(1, 3): 
 url = "https://list.jd.com/list.html?cat=9987,653,655&page=" + str(i) 
 craw(url, i) 

注意:我這里只保存了第一二頁的手機圖片,在進行第二次篩選的時候正則表達式之所以會加了一個"?"進行非貪婪匹配,也就是一次只篩選出一張手機圖片鏈接,如果不加這個非貪婪匹配那么我們會把第一個含有“//”到最后一個結(jié)尾含有.jpg之間的所有內(nèi)容都會篩選出來,顯示是不符合的,在這里建議可以把正則表達式的?去掉,然后看一下輸出結(jié)果,去體會一下非貪婪匹配是怎么樣的。

相關(guān)文章

  • python實現(xiàn)快遞價格查詢系統(tǒng)

    python實現(xiàn)快遞價格查詢系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)快遞價格查詢系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 通過Python實現(xiàn)控制手機詳解

    通過Python實現(xiàn)控制手機詳解

    如今python是非常多人學習的,而手機也幾乎人手一部。對于很多Python學習者,想用python來完成android手機中各種炫酷的的控制,adb是必不可缺少的工具之一
    2021-10-10
  • Python如何實現(xiàn)游戲中的推送通知與消息

    Python如何實現(xiàn)游戲中的推送通知與消息

    文章介紹了如何使用Python構(gòu)建高效的游戲消息推送系統(tǒng),包括使用異步IO和事件驅(qū)動編程,以及與Redis、WebSocket等技術(shù)的結(jié)合,文章還強調(diào)了安全性和用戶體驗的重要性,并提供了性能優(yōu)化的建議
    2025-01-01
  • 詳解從Django Rest Framework響應(yīng)中刪除空字段

    詳解從Django Rest Framework響應(yīng)中刪除空字段

    這篇文章主要介紹了詳解從Django Rest Framework響應(yīng)中刪除空字段,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 三步教會你完全離線搭建openwebui

    三步教會你完全離線搭建openwebui

    這篇文章主要介紹了在無網(wǎng)絡(luò)環(huán)境下搭建Linux版openwebui的詳細步驟,包括下載依賴包、拷貝whl包到無網(wǎng)絡(luò)環(huán)境進行安裝、解決安裝過程中可能出現(xiàn)的問題,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2025-02-02
  • Python理解遞歸的方法總結(jié)

    Python理解遞歸的方法總結(jié)

    在本篇文章里小編給大家分享了關(guān)于如何使用Python來理解遞歸的知識點內(nèi)容,有興趣的朋友們學習下。
    2019-01-01
  • DataFrame數(shù)據(jù)框模糊查詢與去重方式

    DataFrame數(shù)據(jù)框模糊查詢與去重方式

    數(shù)據(jù)框模糊查詢通常使用contains函數(shù)和正則表達式來實現(xiàn),可以查詢以某個字符開頭、包含或結(jié)尾的數(shù)據(jù),若數(shù)據(jù)類型不一致可能會報錯,需統(tǒng)一為str類型,數(shù)據(jù)框去重則通過drop_duplicates函數(shù)實現(xiàn),可指定列進行去重,并有多種處理重復(fù)值的方式
    2024-09-09
  • Python讀大數(shù)據(jù)txt

    Python讀大數(shù)據(jù)txt

    本文通過2個例子給大家介紹了如何使用python實現(xiàn)讀取大文件txt的方法,有需要的小伙伴可以參考下
    2016-03-03
  • pandas使用get_dummies進行one-hot編碼的方法

    pandas使用get_dummies進行one-hot編碼的方法

    今天小編就為大家分享一篇pandas使用get_dummies進行one-hot編碼的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 使用Python實現(xiàn)Oracle數(shù)據(jù)庫自動巡檢程序

    使用Python實現(xiàn)Oracle數(shù)據(jù)庫自動巡檢程序

    這篇文章主要為大家詳細介紹了如何創(chuàng)建一個Oracle數(shù)據(jù)庫自動巡檢程序,以確保數(shù)據(jù)庫的順暢運行,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-01-01

最新評論

敦煌市| 淮南市| 泗水县| 邵阳市| 济阳县| 安平县| 迁西县| 土默特左旗| 龙口市| 五常市| 静海县| 洪湖市| 开鲁县| 芦山县| 和静县| 云龙县| 怀化市| 密山市| 汕尾市| 庆安县| 日照市| 宁安市| 大埔县| 永川市| 黄梅县| 雷波县| 新密市| 墨脱县| 武山县| 延安市| 分宜县| 繁昌县| 贺兰县| 峨边| 桃江县| 河北省| 凌源市| 广元市| 全南县| 乾安县| 兴山县|