今日頭條組圖下載本地,並存入MongoDB

我是跟着崔大神的視頻進行學習的,這是他的一個案例,一步一步敲,代碼肯定是沒有問題的,肯定能學到一點東西,註釋不想加了,下面自己一步一步完成的。(代碼註釋的部分,是爲了測試,時常打印一下信息,看有沒有問題)

流程框架:

  1. 爬取索引頁內容:利用requests請求目標站點,得到索引網頁HTML代碼,返回結果
  2. 抓取詳情頁內容:解析返回結果,得到詳情頁的鏈接,並進一步抓取詳情頁的信息
  3. 下載圖片並保存數據庫
  4. 開啓循環及多線程:對多網頁內容遍歷,開啓多線程提高抓取速度

1、在網址www.toutiao.com,在搜索框輸入“街拍”,打開開發者選項,發現返回的沒有我們想要的數據,判斷該網頁是通過Ajax加載,JS渲染

2、點擊XHR,點擊第一個URL,看返回的json格式的數據,由於看的不方便,將它複製粘貼到json格式化閱讀器中,可以看到title與頭條裏的title是一樣的,說明數據是正確的

滾輪一直向下滑動,一次加載20個,發現offset在變化,count一直是20

3、點擊第一個內容,進行跳轉,在開發者選項裏能不能找到圖片的url,結果發現在Doc中的gallery中,有圖片的地址。可以自己嘗試,點擊圖片右鍵,查看圖片的地址,進行對應。數了一下是11個圖片的地址,不過這些需要正則匹配一下。

4、至此已經分析完頁面,打開pycharm,創建一個項目,首先測試打印json返回的數據,發現能打印出來,一定要加headers,不然是打印不出東西來的。後面就需要我們進行解析

import requests
from urllib.parse import urlencode

def get_page_index(offset):
   
headers = {
       
'referer': 'https://www.toutiao.com/search/?keyword=%E8%A1%97%E6%8B%8D',
       
'cookie': 'tt_webid=6741580036883301901; WEATHER_CITY=%E5%8C%97%E4%BA%AC; __tasessionId=uthwjgcvi1569646429442; tt_webid=6741580036883301901; csrftoken=22882f942604650099034bfe8636766a; s_v_web_id=3fa020c7425a1ebabcf947ef5b12327e',
       
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36',
       
'x-requested-with': 'XMLHttpRequest'
   
}
    params
= {
        
'aid': '24',
       
'app_name': 'web_search',
       
'offset': offset,
       
'format': 'json',
       
'keyword': '街拍',
       
'autoload': 'true',
       
'count': '20',
       
'en_qc': '1',
       
'cur_tab': '1',
       
'from': 'search_tab',
       
'pd': 'synthesis',
    }
    url
= 'https://www.toutiao.com/api/search/content/?' + urlencode(params)
   
print(url)
   
try:
       
response = requests.get(url, headers=headers)
       
if response.status_code == 200:
           
return response.text
    except requests.ConnectionError:
       
return None

def
main():
   
html = get_page_index(0)
   
print(html)

if __name__ == '__main__':
   
main()

5、增加解析索引頁的圖片的url,將它們打印出來

6、再添加詳情頁的爬取以及解析,能看見真正需要的圖片的url信息打印出來(這裏需要注意詳情頁圖片的url隨時都是會變的,需要自己分析圖片url的規律),到這裏基本結束,需要的信息都解析出來呢,之後將這些數據存到MongoDB中

7、將數據存儲到MongoDB中,用robo3T可視化工具查看下載出來的數據,可以看到這裏只存儲了圖片的url,還需要將圖片下載下來。

8、下載圖片到本地

9、下一步,因爲目前只是抓取第一個索引頁,下拉索引頁可以看到offset20遞增,改變offset值就可以爬取街拍所有的索引頁以及詳情頁的圖片(這裏有一點錯誤,不是按照順序爬取,爬取一點出現錯誤,但是上面是對的,就是這裏爬取所有索引頁有一點問題)

 

源代碼GitHub:https://github.com/15160200501/TouTiao

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章