一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python爬蟲實戰之爬取京東商城實例教程

python爬蟲實戰之爬取京東商城實例教程

2020-09-30 14:34Chenjiabing Python

這篇文章主要介紹了python爬取京東商城的相關資料,文中通過爬取一個實例頁面進行了講解,通過示例代碼和圖文介紹的非常詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起學習學習吧。

前言

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

主要工具

  • scrapy
  • BeautifulSoup
  • requests

分析步驟

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

2、我們可以看到這個頁面并不是完全的,當我們往下拉的時候將會看到圖片在不停的加載,這就是ajax,但是當我們下拉到底的時候就會看到整個頁面加載了60條褲子的信息,我們打開chrome的調試工具,查找頁面元素時可以看到每條褲子的信息都在<li class='gl-item'></li>這個標簽中,如下圖:

python爬蟲實戰之爬取京東商城實例教程

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

python爬蟲實戰之爬取京東商城實例教程

4、從上面可以找到請求的url,發現有很長的一大段,我們試著去掉一些看看可不可以打開,簡化之后的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是翻頁的,可以看出來我們只需要改動兩處就可以打開不同的網頁了,這里的page很好找,你會發現一個很好玩的事情,就是主網頁的page是奇數,但是異步加載的網頁中的page是偶數,因此這里只要填上偶數就可以了,但是填奇數也是可以訪問的。這里的show_items就是id了,我們可以在頁面的源碼中找到,通過查找可以看到id在li標簽的data-pid中,詳情請看下圖

python爬蟲實戰之爬取京東商城實例教程

上面我們知道怎樣找參數了,現在就可以擼代碼了

代碼講解

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

?
1
2
3
4
def get_html(self):
 res = requests.get(self.url, headers=self.headers)
 html = res.text
 return html #返回的源代碼

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

?
1
2
3
4
5
6
7
8
def get_pids(self):
 html = self.get_html()
 soup = BeautifulSoup(html, 'lxml') #創建BeautifulSoup對象
 lis = soup.find_all("li", class_='gl-item') #查找li標簽
 for li in lis:
  data_pid = li.get("data-pid"#得到li標簽下的data-pid
  if (data_pid):
   self.pids.add(data_pid) #這里的self.pids是一個集合,用于過濾重復的

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

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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') # 得到沒有加載出來的url
  img_2 = div.find("img").get("src") # 得到已經加載出來的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)

前三十張圖片找到了,現在開始找后三十張圖片了,當然是要請求那個異步加載的url,前面已經把需要的參數給找到了,下面就好辦了,直接貼代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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,將獲得的單數拼成url,其中show_items中的id是用','隔開的,因此要對集合中的每一個id分割,page就是偶數,這里直接用主網頁的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) #存儲到數據庫
   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個網頁,這里的存儲方式是mysql數據庫存儲的,要用發哦MySQLdb這個庫,詳情自己百度。

當然也可以用mogodb,但是還沒有學呢,想要的源碼的朋友請看下面:

一、GitHub源碼

二、本地下載

拓展總結

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

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者使用python能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://chenjiabing666.github.io6

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩一区二区三 | 精品午夜中文字幕熟女人妻在线 | 天天操天天射天天爽 | japanesqirl日本护士 | 欧美色fx性乌克兰 | 国产亚洲玖玖玖在线观看 | 无人在线观看免费高清视频播放 | 欧美福利在线播放 | 亚洲精品视频观看 | 欧美三级小视频 | 青青青青在线视频 | 欧美大片一区 | 男人的j进入女人的j免费 | 欧洲兽皇 | 色老板美国在线观看 | 国产xxxxxx久色视频在 | 深夜日韩| 亚洲欧洲日产v特级毛片 | 黑人好大好硬好深好爽想要h | 99久精品 | 国产精品日本一区二区三区在线看 | 高清国产欧美一v精品 | 四虎www| 亚洲第一成年免费网站 | bbbxxx乱大交欧美小说 | 男人久久天堂 | 99久久免费视频 | 日本一区视频 | 精品国产福利片在线观看 | pppd在线播放 | 国产精品合集一区二区 | 久久受www免费人成_看片中文 | 无人在线观看免费高清视频播放 | 亚洲视频在线一区二区三区 | 紧身短裙女教师波多野 | 成年人免费在线看的惊悚动作片 | 性做久久久久久 | 日本在线看免费 | 午夜影院免费体验 | 无码区国产区在线播放 | 久久视频这有精品63在线国产 |