失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 抓取淘宝网商品信息

抓取淘宝网商品信息

时间:2024-07-05 00:24:53

相关推荐

抓取淘宝网商品信息

项目介绍:

本文主要介绍利用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 quotefrom selenium import webdriverbrowser=webdriver.Chrome()browser.maximize_window()browser.get('/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 = Noneself._caps = DesiredCapabilities.CHROME.copy()

具体操作如下:

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

代码如下(示例):

option.add_argument('--user-data-dir=~/code/chrome-test')

–user-data-dir是配置文件变量名,~/code/chrome-test是放入配置文件的目录,这个目录是自己指定,自己选择,读者根据自己的系统和预存路径自行选择;

如果你已经运行了,并且登陆了淘宝网的账号,运行代码,进行了前几次访问可能会正常,但是之后就会出现了下图的问题

我们可以再次配置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')

为了安全起见,我们再把chorme的头部的自动化检测信息消除掉,因为往往大多的反爬虫机制都是检测此信息(如下图所示);

代码如下(示例):

option.add_argument("--disable-blink-features=AutomationControlled")option.add_experimental_option("excludeSwitches", ["enable-automation"])option.add_experimental_option('useAutomationExtension', False)

改变以上属性后,则可以呈现出淘宝商品页面如下;

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

from selenium.webdriver.chrome.options import Optionsoption = 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对象,所以下面可以按照正常的爬虫流程进行操作;

对Options()对象添加变量(option.add_argument())有很多选择,本文只是列举了一部分,更多的变量添加可以参考:/a//chromedriver/capabilities本文是通过自动化检测工具Selenium进行数据抓取,一般的做法(reques库+解析库)请参考抓取天猫网商品信息

数据抓取:

未完待续!!!

如果觉得《抓取淘宝网商品信息》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。