主頁 > 知識庫 > 爬取今日頭條Ajax請求

爬取今日頭條Ajax請求

熱門標(biāo)簽:提高電話機(jī)器人接通率 外呼系統(tǒng)api對接 廣西智能外呼系統(tǒng)多少錢 平?jīng)龈叩碌貓D標(biāo)注商戶要收費(fèi)嗎 地圖標(biāo)注與公司業(yè)務(wù)關(guān)系 荊州智能電銷機(jī)器人 福建微碼電話機(jī)器人 銷售電銷機(jī)器人詐騙 大學(xué)校門地圖標(biāo)注

網(wǎng)址:https://www.toutiao.com/

搜索頭條

可以得到這個(gè)網(wǎng)址:

https://www.toutiao.com/search/?keyword=%E8%A1%97%E6%8B%8D

開發(fā)者工具查看:

我們在搜索中并沒有發(fā)現(xiàn)上面的文字,那么我們可以初步判定,這個(gè)由Ajax加載,然后渲染出來的。此時(shí)切換到xhr過濾,可以看到確實(shí)是ajax請求。

觀察請求的特點(diǎn),發(fā)現(xiàn)只有offset是改變的,而且一次加20,。

我們可以用它來控制數(shù)據(jù)分頁,然后把圖片下載下來。代碼如下:

import requests
import os
from urllib.parse import urlencode
from hashlib import md5
from multiprocessing.pool import Pool
from requests import codes
def get_page(offset):
  params = {
    "offset":offset,
    "format":"json",
    "keyword":"街拍",
    "autoload":"true",
    "count":"20",
    "cur_tab":"1",
    "from":"search_tab"
  }
  url = 'https://www.toutiao.com/search_content/?'+urlencode(params)
  try:
    response = requests.get(url)
    if response.status_code == 200:
      # print(url)
      return response.json()
  except requests.ConnectionError:
    return None
# get_page(0)
def get_images(json):
  if json.get('data'):
    for item in json.get('data'):
      if item.get('cell_type') is not None:
        continue
      title = item.get('title')
      images = item.get('image_list')
      for image in images:
        yield {
          'title':title,
          'image':'https:' + image.get('url'),
        }
def save_image(item):
  #os.path.sep  路徑分隔符‘//'
  img_path = 'img' + os.path.sep + item.get('title')
  if not os.path.exists(img_path):
    os.makedirs(img_path)
  try:
    resp = requests.get(item.get('image'))
    # print(type(resp))
    if codes.ok == resp.status_code:
      file_path = img_path + os.path.sep + '{file_name}.{file_suffix}'.format(
        file_name=md5(resp.content).hexdigest(),#md5是一種加密算法獲取圖片的二進(jìn)制數(shù)據(jù),以二進(jìn)制形式寫入文件
        file_suffix='jpg')
      if not os.path.exists(file_path):
        with open(file_path,'wb')as f:
          f.write(resp.content)
          print('Downladed image path is %s' % file_path)
      else:
        print('Already Downloaded',file_path)
  except requests.ConnectionError:
    print('Failed to Save Image,item %s' % item)
def main(offset):
  json = get_page(offset)
  for item in get_images(json):
    print(item)
    save_image(item)
GROUP = 0
GROUP_END = 2
if __name__ == '__main__':
  pool = Pool()
  groups = ([x*20 for x in range(GROUP,GROUP_END)])
  pool.map(main,groups)  #將groups一個(gè)個(gè)調(diào)出來傳給main函數(shù)
  pool.close()
  pool.join()   #保證子進(jìn)程結(jié)束后再向下執(zhí)行 pool.join(1) 等待一秒

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

您可能感興趣的文章:
  • 十個(gè)優(yōu)秀的Ajax/Javascript實(shí)例網(wǎng)站收集
  • 編碼為GB2312網(wǎng)站讓AJAX接收的數(shù)據(jù)顯示支持中文
  • php ajax網(wǎng)站瀏覽統(tǒng)計(jì)功能的簡單實(shí)現(xiàn)
  • PHP+Ajax 網(wǎng)站SEO查詢工具 提供代碼
  • ajax+node+request爬取網(wǎng)絡(luò)圖片的實(shí)例(宅男福利)
  • 通過抓取淘寶評論為例講解Python爬取ajax動(dòng)態(tài)生成的數(shù)據(jù)(經(jīng)典)
  • 如何爬取通過ajax加載數(shù)據(jù)的網(wǎng)站

標(biāo)簽:內(nèi)江 黔東 德陽 衡陽 樂山 邯鄲 婁底 海南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《爬取今日頭條Ajax請求》,本文關(guān)鍵詞  爬取,今日,頭條,Ajax,請求,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《爬取今日頭條Ajax請求》相關(guān)的同類信息!
  • 本頁收集關(guān)于爬取今日頭條Ajax請求的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章