抓取淘宝网商品信息

项目介绍:

本文主要介绍利用selenium库对动态渲染页面的抓取,并介绍一些反爬的操作,以淘宝网为例。

Selenium简介:

  • Selenium是一个自动化测试工具,利用它可以实现驱动浏览器,模拟人真实的行为,如点击,下拉等操作;
  • 在访问服务器方面,它的安全性是高于requests库的,不需要构造虚拟请求,所有的操作都真实发生;
  • 同时,selenium获取网页信息的方法是基于网页的elements而不是network,即获得当前页面封装后的代码(通常浏览器的network获得服务器的文件是json或html格式,需要解析方才组成elements);
  • Selenium主要解决JavaScript动态渲染页面的数据抓取;
  • Selenium支持多种浏览器,本文以Chrome为例,需要浏览器驱动webdriver,下载地址为:ChromeDriver ,选择对应浏览器的相对应版本进行安装;
  • Selenium版本:3.141.0;官方文档:中文链接

问题描述:

from urllib.parse import quote
from selenium import webdriver
browser=webdriver.Chrome()
browser.maximize_window()
browser.get('https://s.taobao.com/search?q='+quote('iphone'))

在这里插入图片描述

  • 这里是正常情况下使用selenium库中的webdriver去请求淘宝网出现的情况,遇见了输入账号密码的情况,下面以此问题展开介绍解决方式。

解决方案:

修改options属性:

  • webdriver.Chrome()具有多个属性,其中之一为options属性,默认值为None;
  • options属性可以通过Options类来进行赋值,传入到webdriver.Chrome()中,进而改变浏览器的操作方式,下面的代码块即为Options类,它具有很多属性,我们就是通过改变这些属性值来实现网页的请求;
    代码如下(示例):
class Options(object):
    KEY = "goog:chromeOptions"

    def __init__(self):
        self._binary_location = ''
        self._arguments = []
        self._extension_files = []
        self._extensions = []
        self._experimental_options = {}
        self._debugger_address = None
        self._caps = DesiredCapabilities.CHROME.copy()

具体操作如下:

  1. 通过self._arguments = []属性,在本地创建一个Chrome配置目录,这样做的原因是因为:创建一个新的目录就不会影响源目录,其次如果我们用已经添加这个属性的webdriver.Chrome()会记录我们之前的信息,如登陆的账号密码等,这样就可以解决登陆问题而不会出现登陆弹窗;
    代码如下(示例):
option.add_argument('--user-data-dir=~/code/chrome-test')

–user-data-dir是配置文件变量名,~/code/chrome-test是放入配置文件的目录,这个目录是自己指定,自己选择,读者根据自己的系统和预存路径自行选择;
如果你已经运行了,并且登陆了淘宝网的账号,运行代码,进行了前几次访问可能会正常,但是之后就会出现了下图的问题

在这里插入图片描述

  1. 我们可以再次配置self._arguments = []属性,修改我们的请求头即‘–user-agent’,这里的请求头可以从自己的Google浏览器里去查找,在地址搜索栏中输入chrome://version/,获取自己的Chrome的配置信息,得到自己的–user-agent;
    代码如下(示例):
option.add_argument('--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36')
  1. 为了安全起见,我们再把chorme的头部的自动化检测信息消除掉,因为往往大多的反爬虫机制都是检测此信息(如下图所示);

消除此图
代码如下(示例):

option.add_argument("--disable-blink-features=AutomationControlled")
option.add_experimental_option("excludeSwitches", ["enable-automation"])
option.add_experimental_option('useAutomationExtension', False)
  1. 改变以上属性后,则可以呈现出淘宝商品页面如下;

在这里插入图片描述

整体代码如下(示例)::

from selenium.webdriver.chrome.options import Options
option = Options()
option.add_extension("/Users/sunsky/Desktop/Crawler/ScrapyTools/mcbpblocgmgfnpjjppndjkmgjaogfceg/take-webpage-screenshots.crx")
option.add_experimental_option("excludeSwitches", ["enable-automation"])
option.add_experimental_option('useAutomationExtension', False)
option.add_argument("--disable-blink-features=AutomationControlled")
option.add_argument('--user-data-dir=~/code/chrome-test')
option.add_argument('--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36')
browser=webdriver.Chrome(options=option)

我们已经建立好可以请求淘宝页面的webdriver对象,所以下面可以按照正常的爬虫流程进行操作;


数据抓取:

未完待续!!!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值