如何采集淘寶(口碑)外賣的數據
本文原創作者:鯤之鵬(http://www.site-digger.com)
本文原始鏈接:http://www.site-digger.com/html/articles/20170926/138.html
淘寶外賣(口碑外賣)有App版和H5版兩個版本。經驗(直覺)告訴我們淘寶的App肯定是有保護措施的(簽名機制),那我們就直奔H5版本了。H5版本的入口地址是:https://h5.m.taobao.com/app/waimai/index.html,你需要啟動瀏覽器的手機兼容模式才能在PC瀏覽器中正常瀏覽(如何開啟?我們之前的文章裏有介紹:http://www.site-digger.com/html/articles/20160718/127.html
稍微抓包分析就可以看到數據全是Ajax動態加載的,不論是店鋪列表頁還是店鋪詳情頁。當你嘗試去構造這個Ajax請求時,會發現悲劇了。它同樣也有一個簽名參數sign(如下圖所示)。這個值是根據data參數動態計算出來的,經驗告訴我們想搞清楚這個算法是不容易的。如果我們不提交這個參數或者提交一個錯誤的值,服務器會返回錯誤。
有經驗的爬蟲工程師立馬會想到,那我們就曲線救國吧,使用模擬瀏覽器,來繞過這個簽名機制。但是當你再仔細分析時發現又悲劇了,Ajax動態加載數據後,頁面HTML裏還是看不到店鋪的詳細信息(只能看到名稱、月銷量、起送金額之類的,如下圖所示)。
PS:科普一下模擬瀏覽器的數據抓取方式,顧名思義就是通過程序控制瀏覽器去抓取數據,最大的優點是可以不關心數據的加載方式(動態加載還是靜態頁面),能繞過各種加密方式。直接從最終的頁面源碼(數據加載完成後)中提取想要的字段。(缺點是速度慢,資源開銷大)。
我去,太狠了吧。Ajax返回的信息裏明明有店鋪詳細的信息(甚至連電話、營業時間、營業執照信息都有啊),可惜動態加載後的頁面中找不到(故意的),甚至控制臺查看所有JS變量也找不到:dir(window)。我們需要的數據不在頁面源碼裏,傳統的模擬瀏覽器的方式也行不通了。
看來我們只能想辦法攔截那個瀏覽器的Ajax應答,然後從Ajax應答裏提取數據了。之前我們曾介紹過可以通過Fiddler + Custom Rules腳本來實現類似的功能(http://www.site-digger.com/html/articles/20170810/137.html),這裏我們可以利用類似的方案,讓 Custom Rules把捕獲到的Ajax應答數據記錄下來,然後我們再從裏面提取想要的信息。
不過今天要換一種方案(條條大路通羅馬)。我們換用SlimerJS(https://slimerjs.org/),它和PhantomJS類似可以用Javascript來驅動它為我們工作。它比PhantomJS優越的地方是它提供一個可以捕獲HTTP事件的接口,我們可以利用它的onResourceReceived接口在HTTP應答到達的時候進行捕獲。而且它支持多線程。
最後再秀一下抓取過程和最終獲取到數據的截圖:
說明:該文章為鯤之鵬(http://www.site-digger.com)原創文章 ,您除了可以發表評論外,還可以轉載到別的網站,但是請保留源地址,謝謝!!(尊重他人勞動,我們共同努力)
如何采集淘寶(口碑)外賣的數據
相關推薦
如何采集淘寶(口碑)外賣的數據
多線程 源地址 elf 今天 digg 提取 如果 控制臺 轉載 本文原創作者:鯤之鵬(http://www.site-digger.com)本文原始鏈接:http://www.site-digger.com/html/articles/20170926/138.html淘
gui采集淘寶列表商品[後期有空更新采集各大電商平臺]
accept lan time object nec nal stringvar ble amp import requestsfrom pymysql import *from tkinter import *window = Tk()window.title("淘寶列表
2018年ElasticSearch6.2.2教程ELK搭建日誌采集分析系統(目錄)
1.2 安裝包 接口 語句 參數配置 介紹 ofo 計劃 裝包 章節一 2018年 ELK課程計劃和效果演示 1、課程安排和效果演示 簡介:課程介紹和主要知識點說明,ES搜索接口演示,部署的ELK項目演示 章節二 elasticSearch 6.2版本基礎講
Redis(五)、Redis數據庫集群相關
Redis 搭建 集群 數據分片 節點管理 Redis數據庫集群第1章 集群簡介Redis 集群是一個分布式(distributed)、容錯(fault-tolerant)的 Redis 實現, 集群可以使用的功能是普通單機 Redis 所能使用的功能的一個子集(subset),是一個可以
泛函編程(13)-無窮數據流-Infinite Stream
我們 根據 測試 empty struct 大量 alt cal ant 上節我們提到Stream和List的主要分別是在於Stream的“延後計算“(lazy evaluation)特性。我們還討論過在處理大規模排列數據集時,Stream可以一個一個把數據元素搬進
小白學開發(iOS)OC_ block數據類型(2015-08-08)
main nsobject 改變 char typedef 能夠 div sel 方法 // // main.m // block數據類型 // // Created by admin on 15/8/12. // Copyright (c) 201
小白學開發(iOS)OC_ SEL數據類型(2015-08-10)
family face -h per imp font ng- for ret // // main.m // SEL數據類型 // // Created by admin on 15/8/12. // Copyright
python - bilibili(四)抓包數據亂碼
roo style 抓包 是我 ima log lan 瀏覽器 gbk 上一篇文章中不知道大家發現端倪木有,兩張照片對比很明顯發現第一張是信息很明顯的,第二張是亂碼的。 為什麽會出現這種情況?細心的童鞋可能發現是我們發送給服務器的請求連接的數據不同: 第一張圖的信息是{"r
最新的建站(小說站)分享(二)--創建數據庫與建立數據表
技術分享 dmi isam har admin 數據表 auto inf 後端 php開發後端中最重要的一個環節就是創建數據庫與建立數據表,因為他和整個項目都有直接的關系,所以,我們首先建立幾個數據表,為後面寫程序墊下基礎 首先我們先去建立數據庫文章然後查詢數據庫 這裏我們
淘寶商品列表以及商品詳情數據抓取
文本 def 銷量 .com [1] 寫入excel d+ pan bind 前段時間老師讓我爬取淘寶的商品列表以及其商品詳情數據,期間遇到了很多問題。最困難的就是淘寶的價格數據是以Ajax異步加載的,這些數據暫時還沒有能力獲取到。 下面介紹一下基本思路。 首先,通過抓
QT學習筆記(16) QT5的數據庫操作
libmysql gets pan detail ima () 數據庫服務 oca else 一、編譯驅動 參考博客:http://blog.csdn.net/xian0gang/article/details/49791351 因為從QT5以來,它就自帶數據庫驅動
(4)自定義數據結構初探
lang 結構 十分 類型 是把 數據 庫類 結束 基本 從最基本的層面理解,數據結構是把一組相關的數據元素組織起來然後使用她們的策略和方法。 C++運行用戶以類的形式自定義數據類型,而庫類型是語言自身定義的,類在C++中十分重要!盡管sales_item很簡單,但要想給出
Python基礎(7):基本數據類型(dict)
sel open name sta allow zed items 格式 鍵值對 字典(dict): 說明:字典是另一種可變容器模型,且可存儲任意類型對象。字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號{
python(8)- python基礎數據類型
最簡 errors span ins 默認 ubuntu replace 包含 解釋 數據類型 計算機顧名思義就是可以做數學計算的機器,因此,計算機程序理所當然地可以處理各種數值。但是,計算機能處理的遠不止數值,還可以處理文本、圖形、音頻、視 頻、網頁等各種各樣的數據,
Pyhton編程(五)之基本數據類型-列表、元組、字典
rem 返回 type for tro 重復 class 數字 循環 一:列表(list) 列表是由一系列按特定順序排列的元素組成,可以創建包含字母表中的所有字母、數字、或中文的列表,也可以將任何東西加入列表中,其中的元素之間可以沒有任何關系。 在Python中,用
數據庫復習總結(3)-創建數據庫、表
pan 日誌文件 包含 維護 多個 等等 事務日誌文件 文件組 文件 一、創建數據庫 1、界面操作:創建數據庫,創建表,設置主鍵,數據庫的分離和附加 2、MS SQLServer的每個數據庫包含: 1個主數據文件(.mdf)必須 1個事務日誌文件(.ldf)必須 3、可以包
(轉載)高光譜數據讀取by multibandread函數
format) 數據 參考 sig little long header hdr gin 原文地址:http://www.cnblogs.com/yxxx/p/6873834.html 利用matlab中multibandread函數參考數據的hdr文件讀取: 函數格式:
Python(二)Python基本數據類型
python數據類型變量變量是內存中的一塊區域變量的命名:由字母、數字、下劃線組成並且開頭不能時數字python中地址變量與c語言剛好相反,一條數據包含多個標簽:>>> a=1>>> b=1>>> id(a)34909288>>> id(
Python(三)python基本數據類型
python基本數據類型數據類型一、Python支持的數據類型1.變量變量是內存中的一塊區域變量的命名:由字母、數字、下劃線組成並且開頭不能時數字python中地址變量與c語言剛好相反,一條數據包含多個標簽:>>> a=1>>> b=1>>> id(a)3
ADO.NET復習總結(6)-斷開式數據操作
div list() ide -a toolstrip pty ogre 提示 names 一、基礎知識 主要類及成員(和數據庫無關的)(1)類DataSet:數據集,對應著庫,屬性Tables表示所有的表(2)類DataTable:數據表,對應著表,屬性Rows表示所有的