scrapy框架攜帶cookie訪問淘寶購物車

来源:https://www.cnblogs.com/bertwu/archive/2020/07/06/13210878.html
-Advertisement-
Play Games

我們知道,有的網頁必須要登錄才能訪問其內容。scrapy登錄的實現一般就三種方式。 1.在第一次請求中直接攜帶用戶名和密碼。 2.必須要訪問一次目標地址,伺服器返回一些參數,例如驗證碼,一些特定的加密字元串等,自己通過相應手段分析與提取,第二次請求時帶上這些參數即可。可以參考https://www. ...


我們知道,有的網頁必須要登錄才能訪問其內容。scrapy登錄的實現一般就三種方式。

1.在第一次請求中直接攜帶用戶名和密碼。

2.必須要訪問一次目標地址,伺服器返回一些參數,例如驗證碼,一些特定的加密字元串等,自己通過相應手段分析與提取,第二次請求時帶上這些參數即可。可以參考https://www.cnblogs.com/bertwu/p/13210539.html

3.不必花里胡哨,直接手動登錄成功,然後提取出cookie,加入到訪問頭中即可。

本文以第三種為例,實現scrapy攜帶cookie訪問購物車。

1.先手動登錄自己的淘寶賬號,從中提取出cookie,如下圖中所示。

 

 2.cmd中workon自己的虛擬環境,創建項目 (scrapy startproject taobao)

3.pycharm打開項目目錄 ,在terminal中輸入(scrapy genspider itaobao taobao.com),得到如下的目錄結構

 

 4.setting中設置相應配置

5. 在itaobao中寫業務代碼。我們先不加人cookie直接訪問購物車,代碼如下:

import scrapy


class ItaobaoSpider(scrapy.Spider):
    name = 'itaobao'
    allowed_domains = ['taobao.com']
    start_urls = [
        'https://cart.taobao.com/cart.htm?spm=a1z02.1.a2109.d1000367.OOeipq&nekot=1470211439694']  # 第一次就直接訪問購物車

    def parse(self, response):
        print(response.text)

響應回來信息如下

 

 明顯是跳轉到登錄頁面的意思。

6.言歸正傳,正確的代碼如下,需要重寫start_requests()方法,此方法可以返回一個請求給爬蟲的起始網站,這個返回的請求相當於start_urls,start_requests()返回的請求會替代start_urls里的請求。

 1 import scrapy
 2 
 3 
 4 class ItaobaoSpider(scrapy.Spider):
 5     name = 'itaobao'
 6     allowed_domains = ['taobao.com']
 7 
 8     # start_urls = ['https://cart.taobao.com/cart.htm?spm=a1z02.1.a2109.d1000367.OOeipq&nekot=1470211439694']
 9     # 需要重寫start_requests方法
10     def start_requests(self):
11         url = "https://cart.taobao.com/cart.htm?spm=a1z02.1.a2109.d1000367.OOeipq&nekot=1470211439694"
12         # 此處的cookie為手動登錄後從瀏覽器粘貼下來的值
13         cookie = "thw=cn; cookie2=16b0fe13709f2a71dc06ab1f15dcc97b; _tb_token_=fe3431e5fe755;" \
14                  " _samesite_flag_=true; ubn=p; ucn=center; t=538b39347231f03177d588275aba0e2f;" \
15                  " tk_trace=oTRxOWSBNwn9dPyorMJE%2FoPdY8zfvmw%2Fq5hoqmmiKd74AJ%2Bt%2FNCZ%" \
16                  "2FSIX9GYWSRq4bvicaWHhDMtcR6rWsf0P6XW5ZT%2FgUec9VF0Ei7JzUpsghuwA4cBMNO9EHkGK53r%" \
17                  "2Bb%2BiCEx98Frg5tzE52811c%2BnDmTNlzc2ZBkbOpdYbzZUDLaBYyN9rEdp9BVnFGP1qVAAtbsnj35zfBVfe09E%" \
18                  "2BvRfUU823q7j4IVyan1lagxILINo%2F%2FZK6omHvvHqA4cu2IaVAhy5MzzodyJhmXmOpBiz9Pg%3D%3D; " \
19                  "cna=5c3zFvLEEkkCAW8SYSQ2GkGo; sgcookie=E3EkJ6LRpL%2FFRZIBoXfnf; unb=578051633; " \
20                  "uc3=id2=Vvl%2F7ZJ%2BJYNu&nk2=r7kpR6Vbl9KdZe14&lg2=URm48syIIVrSKA%3D%3D&vt3=F8dBxGJsy36E3EwQ%2BuQ%3D;" \
21                  " csg=c99a3c3d; lgc=%5Cu5929%5Cu4ED9%5Cu8349%5Cu5929%5Cu4ED9%5Cu8349; cookie17=Vvl%2F7ZJ%2BJYNu;" \
22                  " dnk=%5Cu5929%5Cu4ED9%5Cu8349%5Cu5929%5Cu4ED9%5Cu8349; skt=4257a8fa00b349a7; existShop=MTU5MzQ0MDI0MQ%3D%3D;" \
23                  " uc4=nk4=0%40rVtT67i5o9%2Bt%2BQFc65xFQrUP0rGVA%2Fs%3D&id4=0%40VH93OXG6vzHVZgTpjCrALOFhU4I%3D;" \
24                  " tracknick=%5Cu5929%5Cu4ED9%5Cu8349%5Cu5929%5Cu4ED9%5Cu8349; _cc_=W5iHLLyFfA%3D%3D; " \
25                  "_l_g_=Ug%3D%3D; sg=%E8%8D%893d; _nk_=%5Cu5929%5Cu4ED9%5Cu8349%5Cu5929%5Cu4ED9%5Cu8349;" \
26                  " cookie1=VAmiexC8JqC30wy9Q29G2%2FMPHkz4fpVNRQwNz77cpe8%3D; tfstk=cddPBI0-Kbhyfq5IB_1FRmwX4zaRClfA" \
27                  "_qSREdGTI7eLP5PGXU5c-kQm2zd2HGhcE; mt=ci=8_1; v=0; uc1=cookie21=VFC%2FuZ9ainBZ&cookie15=VFC%2FuZ9ayeYq2g%3D%3D&cookie" \
28                  "16=WqG3DMC9UpAPBHGz5QBErFxlCA%3D%3D&existShop=false&pas=0&cookie14=UoTV75eLMpKbpQ%3D%3D&cart_m=0;" \
29                  " _m_h5_tk=cbe3780ec220a82fe10e066b8184d23f_1593451560729; _m_h5_tk_enc=c332ce89f09d49c68e13db9d906c8fa3; " \
30                  "l=eBxAcQbPQHureJEzBO5aourza7796IRb8sPzaNbMiInca6MC1hQ0PNQD5j-MRdtjgtChRe-PWBuvjdeBWN4dbNRMPhXJ_n0xnxvO.; " \
31                  "isg=BJ2drKVLn8Ww-Ht9N195VKUWrHmXutEMHpgqKF9iKfRAFrxIJAhD3DbMRAoQ1unE"
32         cookies = {}
33         # 提取鍵值對 請求頭中攜帶cookie必須是一個字典,所以要把原生的cookie字元串轉換成cookie字典
34         for cookie in cookie.split(';'):
35             key, value = cookie.split("=", 1)
36             cookies[key] = value
37         yield scrapy.Request(url=url, cookies=cookies, callback=self.parse)
38 
39     def parse(self, response):
40         print(response.text)

響應信息如下(部分片段):

 

 很明顯這是自己購物車的真實源代碼。

好了,大功告成啦,接下來就可以按照業務需求用xpath(自己喜歡用這種方式)提取自己想要的信息了。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 前言 前面《Springboot整合MongoDB的Docker開發,其它應用也類似》講解瞭如何做Docker開發、如何把Springboot應用打包成一個鏡像,但它是手動的,本文將講解如何通過maven一鍵打包部署。 2 兩個maven插件搞定 可以使用maven插件實現一鍵部署,這兩個插件還 ...
  • 項目描述 Hi,大家好,今天分享的項目是《學生選課系統》,本系統有三種角色,分別為管理員、老師、學生。每種角色可以登錄系統,操作的功能也不一樣。總體功能模塊如下: 個人信息管理 學生信息管理 課程排名 學生成績分析 課表顯示 學生選課 成績查詢 技術棧 Servlet+JSP+JDBC 運行環境 M ...
  • 編寫一個程式,讀人10 個數並且顯示互不相同的數(即一個數出現多次,但僅顯示一次)。(提示,讀人一個數,如果它是一個新數,則將它存儲在數組中。如果該數已經在數組中,則忽略它。)輸入之後,數組包含的都是不同的數。下麵是這個程式的運行示例: Write a program that reads in t ...
  • 一、python解釋器安裝 參考視頻 : https://www.bilibili.com/video/BV1Xz4y1Q7bZ ps: 註意設置環境變數(文件是操作系統的概念,操作系統優先在當前文件夾找,找不到就到環境變數path找) python解釋器不相容 解釋器下載官網:python.org ...
  • thinkphp&laravel&swoft 三個框架的目錄設計: 首先來看下三者根目錄下,有哪些目錄: 一眼望去,根目錄下的文件數量,laravel7(10) > thinkphp6(8)= swoft2(8),直觀上看,三者的複雜程度似乎成正比。 功能的多樣性似乎也成正比。 如果我們將目錄結構理 ...
  • 中國象棋是起源於中國的一種棋,屬於二人對抗性游戲的一種,在中國有著悠久的歷史。由於用具簡單,趣味性強,成為流行極為廣泛的棋藝活動。 它是中國棋文化,也是中華民族的文化瑰寶,它源遠流長,趣味濃厚,基本規則簡明易懂。中國象棋在中國的群眾中基礎遠遠超過圍棋,是普及最廣的棋類項目,中國象棋已流傳到十幾個國家 ...
  • // 1、讀取配置文件 /** * 讀取配置文件的方式 * 1、絕對路徑:從磁碟位置讀取配置文件,如:F:/mybatis/mybatis-config.xml,缺點可能別的機器沒有F盤 * 2、相對路徑:相對路徑從項目的src目錄下開始,如:src/main/mybatis.xml,缺點:如果項目 ...
  • 一、數組概念 可以將多個同一數據類型的數據,存儲到同一個容器中 1. 格式 數據類型[] 數組名=new 數據類型[元素個數] "數據類型"表示該數組中可以存放哪一類型的數據 "[]" 表示當前變數的數據類型為數組類型 "元素個數" 限制了當前數組中可以存放的數據個數 創建數組時,java系統自動設 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...