亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python爬蟲實(shí)戰(zhàn)之爬取京東商城實(shí)例教程

 更新時(shí)間:2017年04月24日 11:21:09   作者:Chenjiabing  
這篇文章主要介紹了python爬取京東商城的相關(guān)資料,文中通過爬取一個(gè)實(shí)例頁(yè)面進(jìn)行了講解,通過示例代碼和圖文介紹的非常詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

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

主要工具

  • scrapy
  • BeautifulSoup
  • requests

分析步驟

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

2、我們可以看到這個(gè)頁(yè)面并不是完全的,當(dāng)我們往下拉的時(shí)候?qū)?huì)看到圖片在不停的加載,這就是ajax,但是當(dāng)我們下拉到底的時(shí)候就會(huì)看到整個(gè)頁(yè)面加載了60條褲子的信息,我們打開chrome的調(diào)試工具,查找頁(yè)面元素時(shí)可以看到每條褲子的信息都在<li class='gl-item'></li>這個(gè)標(biāo)簽中,如下圖:

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


4、從上面可以找到請(qǐng)求的url,發(fā)現(xiàn)有很長(zhǎng)的一大段,我們?cè)囍サ粢恍┛纯纯刹豢梢源蜷_,簡(jiǎ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是翻頁(yè)的,可以看出來我們只需要改動(dòng)兩處就可以打開不同的網(wǎng)頁(yè)了,這里的page很好找,你會(huì)發(fā)現(xiàn)一個(gè)很好玩的事情,就是主網(wǎng)頁(yè)的page是奇數(shù),但是異步加載的網(wǎng)頁(yè)中的page是偶數(shù),因此這里只要填上偶數(shù)就可以了,但是填奇數(shù)也是可以訪問的。這里的show_items就是id了,我們可以在頁(yè)面的源碼中找到,通過查找可以看到id在li標(biāo)簽的data-pid中,詳情請(qǐng)看下圖


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

代碼講解

1、首先我們要獲取網(wǎng)頁(yè)的源碼,這里我用的requests庫(kù),安裝方法為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對(duì)象
 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是一個(gè)集合,用于過濾重復(fù)的

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

代碼如下:

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') #價(jià)格
 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)然是要請(qǐng)求那個(gè)異步加載的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是用','隔開的,因此要對(duì)集合中的每一個(gè)id分割,page就是偶數(shù),這里直接用主網(wǎng)頁(yè)的page加一就可以了
 print self.search_urls
 html = requests.get(self.search_urls, headers=self.headers).text #請(qǐng)求
 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) #存儲(chǔ)到數(shù)據(jù)庫(kù)
   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、通過上面就可以爬取了,但是還是要考慮速度的問題,這里我用了多線程,直接每一頁(yè)面開啟一個(gè)線程,速度還是可以的,感覺這個(gè)速度還是可以的,幾分鐘解決問題,總共爬取了100個(gè)網(wǎng)頁(yè),這里的存儲(chǔ)方式是mysql數(shù)據(jù)庫(kù)存儲(chǔ)的,要用發(fā)哦MySQLdb這個(gè)庫(kù),詳情自己百度。

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

一、GitHub源碼

二、本地下載

拓展總結(jié)

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

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

相關(guān)文章

  • Python?requests用法和django后臺(tái)處理詳解

    Python?requests用法和django后臺(tái)處理詳解

    這篇文章主要給大家介紹了關(guān)于Python中requests用法和django后臺(tái)處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03
  • pyspark操作MongoDB的方法步驟

    pyspark操作MongoDB的方法步驟

    這篇文章主要介紹了pyspark操作MongoDB的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Python實(shí)現(xiàn)在線音樂播放器

    Python實(shí)現(xiàn)在線音樂播放器

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)在線音樂播放器的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • python?apscheduler?cron定時(shí)任務(wù)觸發(fā)接口自動(dòng)化巡檢過程

    python?apscheduler?cron定時(shí)任務(wù)觸發(fā)接口自動(dòng)化巡檢過程

    這篇文章主要介紹了python?apscheduler?cron定時(shí)任務(wù)觸發(fā)接口自動(dòng)化巡檢過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • python繪圖demo實(shí)現(xiàn)流程介紹

    python繪圖demo實(shí)現(xiàn)流程介紹

    這篇文章主要介紹了python繪圖demo實(shí)現(xiàn)流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-11-11
  • Windows系統(tǒng)Python直接調(diào)用C++ DLL的方法

    Windows系統(tǒng)Python直接調(diào)用C++ DLL的方法

    這篇文章主要介紹了Windows系統(tǒng)Python直接調(diào)用C++ DLL文件的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-08-08
  • Django中外鍵使用總結(jié)

    Django中外鍵使用總結(jié)

    本文主要介紹了Django中外鍵使用總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • python通過Seq2Seq實(shí)現(xiàn)閑聊機(jī)器人

    python通過Seq2Seq實(shí)現(xiàn)閑聊機(jī)器人

    這篇文章主要介紹了python通過Seq2Seq實(shí)現(xiàn)閑聊機(jī)器人,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • Pyscript使用本地Pyodide配置步驟

    Pyscript使用本地Pyodide配置步驟

    PyScript是“一個(gè)用于在 HTML(如 PHP)中交錯(cuò) Python 的系統(tǒng),這篇文章主要介紹了Pyscript使用本地Pyodide配置方法,需要的朋友可以參考下
    2022-12-12
  • Python如何有效地使用迭代

    Python如何有效地使用迭代

    這篇文章主要為大家詳細(xì)介紹了Python如何有效地使用迭代,文中的示例代碼講解詳細(xì),對(duì)我們深入了解Python有一定的幫助,需要的小伙伴可以學(xué)習(xí)一下
    2023-09-09

最新評(píng)論