scrapy框架携带cookie访问淘宝购物车功能的实现代码


Posted in Python onJuly 07, 2020

scrapy框架简介

  • Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛
  • 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便

scrapy架构图

scrapy框架携带cookie访问淘宝购物车功能的实现代码

  • crapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。
  • Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
  • Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,
  • Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),
  • Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.
  • Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。
  • Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)

scrapy框架携带cookie访问淘宝购物车功能的实现代码

正文开始

我们知道,有的网页必须要登录才能访问其内容。scrapy登录的实现一般就三种方式。

1.在第一次请求中直接携带用户名和密码。

2.必须要访问一次目标地址,服务器返回一些参数,例如验证码,一些特定的加密字符串等,自己通过相应手段分析与提取,第二次请求时带上这些参数即可。可以参考https://3water.com/article/190242.htm

3.不必花里胡哨,直接手动登录成功,然后提取出cookie,加入到访问头中即可。

本文以第三种为例,实现scrapy携带cookie访问购物车。

1.先手动登录自己的淘宝账号,从中提取出cookie,如下图中所示。

scrapy框架携带cookie访问淘宝购物车功能的实现代码

2.cmd中workon自己的虚拟环境,创建项目 (scrapy startproject taobao)

3.pycharm打开项目目录 ,在terminal中输入(scrapy genspider itaobao taobao.com),得到如下的目录结构

scrapy框架携带cookie访问淘宝购物车功能的实现代码

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)

响应回来信息如下

scrapy框架携带cookie访问淘宝购物车功能的实现代码

明显是跳转到登录页面的意思。

6.言归正传,正确的代码如下,需要重写start_requests()方法,此方法可以返回一个请求给爬虫的起始网站,这个返回的请求相当于start_urls,start_requests()返回的请求会替代start_urls里的请求。

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']
 # 需要重写start_requests方法
 def start_requests(self):
  url = "https://cart.taobao.com/cart.htm?spm=a1z02.1.a2109.d1000367.OOeipq&nekot=1470211439694"
  # 此处的cookie为手动登录后从浏览器粘贴下来的值
  cookie = "thw=cn; cookie2=16b0fe13709f2a71dc06ab1f15dcc97b; _tb_token_=fe3431e5fe755;" \
     " _samesite_flag_=true; ubn=p; ucn=center; t=538b39347231f03177d588275aba0e2f;" \
     " tk_trace=oTRxOWSBNwn9dPyorMJE%2FoPdY8zfvmw%2Fq5hoqmmiKd74AJ%2Bt%2FNCZ%" \
     "2FSIX9GYWSRq4bvicaWHhDMtcR6rWsf0P6XW5ZT%2FgUec9VF0Ei7JzUpsghuwA4cBMNO9EHkGK53r%" \
     "2Bb%2BiCEx98Frg5tzE52811c%2BnDmTNlzc2ZBkbOpdYbzZUDLaBYyN9rEdp9BVnFGP1qVAAtbsnj35zfBVfe09E%" \
     "2BvRfUU823q7j4IVyan1lagxILINo%2F%2FZK6omHvvHqA4cu2IaVAhy5MzzodyJhmXmOpBiz9Pg%3D%3D; " \
     "cna=5c3zFvLEEkkCAW8SYSQ2GkGo; sgcookie=E3EkJ6LRpL%2FFRZIBoXfnf; unb=578051633; " \
     "uc3=id2=Vvl%2F7ZJ%2BJYNu&nk2=r7kpR6Vbl9KdZe14&lg2=URm48syIIVrSKA%3D%3D&vt3=F8dBxGJsy36E3EwQ%2BuQ%3D;" \
     " csg=c99a3c3d; lgc=%5Cu5929%5Cu4ED9%5Cu8349%5Cu5929%5Cu4ED9%5Cu8349; cookie17=Vvl%2F7ZJ%2BJYNu;" \
     " dnk=%5Cu5929%5Cu4ED9%5Cu8349%5Cu5929%5Cu4ED9%5Cu8349; skt=4257a8fa00b349a7; existShop=MTU5MzQ0MDI0MQ%3D%3D;" \
     " uc4=nk4=0%40rVtT67i5o9%2Bt%2BQFc65xFQrUP0rGVA%2Fs%3D&id4=0%40VH93OXG6vzHVZgTpjCrALOFhU4I%3D;" \
     " tracknick=%5Cu5929%5Cu4ED9%5Cu8349%5Cu5929%5Cu4ED9%5Cu8349; _cc_=W5iHLLyFfA%3D%3D; " \
     "_l_g_=Ug%3D%3D; sg=%E8%8D%893d; _nk_=%5Cu5929%5Cu4ED9%5Cu8349%5Cu5929%5Cu4ED9%5Cu8349;" \
     " cookie1=VAmiexC8JqC30wy9Q29G2%2FMPHkz4fpVNRQwNz77cpe8%3D; tfstk=cddPBI0-Kbhyfq5IB_1FRmwX4zaRClfA" \
     "_qSREdGTI7eLP5PGXU5c-kQm2zd2HGhcE; mt=ci=8_1; v=0; uc1=cookie21=VFC%2FuZ9ainBZ&cookie15=VFC%2FuZ9ayeYq2g%3D%3D&cookie" \
     "16=WqG3DMC9UpAPBHGz5QBErFxlCA%3D%3D&existShop=false&pas=0&cookie14=UoTV75eLMpKbpQ%3D%3D&cart_m=0;" \
     " _m_h5_tk=cbe3780ec220a82fe10e066b8184d23f_1593451560729; _m_h5_tk_enc=c332ce89f09d49c68e13db9d906c8fa3; " \
     "l=eBxAcQbPQHureJEzBO5aourza7796IRb8sPzaNbMiInca6MC1hQ0PNQD5j-MRdtjgtChRe-PWBuvjdeBWN4dbNRMPhXJ_n0xnxvO.; " \
     "isg=BJ2drKVLn8Ww-Ht9N195VKUWrHmXutEMHpgqKF9iKfRAFrxIJAhD3DbMRAoQ1unE"
  cookies = {}
  # 提取键值对 请求头中携带cookie必须是一个字典,所以要把原生的cookie字符串转换成cookie字典
  for cookie in cookie.split(';'):
   key, value = cookie.split("=", 1)
   cookies[key] = value
  yield scrapy.Request(url=url, cookies=cookies, callback=self.parse)
 def parse(self, response):
  print(response.text)

响应信息如下(部分片段):

scrapy框架携带cookie访问淘宝购物车功能的实现代码

很明显这是自己购物车的真实源代码。

好了,大功告成啦,接下来就可以按照业务需求用xpath(自己喜欢用这种方式)提取自己想要的信息了。

总结

到此这篇关于scrapy框架携带cookie访问淘宝购物车的文章就介绍到这了,更多相关scrapy框架cookie内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python编程中的异常处理教程
Aug 21 Python
在Python中使用AOP实现Redis缓存示例
Jul 11 Python
Python+tkinter使用40行代码实现计算器功能
Jan 30 Python
python 日志增量抓取实现方法
Apr 28 Python
Python numpy数组转置与轴变换
Nov 15 Python
Python找出列表中出现次数最多的元素三种方式
Feb 24 Python
Python 自由定制表格的实现示例
Mar 20 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
Jul 14 Python
Django-Scrapy生成后端json接口的方法示例
Oct 06 Python
python批量更改目录名/文件名的方法
Apr 18 Python
python使用matplotlib绘制图片时x轴的刻度处理
Aug 30 Python
利用python实时刷新基金估值(摸鱼小工具)
Sep 15 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
Jul 07 #Python
浅谈django框架集成swagger以及自定义参数问题
Jul 07 #Python
Django REST Swagger实现指定api参数
Jul 07 #Python
python中查看.db文件中表格的名字及表格中的字段操作
Jul 07 #Python
python db类用法说明
Jul 07 #Python
python文件编写好后如何实践
Jul 07 #Python
python 删除excel表格重复行,数据预处理操作
Jul 06 #Python
You might like
PHP 压缩文件夹的类代码
2009/11/05 PHP
PHP中设置时区方法小结
2012/06/03 PHP
删除html标签得到纯文本可处理嵌套的标签
2014/04/28 PHP
PHP下载远程图片并保存到本地方法总结
2016/01/22 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
Dom在ajax技术中的作用说明
2010/10/25 Javascript
创建公共调用 jQuery Ajax 带返回值
2012/08/01 Javascript
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
2013/06/05 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
微信小程序 slider 详解及实例代码
2017/01/10 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
详解vuejs几种不同组件(页面)间传值的方式
2017/06/01 Javascript
react实现点击选中的li高亮的示例代码
2018/05/24 Javascript
vue .sync修饰符的使用详解
2018/06/15 Javascript
微信小程序使用gitee进行版本管理
2018/09/20 Javascript
Vue实现table上下移动功能示例
2019/02/21 Javascript
javascript设计模式 ? 装饰模式原理与应用实例分析
2020/04/14 Javascript
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
Python发送Email方法实例
2014/08/21 Python
Python解析最简单的验证码
2016/01/07 Python
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
在Python中pandas.DataFrame重置索引名称的实例
2018/11/06 Python
python 对一幅灰度图像进行直方图均衡化
2020/10/27 Python
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
String s = new String(“xyz”);创建了几个String Object?
2015/08/05 面试题
《夏夜多美》教学反思
2014/02/17 职场文书
外语系毕业生求职自荐信
2014/04/12 职场文书
个人简历自荐信
2014/06/26 职场文书
2014年药店店长工作总结
2014/11/17 职场文书
MySQL 自定义变量的概念及特点
2021/05/13 MySQL
Netty客户端接入流程NioSocketChannel创建解析
2022/03/25 Java/Android