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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c0000005 access_violation_0X0000005

    c0000005 access_violation_0X00000050xC0000005:AccessViolation-vc++6.0aps001,002,003创建的C:\SMW200DATA\DATA,内容是不一样的,不通用的。读取相关文件就会报错咯。如果想要运行,则目录内容得删除。然要运行时,自动创建。每台设备已经有了数据时,需要先备份C:\SMW200DATA\DATA里面的内容。否则数据丢失。参考:https://blog.csd…

    2022年10月3日
    2
  • clientWidth offsetWidth innerWidth 区别(窗口尺寸 汇总)「建议收藏」

    clientWidth offsetWidth innerWidth 区别(窗口尺寸 汇总)「建议收藏」原文链接:http://www.cnblogs.com/youxin/archive/2012/09/21/2697514.htmlscrollWidth 是对象的实际内容的宽,不包边线宽度,会随对象中内容的多少改变(内容多了可能会改变对象的实际宽度)。 clientWidth 是对象可见的宽度,不包滚动条等边线,会随窗口的显示大小改变。 offsetWidth 是对象的可

    2022年7月22日
    13
  • faster rcnn 详解

    faster rcnn 详解

    2021年6月13日
    174
  • 查看linux系统版本centos,CentOS下查看系统版本的4种方法

    查看linux系统版本centos,CentOS下查看系统版本的4种方法Linux有很多的发行版,不同的版本会有一些细微区别,所以经常需要查看服务器系统的版本号。下面来看下CentOS下如何查看CentOS版本。方法1:cat/etc/issue执行命令:[www@pythontab.com]$cat/etc/issueCentOSrelease6.8(Final)Kernelonanm我当前系统版本就是:CentOS6.8知识扩展:etc目录…

    2022年6月24日
    29
  • 在 LaTeX 中插入图片「建议收藏」

    在 LaTeX 中插入图片「建议收藏」在科研论文中,图片是一个非常重要的组成部分。LaTeX提供了许多定制化图片的功能。这篇文章将会介绍如何用最常见的格式插入图片、缩放图片、旋转图片,以及如何在文档中引用这些图片。

    2022年6月5日
    36
  • 概率论 协方差矩阵_方差和均值的性质

    概率论 协方差矩阵_方差和均值的性质http://blog.csdn.net/pipisorry/article/details/48788671要理解协方差矩阵,从以下几个步骤来说期望——>方差——>协方差——>协方差矩阵,这样更能理解它的由来和意义。本文主要讲意义和python里的使用,其实协方差矩阵有很强的实际意义和应用实例,有机会再补充。均值、方差和标准差给定一个含有n个样本的集合,可以得到样本的均值,方差和标准差。…

    2025年7月14日
    5

发表回复

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

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