網路爬蟲筆記(Day4)
阿新 • • 發佈:2018-11-01
爬取今日頭條圖集 進入今日頭條首頁:https://www.toutiao.com/
步驟:1、檢視網頁,查詢我們需要的URL,分析URL
2、獲取網頁內容,分析內容
3、定位我們需要的內容
4、將資料儲存
在搜素框 輸入要搜尋的內容(例如:街拍),然後選擇圖集,F12檢查,檢視Ajax請求:
第一次Ajax請求:
再往下拉,觸發第二次、第三次Ajax請求:(下圖第二次Ajax請求)
分析URL後發現發現規律只有offset不同(第一次offset=0,第二次offset=20,第三次offset=40、、),其他內容都相同,此時我們得到了當前頁面的所有圖片文章的URL(每條只可以看到四張,但是裡面本應該有8張,如下圖一),但是我們得不到具體一個裡面的所有圖片。故我們需要再進去此URL,再去分析具體一篇圖片文章的所有圖片URL(下圖二)。
然後我們再分析get請求的Response,我們去分析返回值,查找出每張圖片的URL,如下圖我們找出了圖片對應的URL路徑:
所有的分析到這裡就結束了,接下來就是程式碼實現。
完整程式碼如下:
import re import requests import json import os from urllib import request filename = 'Download' if not os.path.exists(filename): os.mkdir(filename) # 新建資料夾用於存放圖片 i = 0 strdes = 0 offset = 20 while i < 10: headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', } # 第一層 url url = 'https://www.toutiao.com/search_content/?offset={}&format=json&keyword=%E8%A1%97%E6%8B%8D&autoload=true&count=20&cur_tab=3&from=gallery'.format(str(offset*i)) response = requests.get(url, headers=headers) res_dict = response.json() # print(res_dict) # address_url = res_dict_data = res_dict['data'] # print(res_dict_data) # print(type(res_dict_data)) for url_dict in res_dict_data: # 獲取到的第二層url url = url_dict['article_url'] print(url) response = requests.get(url, headers=headers) info = response.text re_m = r'gallery: JSON\.parse\((.*)\),' msg = re.search(re_m, info) if msg == None: break msg_info = msg.group(1) msg_str = json.loads(msg_info) msg_dict = json.loads(msg_str) # print(msg_dict) info_msg = msg_dict['sub_images'] for j in info_msg: images_url = j['url'] # print(images_url) # img_name = filename + '/' + images_url.split('/')[-1] + '.jpg' img_name = filename + '/' + str(strdes) + '.jpg' strdes += 1 print(img_name) request.urlretrieve(images_url, img_name) i = i + 1