python爬虫 记录一次爬取淘宝的过程

2023-05-16

淘宝可以说是一个检验爬虫技术是否过关的最强关卡了,下面来打破它吧。

淘宝的所有操作差不多都是在登录的状态下进行的,这时候想要对淘宝进行请求获取信息就必须在登录的状态下进行了。

方式一:(selenium)
使用selenium模块,使用自动化模块进行爬取淘宝,对自己需要的信息进行爬取下来,这是一个很简单的方式,但是这也是一个效率比较低下的爬虫形式。这个简单的自动化爬取形式就不详细讲解了。但是有一个值得注意的点就是登陆的时候,会被检测出内容输入的速度过快,之后弹出一个滑动验证条,需要对验证条进行处理才能够登陆成功。

方式二:(requests)
使用requests模块,对淘宝页面发起请求,但是在发起请求之前就需要携带上淘宝账号的cookies信息,如果没有携带cookies信息,那么对淘宝发起的所有请求都没有任何有用信息返回。

第一步:登录淘宝保存cookies信息,这个只需要登录一次保存cookies信息,那么很长一段时间都可以不会过期了。所以首先写一个简单的代码获取登录之后的cookies信息,这个可以直接使用selenium模块进行登录,保存cookies信息,毕竟发起登录post请求,不好破解淘宝的加密参数。这个简单就不详细讲解了。

第二步:淘宝对于搜索页面的网址请求反爬措施很强,这个可以不考虑,但是在淘宝的首页却有我们想要的一切,这需要在淘宝的首页找到对应的链接,就可以对这个链接发起请求了。

淘宝首页列出了各种产品信息,这需要找到自己需要的产品,点击进去,获取对应的url,这时候就可以进行我们熟悉的环节了(爬虫)。
在这里插入图片描述

第三步:使用第二步中提取到的url(例如:https://s.taobao.com/list?spm=a21bo.2017.201867-links-0.10.5af911d9L2LhUy&q=JK%E5%88%B6%E6%9C%8D&cat=16&style=grid&seller_type=taobao 这是一个女装下的JK制服链接)

  1. 导入需要使用到的模块
import requests            # 发起网络请求
import parsel              # xpath 分析页面
import json                # 读取保存在文件中的cookies信息 
import time              
import re                  # 分析提取页面复杂信息
from requests.cookies import RequestsCookieJar          # 为请求添加从cookies信息
from fake_useragent import UserAgent                    # 设置请求头,可以直接使用浏览器请求头
  1. 读取保存在文件中自己账号的cookies信息:
session = requests.session()     # 创建一个会话
    session.headers = header         # 设置会话请求头
    # 这里对保存在文件中的cookie对象进行提取
    jar = RequestsCookieJar()
    with open("cookies.txt", "r") as f: 
        cookies = json.load(f)
        for cookie in cookies:
            jar.set(cookie['name'], cookie['value'])         # 插入cookies信息

3.检测保存的cookies信息是否过期,使用自己账号的主页面进行检测(主页面url:https://i.taobao.com/my_taobao.htm)

def main():
    #  请求自己账号的主页面,测试cookies是否过期,如果过期及时更换
    res = session.get('https://i.taobao.com/my_taobao.htm',cookies=jar)
    time.sleep(3)
    if "自己的账号名称" in res.text:
        print("cookies还是可用的")
        parse()           # 发起商品网页请求

    else:
        print("cookies已经过期,登陆不成功,重新获取")

4.对商品页面发起请求,提取商品信息

def parse():
    res = session.get(url, cookies=jar)  # 使用cookies进行请求网页
    res.encoding = 'UTF-8'
    if res.status_code == 200:
        html = parsel.Selector(res.text)
        contents = html.xpath('//head/script[last()]/text()').extract_first()          # 提取页面的中所有商品信息内容
        contents = re.findall(r'"itemlist":(.*?),"p4p"', contents, re.S)               # 提取有用商品的信息
        if len(contents) != 0:
            content = contents[0][:-1:] + "}"                                          # 构造字典格式
            true = True                 # 特殊关键字的处理
            false = False
            content = eval(content)                                                    # 把字符串格式内容转换为字典
            print(type(content))
            itemlists = content['data']['auctions']                                    # 使用字典提取所有商品信息
            print(type(itemlists))
            print(len(itemlists))
            for item in itemlists:
                print("商品名称:", item['raw_title'])
                print("商品链接:", item['detail_url'])

        else:
            print("length:", len(contents))
            print("没有提取到商品信息,重新分析页面")
    else:
        print("登录失败")

5、这样子就可以提取到了淘宝的网页商品信息了,还有就是需要提取每一个商品的总页数,之后使用一个循环直接遍历全部的页面就可以了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬虫 记录一次爬取淘宝的过程 的相关文章

  • 使用 python 制作本地服务器应用程序的最佳方法

    我想要简单轻松地集成 python 和 vba 人们 如果他们在阅读本文后亲自见到我 阅读本文可能会杀了我 但我正在使用 django 开发服务器来实现此目的 有没有什么简单又好的方法 仅举个例子 我想使用 python 模块 openpy
  • python 可以检测它运行在哪个操作系统下吗?

    python 可以检测操作系统 然后为文件系统构建 if else 语句吗 我需要将 Fn 字符串中的 C CobaltRCX 替换为 FileSys 字符串 import os path csv from time import strf
  • 如何屏蔽 PyTorch 权重参数中的权重?

    我正在尝试在 PyTorch 中屏蔽 强制为零 特定权重值 我试图掩盖的权重是这样定义的def init class LSTM MASK nn Module def init self options inp dim super LSTM
  • 如何自动替换多个文件的文本内容中的字符?

    我有一个文件夹 myfolder包含许多乳胶表 我需要替换其中每个字符 即替换任何minus sign by an en dash 只是为了确定 我们正在替换连字符INSIDE该文件夹中的所有 tex 文件 我不关心 tex 文件名 手动执
  • NLTK、搭配问题:需要解包的值太多(预期为 2)

    我尝试使用 NLTK 检索搭配 但出现错误 我使用内置的古腾堡语料库 I wrote alice nltk corpus gutenberg fileids 7 al nltk corpus gutenberg words alice al
  • 在 python-docx 中搜索和替换

    我有一个包含以下字符串的文档 模板 你好 我的名字是鲍勃 鲍勃是一个很好的名字 我想使用 python docx 打开此文档并使用 查找和替换 方法 如果存在 来更改每个字符串 Bob gt Mark 最后 我想生成一个新文档 其中包含字符
  • VSCode pytest 测试发现失败

    Pytest 测试发现失败 用户界面指出 Test discovery error please check the configuration settings for the tests 输出窗口显示 Test Discovery fa
  • 反加入熊猫

    我有两个表 我想附加它们 以便仅保留表 A 中的所有数据 并且仅在其键唯一时添加表 B 中的数据 键值在表 A 和 B 中是唯一的 但在某些情况下键将出现在表 A 和 B 中 我认为执行此操作的方法将涉及某种过滤联接 反联接 以获取表 B
  • 在wxpython中使用wx.TextCtrl并在按钮单击后显示数据的简单示例 - wx新手

    我正在学习 python 并尝试使用 wxpython 进行 UI 开发 也没有 UI exp 我已经能够创建一个带有面板 按钮和文本输入框的框架 我希望能够在文本框中输入文本 并让程序在单击按钮后对输入框中的文本执行操作 我可以获得一些关
  • 在 Mac 上安装 Pygame 到 Enthought 构建中

    关于在 Mac 上安装 Pygame 有许多未解答的问题 但我将在这里提出我的具体问题并希望得到答案 我在 Mac 上安装 Pygame 时遇到了难以置信的困难 我使用 Enthought 版本 EPD 7 3 2 32 位 它是我的默认框
  • 在 Windows 上使用 IPython 笔记本时出现 500 服务器错误

    我刚刚在 Windows 7 Professional 64 位上全新安装了 IPython 笔记本 我采取的步骤是 从以下位置安装 Python 3 4 1http python org http python org gt pip in
  • Python int 太大,无法放入 SQLite

    我收到错误 OverflowError Python int 太大 无法转换为 SQLite INTEGER 来自以下代码块 该文件约25GB 因此必须分部分读取 length 6128765 Works on partitions of
  • ValueError:无法插入 ID,已存在

    我有这个数据 ID TIME 1 2 1 4 1 2 2 3 我想按以下方式对数据进行分组ID并计算每组的平均时间和规模 ID MEAN TIME COUNT 1 2 67 3 2 3 00 1 如果我运行此代码 则会收到错误 ValueE
  • python中的sys.stdin.fileno()是什么

    如果这是非常基本的或之前已经问过的 我很抱歉 我用谷歌搜索但找不到简单且令人满意的解释 我想知道什么sys stdin fileno is 我在代码中看到了它 但不明白它的作用 这是实际的代码块 fileno sys stdin filen
  • 在pycharm中调试python代码

    这个问题类似于this https stackoverflow com questions 10240018 how to use pycharm to debug python script一 我正在尝试调试pyethapp https
  • CSV 在列中查找最大值并附加新数据

    大约两个小时前 我问了一个关于从网站读取和写入数据的问题 从那时起 我花了最后两个小时试图找到一种方法来从输出的 A 列读取最大日期值 将该值与刷新的网站数据进行比较 并将任何新数据附加到 csv 文件而不覆盖旧的或创建重复项 目前 100
  • Google App Engine 中的自定义身份验证

    有谁知道或知道我可以在哪里学习如何使用 Python 和 Google App Engine 创建自定义身份验证流程 我不想使用 Google 帐户进行身份验证 并且希望能够创建自己的用户 如果不是专门针对 Google App Engin
  • 将 Scikit-Learn OneHotEncoder 与 Pandas DataFrame 结合使用

    我正在尝试使用 Scikit Learn 的 OneHotEncoder 将 Pandas DataFrame 中包含字符串的列替换为 one hot 编码的等效项 我的下面的代码不起作用 from sklearn preprocessin
  • 具有指定置信区间的 Seaborn 条形图

    我想在 Seaborn 条形图上绘制置信区间 但我已经计算出置信区间 如何让 Seaborn 绘制我的置信区间而不是尝试自行计算它们 例如 假设我有以下 pandas DataFrame x pd DataFrame Group 1 0 5
  • 如何识别图形线条

    我有以下格式的路径的 x y 数据 示例仅用于说明 seq p1 p2 0 20 2 3 1 20 2 4 2 20 4 4 3 22 5 5 4 22 5 6 5 23 6 2 6 23 6 3 7 23 6 4 每条路径都有多个点 它们

随机推荐

  • C++码农要读的经典

    刚大四 xff0c 还在忙着找工作 xff0c 读过的书不是很多 xff0c 还有一些好书在读 xff0c 还有一些书将来必读 C语言程序设计 谭浩强版本 这个版本一致被人说误导子弟 xff0c 当然还有很多人推崇 我觉得这本书不是什么好书
  • 进阶训练赛(四)题解

    A 交换a b的值 直接输出b a void solve int a b cin gt gt a gt gt b cout lt lt b lt lt 34 34 lt lt a B 素数回文数的个数 从11 n遍历一遍找出满足即是回文数又
  • AtCoder Beginner Contest 285(A~E)

    A Edge Checker 2 在满二叉树中 xff0c 判断两个两个点是否是父子关系 void solve int a b cin gt gt a gt gt b if b 61 61 2 a b 61 61 2 a 43 1 puts
  • 进阶训练赛(十二)

    目录 问题 A 符文宗师的魔方阵 问题 B APP的成绩单 问题 C 6 1 4 1 最大的节点 问题 D 6 2 2 1 油田 问题 E 6 3 2 1 电话网络 问题 F 7 1 4 1 重型运输 问题 G 打怪兽version 3 问
  • 进阶训练赛(二十)

    目录 问题 A 计算矩阵边缘元素之和 问题 B 图像旋转 问题 C 最长最短单词 问题 D 输出亲朋字符串 问题 E 蓝桥杯2022初赛 李白打酒加强版 1 朴素版dfs 2 dfs 43 记忆化搜索 43 剪枝 问题 F 蓝桥杯2022初
  • 用EditPlus配置MASM汇编

    最开始写汇编程序 xff0c 是打开一个记事本就写 但是记事本不是专门的程序编辑器 xff0c 格式不好控制 xff0c 更容易写错程序 于是想到 xff0c 能有一个简单的文本编辑器 xff0c 能控制好ASM的格式 xff0c 有关键字
  • Codeforces Round #852(A~D)

    比赛原地址 xff1a Dashboard Codeforces Round 852 Div 2 Codeforces A Yet Another Promotion 买a种商品会买m送1 xff0c b种则不会 那么当a种商品单价小于等于
  • 动态联编和静态联编

    基本概念 1 静态联编 xff08 早联编 xff09 xff1a 在程序被编译时进行联编 程序执行快 xff0c 但灵活性较小 2 动态联编 xff08 晚联编 xff0c 滞后联编 xff09 xff1a 编译时无法确定要调用的函数 x
  • 函数重载常见问题

    问题一 cannot bind non const lvalue reference of type 39 Complex amp 39 to an rvalue of type 39 Complex 39 该错误提示出现的原因是 xff0
  • 输入输出流

    iomanip的控制符 resetiosflags long f 关闭由参数f指定的格式标志 xff0c 用于输入输出 setprecision int n 设置数据小数位数 xff0c 缺省时为6 xff0c 用于输入输出 setw in
  • 解决TIME_WAIT过多造成的问题

    看到TIME WAIT状态是在tcp断开链接时产生的 xff0c 因为TCP连接是双向的 xff0c 所以在关闭连接的时候 xff0c 两个方向各自都需要关闭 先发FIN包的一方执行的是主动关闭 xff1b 后发FIN包的一方执行的是被动关
  • linux后台开发常用调试工具

    一 编译阶段 nm 获取二进制文件包含的符号信息 strings 获取二进制文件包含的字符串常量 strip 去除二进制文件包含的符号 readelf 显示目标文件详细信息 objdump 尽可能反汇编出源代码 addr2line 根据地址
  • 将Ubuntu 8.04 Live CD Desktop放在硬盘上启动

    将Ubuntu 8 04 Live CD Desktop放在硬盘上启动 最近下了一个Ubuntu 8 04 Live CD Desktop 镜象文件 xff0c 放在VMWere虚拟机里试用了一下 xff0c 觉的还不错 于是更想把它放在硬
  • 如何在Android项目中使用Kotlin

    本文是作者阅读How to Use Kotlin in Your Android Projects xff0c 按照文章实现了一遍 xff0c 并将实现过程中碰到的坑总结出来的文章 简介 Kotlin是由JetBrains设计的开源编程语言
  • Android中使用log4j、android-logging-log4j-1.0

    Android中使用log4j android logging log4j 1 0 3 1 下载相关资源包 资源包下载路径 xff1a log4j xff1a http logging apache org log4j 1 2 downlo
  • 8G内存机器JVM设置模版

    Xms4096m Xmx4096m Xmn3072m XX MetaspaceSize 61 256m XX MaxMetaspaceSize 61 256m XX 43 UseParNewGC XX 43 UseConcMarkSweep
  • Java文件名及其他命名规则

    http bbs csdn net topics 70157841 关于JAVA 源文件命名的问题 Java文件命名 xff1a java程序是由类组成的 xff1b java应用程序必须有一个包含main方法的public类 xff0c
  • gdb+gdbserver调试详解

    1 gdb 43 gdbserver总体介绍 远程调试环境由宿主机GDB和目标机调试stub共同构成 xff0c 两者通过串口或TCP连接 使用 GDB标准串行协议协同工作 xff0c 实现对目标机上的系统内核和上层应用的监控和调试功能 调
  • TCP连接状态详解及TIME_WAIT过多的解决方法

    上图对排除和定位网络或系统故障时大有帮助 xff0c 但是怎样牢牢地将这张图刻在脑中呢 xff1f 那么你就一定要对这张图的每一个状态 xff0c 及转换的过程有深刻地认识 xff0c 不能只停留在一知半解之中 下面对这张图的11种状态详细
  • python爬虫 记录一次爬取淘宝的过程

    淘宝可以说是一个检验爬虫技术是否过关的最强关卡了 xff0c 下面来打破它吧 淘宝的所有操作差不多都是在登录的状态下进行的 xff0c 这时候想要对淘宝进行请求获取信息就必须在登录的状态下进行了 方式一 xff1a xff08 seleni