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

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

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

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

方式一:(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、这样子就可以提取到了淘宝的网页商品信息了,还有就是需要提取每一个商品的总页数,之后使用一个循环直接遍历全部的页面就可以了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115140.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux top 指定进程_linux top 排序

    linux top 指定进程_linux top 排序top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器第一行,任务队列信息,同uptime命令的执行结果第二行,Tasks—任务(进程)第三行,cpu状态信息第四行,内存状态第五行,swap交换分区信息第六行,空行第七行以下:各进程(任务)的状态监控详解top使用方法:使用格式:top[-][d][p][q][c]…

    2022年9月24日
    4
  • kotlin的Map集合

    kotlin的Map集合kotlin的Map集合只读Map可变的MapmutableMapOfkotlin的Map分为:只读Map。可变的MutableMap(MutableMap、HashMap、LinkedHashMap)。只读Map意味着我们创建出来的map是不可变的,即我们只能使用无法改变我们map中的数据,我们只能获取集合中的数据而无法对集合中的数据进行新增和修改。/***…

    2022年5月18日
    36
  • 指令字长,机器字长,存储字长的关系_指令字长的概念

    指令字长,机器字长,存储字长的关系_指令字长的概念指令字长、存储字长、机器字长、时钟周期、机器周期、指令周期、取址周期、存取周期的关系考研做题途中遇到这些问题,发现自己掌握的很模糊,遂写下此篇,加深记忆。1、机器字长、存储字长、指令字长机器字长:CPU一次能够处理的数据的位数。通常等于寄存器的位数。例子:windows64位/32位,这里的64位和32位指的就是该操作系统的机器字长。存储字长:计算机存储器中一个存储单元可以存储的位数。例子:某某计算机按照字节编址,即说明该计算机的存储字长为1B=8位。指令字长:计算机内一条指令的位数。这里通常指

    2022年8月31日
    3
  • golang2020激活码【在线破解激活】

    golang2020激活码【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    58
  • 区块链体验的几点建议,CIC共识网络让保险操作更智能

    区块链体验的几点建议,CIC共识网络让保险操作更智能自从双持了iOS和Android之后,就开始了CIC共识网络App在不同平台的玩耍,使用了一段时间之后,掰扯掰扯下自己的使用体验。1、先说下邀请安装体验,邀请人分别网址邀请和二维码邀请,就CIC的邀请方式有2种,比较全面。但根据本人使用的多款区块链APP来看,目前CIC的邀请不论是网址邀请,还是二维码邀请,广告词内容和二维码界面基本没什么特色,只是平白的介绍而已。一是广告词缺乏吸引客户主动注册的文…

    2022年5月28日
    38
  • 大数据管理与分析技术(1)[通俗易懂]

    大数据管理与分析技术(1)[通俗易懂]一、大数据的基本概念摘要:大数据基本概念考点:大数据的4V特征、类型(结构化与非结构化大数据)、核心技术(分布式存储和分布式处理)、大数据计算模式(批处理计算、流计算、图计算、查询分析计算)、每类计算模式典型的代表产品。大数据的4V特征规模性(volume)、多样性(variety)、价值密度(value)和高速性(velocity)大数据的类型结构化大数据:能够用数据或统一的结构加以表示的,如数字、符号。传统的关系数据模型,行数据,存储于数据库,可用二维表结构表示。非结构化大数据:是指其字段

    2022年5月1日
    66

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号