日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python爬虫爬图片教程_python爬虫实战之爬取京东商城实例教程

發(fā)布時間:2024/7/5 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬虫爬图片教程_python爬虫实战之爬取京东商城实例教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

本文主要介紹的是利用python爬取京東商城的方法,文中介紹的非常詳細(xì),下面話不多說了,來看看詳細(xì)的介紹吧。

主要工具

scrapy

BeautifulSoup

requests

分析步驟

1、打開京東首頁,輸入褲子將會看到頁面跳轉(zhuǎn)到了這里,這就是我們要分析的起點

2、我們可以看到這個頁面并不是完全的,當(dāng)我們往下拉的時候?qū)吹綀D片在不停的加載,這就是ajax,但是當(dāng)我們下拉到底的時候就會看到整個頁面加載了60條褲子的信息,我們打開chrome的調(diào)試工具,查找頁面元素時可以看到每條褲子的信息都在

這個標(biāo)簽中,如下圖:

3、接著我們打開網(wǎng)頁源碼就會發(fā)現(xiàn)其實網(wǎng)頁源碼只有前30條的數(shù)據(jù),后面30條的數(shù)據(jù)找不到,因此這里就會想到ajax,一種異步加載的方式,于是我們就要開始抓包了,我們打開chrome按F12,點擊上面的NetWork,然后點擊XHR,這個比較容易好找,下面開始抓包,如下圖:

4、從上面可以找到請求的url,發(fā)現(xiàn)有很長的一大段,我們試著去掉一些看看可不可以打開,簡化之后的url=https://search.jd.com/s_new.php?keyword=%E8%A3%A4%E5%AD%90&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&offset=3&wq=%E8%A3%A4%E5%AD%90&page={0}&s=26&scrolling=y&pos=30&show_items={1}

這里的showitems是褲子的id,page是翻頁的,可以看出來我們只需要改動兩處就可以打開不同的網(wǎng)頁了,這里的page很好找,你會發(fā)現(xiàn)一個很好玩的事情,就是主網(wǎng)頁的page是奇數(shù),但是異步加載的網(wǎng)頁中的page是偶數(shù),因此這里只要填上偶數(shù)就可以了,但是填奇數(shù)也是可以訪問的。這里的show_items就是id了,我們可以在頁面的源碼中找到,通過查找可以看到id在li標(biāo)簽的data-pid中,詳情請看下圖

上面我們知道怎樣找參數(shù)了,現(xiàn)在就可以擼代碼了

代碼講解

1、首先我們要獲取網(wǎng)頁的源碼,這里我用的requests庫,安裝方法為pip install requests,代碼如下:

def get_html(self):

res = requests.get(self.url, headers=self.headers)

html = res.text

return html #返回的源代碼

2、根據(jù)上面的分析可以知道,第二步就是得到異步加載的url中的參數(shù)show_items,就是li標(biāo)簽中的data-pid,代碼如下:

def get_pids(self):

html = self.get_html()

soup = BeautifulSoup(html, 'lxml') #創(chuàng)建BeautifulSoup對象

lis = soup.find_all("li", class_='gl-item') #查找li標(biāo)簽

for li in lis:

data_pid = li.get("data-pid") #得到li標(biāo)簽下的data-pid

if (data_pid):

self.pids.add(data_pid) #這里的self.pids是一個集合,用于過濾重復(fù)的

3、下面就是獲取前30張圖片的url了,也就是主網(wǎng)頁上的圖片,其中一個問題是img標(biāo)簽的屬性并不是一樣的,也就是源碼中的img中不都是src屬性,一開始已經(jīng)加載出來的圖片就是src屬性,但是沒有加載出來的圖片是data-lazy-img,因此在解析頁面的時候要加上討論。

代碼如下:

def get_src_imgs_data(self):

html = self.get_html()

soup = BeautifulSoup(html, 'lxml')

divs = soup.find_all("div", class_='p-img') # 圖片

# divs_prices = soup.find_all("div", class_='p-price') #價格

for div in divs:

img_1 = div.find("img").get('data-lazy-img') # 得到?jīng)]有加載出來的url

img_2 = div.find("img").get("src") # 得到已經(jīng)加載出來的url

if img_1:

print img_1

self.sql.save_img(img_1)

self.img_urls.add(img_1)

if img_2:

print img_2

self.sql.save_img(img_2)

self.img_urls.add(img_2)

前三十張圖片找到了,現(xiàn)在開始找后三十張圖片了,當(dāng)然是要請求那個異步加載的url,前面已經(jīng)把需要的參數(shù)給找到了,下面就好辦了,直接貼代碼:

def get_extend_imgs_data(self):

# self.search_urls=self.search_urls+','.join(self.pids)

self.search_urls = self.search_urls.format(str(self.search_page), ','.join(self.pids)) #拼湊url,將獲得的單數(shù)拼成url,其中show_items中的id是用','隔開的,因此要對集合中的每一個id分割,page就是偶數(shù),這里直接用主網(wǎng)頁的page加一就可以了

print self.search_urls

html = requests.get(self.search_urls, headers=self.headers).text #請求

soup = BeautifulSoup(html, 'lxml')

div_search = soup.find_all("div", class_='p-img') #解析

for div in div_search:

img_3 = div.find("img").get('data-lazy-img') #這里可以看到分開查找img屬性了

img_4 = div.find("img").get("src")

if img_3: #如果是data-lazy-img

print img_3

self.sql.save_img(img_3) #存儲到數(shù)據(jù)庫

self.img_urls.add(img_3) #用集合去重

if img_4: #如果是src屬性

print img_4

self.sql.save_img(img_4)

self.img_urls.add(img_4)

4、通過上面就可以爬取了,但是還是要考慮速度的問題,這里我用了多線程,直接每一頁面開啟一個線程,速度還是可以的,感覺這個速度還是可以的,幾分鐘解決問題,總共爬取了100個網(wǎng)頁,這里的存儲方式是mysql數(shù)據(jù)庫存儲的,要用發(fā)哦MySQLdb這個庫,詳情自己百度。

當(dāng)然也可以用mogodb,但是還沒有學(xué)呢,想要的源碼的朋友請看下面:

拓展總結(jié)

寫到這里可以看到搜索首頁的網(wǎng)址中keyword和wq都是你輸入的詞,如果你想要爬取更多的信息,可以將這兩個詞改成你想要搜索的詞即可,直接將漢字寫上,在請求的時候會自動幫你編碼的,我也試過了,可以抓取源碼的,如果你想要不斷的抓取,可以將要搜索的詞寫上文件里,然后從文件中讀取就可以了。以上只是一個普通的爬蟲,并沒有用到什么框架,接下來將會寫scrapy框架爬取的,請繼續(xù)關(guān)注腳本之家哦!!!

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者使用python能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

總結(jié)

以上是生活随笔為你收集整理的python爬虫爬图片教程_python爬虫实战之爬取京东商城实例教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。