python爬蟲獲取京東手機圖片的圖文教程
如題,首先當然是要打開京東的手機頁面
因為要獲取不同頁面的所有手機圖片,所以我們要跳轉(zhuǎn)到不同頁面觀察頁面地址的規(guī)律,這里觀察第二頁頁面
由觀察可以得到,第二頁的鏈接地址很有可能是
https://list.jd.com/list.html?cat=9987,653,655&page=2
那么對應第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é)果,去體會一下非貪婪匹配是怎么樣的。
- python爬蟲實戰(zhàn)之爬取京東商城實例教程
- python制作爬蟲爬取京東商品評論教程
- python爬蟲框架scrapy實戰(zhàn)之爬取京東商城進階篇
- python利用urllib實現(xiàn)爬取京東網(wǎng)站商品圖片的爬蟲實例
- Python爬蟲實現(xiàn)爬取京東手機頁面的圖片(實例代碼)
- Python 3實戰(zhàn)爬蟲之爬取京東圖書的圖片詳解
- Python爬蟲實現(xiàn)網(wǎng)頁信息抓取功能示例【URL與正則模塊】
- Python爬蟲框架Scrapy實戰(zhàn)之批量抓取招聘信息
- python抓取網(wǎng)頁圖片示例(python爬蟲)
- 簡單的抓取淘寶圖片的Python爬蟲
- 編寫Python爬蟲抓取暴走漫畫上gif圖片的實例分享
- Python爬蟲實現(xiàn)抓取京東店鋪信息及下載圖片功能示例
相關(guān)文章
PyTorch中flatten()?函數(shù)的用法實例小結(jié)
在PyTorch中,flatten函數(shù)的作用是將一個多維的張量轉(zhuǎn)換為一維的向量,它可以將任意形狀的張量轉(zhuǎn)換為一維,而不需要指定轉(zhuǎn)換后的大小,這篇文章主要介紹了PyTorch中flatten()?函數(shù)的用法,需要的朋友可以參考下2023-11-11Python深度學習pyTorch權(quán)重衰減與L2范數(shù)正則化解析
這篇文章主要介紹了Python深度學習中的pyTorch權(quán)重衰減與L2范數(shù)正則化的詳細解析,文中附含詳細示例代碼,有需要的朋友可以借鑒參考下2021-09-09python通過Windows下遠程控制Linux系統(tǒng)
這篇文章主要為大家詳細介紹了python通過Windows下遠程控制Linux系統(tǒng),實現(xiàn)對socket模塊認識,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06快速解決Django關(guān)閉Debug模式無法加載media圖片與static靜態(tài)文件
這篇文章主要介紹了快速解決Django關(guān)閉Debug模式無法加載media圖片與static靜態(tài)文件的操作方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04windows下安裝python paramiko模塊的代碼
windows下安裝python paramiko模塊,有需要的朋友可以參考下2013-02-02利用Python-iGraph如何繪制貼吧/微博的好友關(guān)系圖詳解
這篇文章主要給大家介紹了關(guān)于利用Python-iGraph如何繪制貼吧/微博好友關(guān)系圖的相關(guān)資料,文中顯示介紹了在windows系統(tǒng)下安裝python-igraph的步驟,然后通過示例代碼演示了繪制好友關(guān)系圖的方法,需要的朋友可以參考下。2017-11-11Python實現(xiàn)身份證前六位地區(qū)碼對照表文件
這篇文章主要為大家詳細介紹了如何利用Python實現(xiàn)身份證前六位地區(qū)碼對照表文件,文中的示例代碼講解詳細,感興趣的可以了解一下2022-12-12