优化淘宝商品比价定向爬虫--爬虫的浏览器伪装

2023-05-16

目录

  • 一、 原代码问题
  • 二、淘宝Robots协议
  • 三、User-Agent
  • 四、查找headers和cookie
  • 五、 完整代码

一、 原代码问题

  • 爬取不到任何内容处理
  • 原因:由于淘宝的设置,虽然可以requests爬取页面内容,但正则表达式会匹配不到任何内容
  • 解决:替换headers,伪装浏览器向服务器发起请求

二、淘宝Robots协议

  • Robots协议,是国际上搜索引擎对所有网站内容抓取的一个内容协议,通常来说,搜索引擎都必须遵守这个协议,曾经淘宝是禁止百度抓取和收录内容页面的
  • 所以大家在百度上是无法通过搜索关键词和URL找到淘宝店铺和淘宝产品页面的,如今淘宝部分开放百度蜘蛛,这也意味着百度可以遵循OROBOTS协议,对淘宝内容进行排序

详见:https://www.taobao.com/robots.txt

User-agent: Baiduspider
Disallow: /

User-agent: baiduspider
Disallow: /

三、User-Agent

  • User-Agent是http协议中的一部分,属于头域的组成部分
  • 这是一种向范文网站提供你所使用的浏览器类型,操作系统,浏览器内核等信息的标识
  • 通过这个标识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者 进行信息统计
  • Windows NT 10.0 对应操作系统 Windows 10

详见:windows NT的意义和各个版本https://blog.csdn.net/flyingpig2016/article/details/53282895

headers ={ 'User-Agent':user_agent}
User-Agent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}

Chrome版本

Mozilla/5.0AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'

注意以上的User-Agent的作用就是伪装成浏览器修改http包中的header来实现

四、查找headers和cookie

  • 打开抓取的淘宝页面,F12进入开发者工具
  • 选择Network-Name
  • 第一条—HeadersRequest Headers
  • 复制user-agent

在这里插入图片描述

  • 按以下步骤查找到cookie

在这里插入图片描述

五、 完整代码

# CrowTaobaoPrice.py
import requests
import re


def getHTMLText(url):  # 获得网页信息
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}  # 使用浏览器header
    try:
        coo = 't=85db5e7cb0133f23f29f98c7d6955615; cna=3uklFEhvXUoCAd9H6ovaVLTG; isg=BM3NGT0Oqmp6Mg4qfcGPnvDY3-pNqzF2joji8w9SGWTYBu241_taTS6UdFrF3Rk0; miid=983575671563913813; thw=cn; um=535523100CBE37C36EEFF761CFAC96BC4CD04CD48E6631C3112393F438E181DF6B34171FDA66B2C2CD43AD3E795C914C34A100CE538767508DAD6914FD9E61CE; _cc_=W5iHLLyFfA%3D%3D; tg=0; enc=oRI1V9aX5p%2BnPbULesXvnR%2BUwIh9CHIuErw0qljnmbKe0Ecu1Gxwa4C4%2FzONeGVH9StU4Isw64KTx9EHQEhI2g%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; mt=ci=0_0; hibext_instdsigdipv2=1; JSESSIONID=EC33B48CDDBA7F11577AA9FEB44F0DF3'
        cookies = {}  # 上面的,登录淘宝后用开发者工具获取
        for line in coo.split(';'):  # 浏览器伪装
            name, value = line.strip().split('=', 1)
            cookies[name] = value

        r = requests.get(url, cookies=cookies, headers=headers, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""


def parsePage(ilt, html):  # 对所得页面进行解析
    try:
        plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html)
        tlt = re.findall(r'\"raw_title\"\:\".*?\"', html)  # .*?-最小匹配/匹配的内容是商品本身的名字
        for i in range(len(plt)):
            price = eval(plt[i].split(':')[1])  # 通过split方法分割:后面的部分只取价格
            title = eval(tlt[i].split(':')[1])  # eval去掉双引号
            ilt.append([price, title])
    except:
        print("")


def printGoodsList(ilt):  # 将淘宝得商品信息输出到屏幕上
    tplt = "{:4}\t{:8}\t{:16}"  # 规定输出格式
    print(tplt.format("序号", "价格", "商品名称"))
    count = 0
    for g in ilt:
        count = count + 1
        print(tplt.format(count, g[0], g[1]))


def main():
    goods = 'T恤'
    depth = 2  # 要爬取几页
    start_url = 'https://s.taobao.com/search?q=' + goods
    infoList = []
    for i in range(depth):
        try:
            url = start_url + '&s=' + str(44 * i)
            html = getHTMLText(url)
            parsePage(infoList, html)
        except:
            continue
    printGoodsList(infoList)


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

优化淘宝商品比价定向爬虫--爬虫的浏览器伪装 的相关文章

  • 第八章 综合案例——构建DVD租赁商店数据仓库(1)

    一 加载日期数据至日期维度表 操作介绍 xff1a 下面通过Kettle工具加载日期数据至dim date日期维度表 1 打开Kettle工具 xff0c 创建转换 使用Kettle工具 xff0c 创建一个转换load dim date
  • 第八章 综合案例——构建DVD租赁商店数据仓库(2)

    一 加载用户数据至用户维度表 操作介绍 xff1a 通过Kettle工具加载用户数据至用户维度表dim customer 1 打开Kettle工具 xff0c 创建转换load dim customer 使用Kettle工具 xff0c 创
  • C++与python交互库-pybind11的返回值策略 return_value_policy

    pybind11的返回值策略 return value policy 一 返回值策略的必要性二 一个导致crash的例子三 所有的返回值策略的探讨四 补充说明 一 返回值策略的必要性 C 43 43 和python使用根本上就不一样的内存管
  • 第八章 综合案例——构建DVD租赁商店数据仓库(3)

    一 加载演员数据至演员维度表 操作介绍 xff1a 通过Kettle工具加载演员数据至演员维度表dim actor 1 打开Kettle工具 xff0c 创建转换 使用Kettle工具 xff0c 创建一个转换load dim actor
  • 树莓派4b安装python库

    树莓派4b安装python库 树莓派安装好系统后自带的有python2和python3 xff0c 默认是使用python2 xff0c 可以打开树莓派查看 xff1a 输入python 查看默认的python版本 xff1a 我原来默认是
  • SONIC+P4

    SONIC简介 背景 微软于2015年先后发表了SAI和SONIC SONIC产业日益繁荣 xff0c 已超过六十家 创新 SONiC使用了大量现有的开源技术 xff1a Docker Redis Quagga和LLDPD以及自动化配置工具
  • 6.ROS&PX4--Pixhawk无人机+A1激光雷达SLAM部署

    6 ROS amp PX4 无人机A1激光雷达SLAM部署 一 常见2D SLAM算法 Gmapping Hector SLAM Cartographer Gmapping 基于粒子滤波的2D激光雷达SLAM xff0c 构建二维栅格地图
  • Codeblock提示: Can‘t find compiler executable in your configured search path‘s for GNU GCC无法找到编译器

    can t find compiler executable in your configured search path s for GUN GCC Complier的应对办法 今天使用codeblocks 点击Settings Comp
  • Hexo系列 | Hexo安装、启动

    目录 前言 一 Hexo是什么 二 安装node js 三 安装Git 四 检查是否安装成功 五 Hexo安装 启动 前言 用Hexo框架搭建个人博客 xff0c 记录搭建过程 个人博客效果 一 Hexo是什么 Hexo官网 Hexo 是一
  • 【python】python语法糖

    python 语法糖 1 什么是语法糖 x1f36c 语法糖是由编程语言提供的一种可以让我们写出来的代码在不影响语句执行的功能的条件下 xff0c 能够让我们的代码看起来更简洁和美观的一种语法 很多人刚开始接触语法糖的时候 xff0c 总会
  • 因装了python3.6版本导致ubuntu下terminal无法打开

    参考stack overflow xff1a https stackoverflow com questions 61144232 updated to python 3 8 terminal wont open fixed but det
  • E: 无法下载 https://mirrors.tuna.tsinghua.edu.cn/kali/dists/kali-rolling/main/Contents-amd64.gz 文件尺寸不符

    本人是新手 这个问题困扰了我很久 在网上也查了很久 答案千篇一律 我写下我的解决方法 希望对你有帮助 问题 E 无法下载 https mirrors tuna tsinghua edu cn kali dists kali rolling
  • 软件工程知识点总结

    1 软件的本质 1 1 软件是什么 xff1a 软件是能够完成预定功能和性能 xff0c 并对相应数据进行加工的程序和描述程序操作的文档 1 2 软件的特点 软件是设计开发的 xff0c 而不是传统意义上生产制造的软件不会 磨损 虽然整个工
  • C++ lambda表达式如何理解?编译器做了什么

    lambda表达式在C 43 43 11中引入 xff0c 用lambda表达式表示匿名函数非常方便 xff0c 语法很简单 xff0c 而且可以使代码更紧凑 xff0c 更易于阅读 一个例子 xff1a span class token
  • mysql主从复制&读写分离

    文章目录 本文内容前言1 MySQL主从复制1 1 介绍1 2 搭建1 2 1 准备工作1 2 2 主库配置1 2 3 从库配置 1 3 测试 2 读写分离案例2 1 背景介绍2 2 ShardingJDBC介绍2 3 数据库环境2 4 初
  • 输出所有质数

    1 实验目的 了解数字 布尔值 字符串 列表 元组 字典 集合等Python常用的变量类型 熟练掌握运算符 内置函数的用法 熟练掌握元素常用方法 切片和列表推导式 2 实验内容 xff08 一 xff09 输出所有质数 输入一个整数 xff
  • 声音克隆项目实现

    声音克隆 原理介绍 第一个模块 xff1a 收到说话人音频 xff0c 然后转成这样一个低维表征向量speaker embedding xff0c xff08 这个向量富含说话信息 xff09 实现方式 xff1a 由于是无监督学习 xff
  • c语言枚举类型

    定义 在c语言中 xff0c 枚举类型定义用关键字enum标识 xff0c 形式为 xff1a enum 名字 枚举数据表 xff08 用 xff0c 隔开 xff09 xff1b 注意 xff1a xff08 1 xff09 enum是关
  • 交换机二三层协议及其详细解答

    交换机二三层协议及其详细解答 概述二层协议三层协议以太网协议示例代码 CSMA CD协议示例代码 IP协议示例代码 概述 交换机是网络设备的一种 xff0c 主要用于连接多个网络设备 xff0c 以实现网络通信和数据传输 交换机的协议分为两
  • C++ MVC模式

    概述 C 43 43 是一种流行的编程语言 xff0c 它可以用于构建各种类型的应用程序 xff0c 包括Web应用程序 桌面应用程序和移动应用程序 在这里 xff0c 我将为您介绍C 43 43 中的MVC模式 xff0c 以及如何在C

随机推荐

  • C++ 线程操作

    C 43 43 线程操作 概述 线程是 Linux 操作系统中的一种轻量级进程 xff0c 用于实现并发执行 线程可以共享进程的资源 xff0c 包括内存 文件句柄等 在 C 43 43 中 xff0c 线程操作由标准库提供支持 xff0c
  • QT常用类型字节数组QByteArray及其基本使用

    目录 概述特点常见函数QByteArray append xff1a QByteArray insert xff1a QByteArray replace xff1a QByteArray remove xff1a QByteArray t
  • QT图像处理类QImage常见使用方法

    目录 概述加载和保存图像图像缩放和旋转图像灰度化QImage convertToFormat 图像二值化threshold 函数 loadFromData 从内存加载图像拓展 概述 Qt 是一个跨平台的 C 43 43 库 xff0c 提供
  • pytorch卷积神经网络中间特征层可视化

    前言 在我们使用神经网络的过程中 xff0c 经常会好奇中间的网络到底学到了些什么 xff0c 所以常常想用可视化的方法来输出这些特征层 xff0c 所以惊天带大家用一个简易的网络来输出这些特征层 搭建网络 span class token
  • C++11 lambda表达式在回调函数中的使用

    C 43 43 11 lambda表达式在回调函数中的使用 一 lambda表达式在C 43 43 异步框架中的应用1 一个boost asio的例子2 C 43 43 http框架cutelyst在异步执行PostgreSQL数据库sql
  • MySQL知识点总结(一)

    文章目录 前言最左前缀匹配规则Mysql中sql语句执行太慢 xff0c 是什么原因 xff0c 怎么解决 xff0c 用什么命令查看如何查看是否用到索引为啥加了索引会变快判断是否走联合索引总结 前言 本文来介绍数据库啦 最左前缀匹配规则
  • 基于 NCC/灰度信息 的模板匹配算法(QT + Opencv + C++),10ms内获取匹配结果,部分源码

    文后代码 xff0c 优化效果图结尾处 xff0c 最快3ms得到匹配结果 NCC xff0c 全称为Normalized Cross Correlation xff0c 即归一化互相关系数 xff0c 在模板匹配中使用的非常非常广泛 xf
  • 网络应用基础 ——(2023新星计划文章二)

    一 xff0c TCP报头解析 数据打包与解析直观图 xff1a 1 0报文与报文字段 1 0 1 报文 报文是计算机网络中交换信息的基本单位 xff0c 是一种用于在网络中传递数据的结构化数据格式 在网络通信中 xff0c 数据会被封装成
  • ROS中工作空间和功能包的创建以及发布者Publisher的实现

    最近刚刚开始学习ROS xff0c 对于整个ROS的框架和功能正在一点点的了解 xff0c 跟着B站古月居的 ROS入门21讲 课程 xff0c 在安装好linux和ROS后 xff0c 正式开始ROS的学习 xff0c 动手实践敲代码 x
  • Failed to fetch https://mirrors.tuna.tsinghua.edu.cn/ubuntu//dists/bionic/main/binary-arm64/Packages

    在jeston nano执行 sudo apt update 的时候出现下列错误 xff1a Failed to fetch https mirrors tuna tsinghua edu cn ubuntu dists bionic ma
  • 场景设计法

    目录 一 场景设计法 1 理解 二 场景法的基本设计步骤 三 场景设计法需要掌握的基本知识 1 基本流和备选流 2 测试用例组成 四 优缺点 1 优点 2 缺点 五 使用场景 六 注意 七 实例 1 案例 2 分析需求 xff0c 确定基本
  • 【第一章】计算机网络知识点整理

    文章目录 第一章 概述1 1 计算机网络的定义及其特点1 定义2 计算机网络系统的组成3 功能4 七个典型特点 1 2 互联网概述1 internet 和 Internet 的区别2 互联网基础结构发展的三个阶段 1 3 互联网的组成一 边
  • C# 窗体应用常用基础控件讲解(萌新版)

    C 窗体应用常用基础控件讲解 xff08 适合萌新 xff09 前言 博主这篇文章主要讲解C 窗体应用的几个常用的控件 对新手很友好 xff0c 这几个控件在C 窗体应用中用的频率特别高 xff0c 如果你第一次学C 窗体应用 xff0c
  • 【安装】Ubuntu20.04下安装ROS的完整过程(内含已装好ROS的虚拟机、虚拟机创建过程、ROS安装过程及全过程录屏)

    2022 12 20重制 xff0c 精简流程 xff0c 直接去掉网络问题 现成的虚拟机 为方便大家学习 xff0c 如果安装ROS遇到的问题实在太多 xff0c 也可以直接下载我提供给大家的 已经安装好ROS的Ubuntu虚拟机 xff
  • C++和C的区别

    问 xff1a 能说一下C 43 43 和C的区别吗 xff1f 参考 xff1a 可以从设计思想 语法以及内存管理这三方面来说 1 设计思想上 xff1a C 43 43 是面向对象的语言 xff0c 而C是面向过程的结构化编程语言 2
  • 中文分词之最短路径法和N最短路径

    考虑到汉语分词存在切分歧义消除和未登录词识别两个主要问题 xff0c 因此 xff0c 有专家将分词分成两个阶段 xff1a 1 用分词算法进行粗分2 对粗分的最好结果进行歧义消除和未登录词识别 最短路径法是一种自动分词的算法 它将一句话中
  • redis分布式锁的原子保证

    分布式锁的原子保证 背景提出 分布式锁的原子性还能得到保证吗 分布式锁的加锁与解锁命令是什么 所以核心问题到底是什么 客户端的一条命令是如何执行的呢 两个机制是在这个过程的什么阶段发货作用呢 会不会影响命令执行的原子性 IO 多路复用机制多
  • 机器学习 python

    1 用DecisionTreeRegressor 对波士顿房价进行预测 xff1a 1 导入数据 sklearn datasets load boston 2 数据拆分25 作为测试集 sklearn model selection tra
  • MTPuTTY配置ssh连接Gitlab

    目录 一 简介二 生成SSH 密钥三 GitLab添加公钥四 同步本地与原项目 一 简介 远程仓库是指托管在网络上的项目仓库 xff0c 现在互联网上有很多项目托管平台 GitLab是一个利用 Ruby on Rails开发的开源应用程序
  • 优化淘宝商品比价定向爬虫--爬虫的浏览器伪装

    目录 一 原代码问题二 淘宝Robots协议三 User Agent四 查找headers和cookie五 完整代码 一 原代码问题 爬取不到任何内容处理原因 xff1a 由于淘宝的设置 xff0c 虽然可以requests爬取页面内容 x