1. 程式人生 > >python爬蟲之一 —— 愛鬥圖圖包抓取

python爬蟲之一 —— 愛鬥圖圖包抓取

前言

最近有點空閒時間,又開始研究python的爬蟲,事實上這幾天已經寫了好幾個爬蟲,也嘗試了用pyspider爬取網頁,慢慢積累,今天和大家分享一個表情包爬蟲。

相信大家都喜歡鬥圖,今天這個爬蟲就是爬取愛鬥圖網站的圖包,資源豐富,內容很多:
在這裡插入圖片描述

步驟

這個網站主要是靜態網頁,結構並不複雜,我們的操作步驟如下:

  1. 傳送請求,接收響應;
  2. 解析第一頁,獲取詳情頁連結和下一頁連結;
  3. 進入詳情頁抓取圖片連結和其它資訊;
  4. 翻頁,重複1、2、3步

詳細程式碼

下面是具體的python程式碼,這裡沒有下載圖片,只是把圖片資料存到了本地,如果要下載可以再定義一個下載函式。以上,謝謝。

import requests
from bs4 import BeautifulSoup as bs
import json


class Doutu:
    def __init__(self):
        self.start_url = 'http://www.adoutu.com/article/list/1'
        self.part_url = 'http://www.adoutu.com'
        self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
} def get_page(self, url): try: response = requests.get(url, headers=self.headers) return response.content.decode() except: return None def parse_page(self, html): soup=bs(html, 'lxml') contents=soup.select('div.article-part-list > div.list-group'
) next_url=self.part_url+soup.select('li.page-item > a.page-link')[-1]['href'] content_list=[] for content in contents: result={ 'title': content.select_one('.title-content').get_text(), 'detail_url': self.part_url+content.select_one('div.list-group-item > a')['href'], 'date': content.select('.title-property')[0].get_text().replace('上傳時間:', ''), 'nums': content.select('.title-property')[1].get_text().replace('數量:', ''), 'hot': content.select('.title-property')[2].get_text().replace('熱度:', ''), 'keywords': [i.get_text() for i in content.select('.detail-keyword-item ')] } content_list.append(result) return next_url, content_list def get_detail_page(self, url): content=self.get_page(url) s=bs(content, 'lxml') results=s.select('div.detail-content > div.detail-picture') pics_list=[i.find('img')['src'] for i in results] # pic_title=[i.find('img')['title'] for i in results] return pics_list#, pic_title def run(self): html=self.get_page(self.start_url) next_url, content_list=self.parse_page(html) for i in content_list: detail_url=i['detail_url'] pics_list=self.get_detail_page(detail_url) i['pics_list']=pics_list self.on_save(i) while self.get_page(next_url): html=self.get_page(next_url) next_url, content_list=self.parse_page(html) for i in content_list: detail_url=i['detail_url'] pics_list=self.get_detail_page(detail_url) i['pics_list']=pics_list self.on_save(i) def on_save(self, content): if content: with open('E:/spiders/doutu/doutu.txt', 'a', encoding='utf-8') as f: f.write(json.dumps(content, ensure_ascii=False)) f.write('\n') print(content['title'], 'Done') if __name__ == '__main__': dt=Doutu() dt.run()