我从来没想过淘宝天猫的反扒机制这么强,随着学习的推进,我用上了selenium,开始爬取这些网站,然后我输很彻底,下面我讲一下我失败的最后倔强!

果然学习不会顺水成舟,该碰壁还是得碰壁,我拿着18年的书籍来学习,哪个时候他们可以随意爬取这些网站,而现在反扒机制真的强哎。搞了整整四天,尝试各种方法,很多说可以改chromeDriver.exe这个的,还有的绕开方式,微博登入啥的,其实我都试过了。。。或许哪个时候有用,但是现在真的没用了,我真的不知道用啥方法来搞了,一脸委屈,然后经过我的最后顽强,我还是抓到了仅仅一页的数据,心中有一点点的欣慰。

前言

本次测试最开始从淘宝,然后到天猫,然后到拼多多,权衡最终还是选择了天猫 --------->(淘宝第一页就得登入, 拼多多没有网页版,别说出去哈)

使用了我最近才学的selenium自动化技术,能达到可见就可爬的效果,非常的震惊啊! 有解释的不好地方的话,见谅见谅哈。

一页成果:

最后的一点点倔强!

实战技术:

函数库:

表示从来没见过这么多函数库的我,一下子也是蒙蔽了。对着书本一个个的敲出来,生怕打错了一个 =。 =

获得一页的真实源代码:

网址如下: https://list.tmall.com/search_product.htm?q=iphoneXR

这里的关键词 iphoneXR 待会得用函数表示,不然可能乱码,网页识别不了

函数功能: 获得源代码,然后判断页码,如果是第二页或者其他页数,那我们就进行翻页操作,然后继续获得该页源代码,将源代码传给其他函数,

函数实现: 使用selenium根据xpath进行定位,这里使用到了显性等待unit的使用方法,这也是我在书上看到的一种,刚接触把我蒙了,不过,我代码中解释的很清楚。

图示: 定位这几处,我是通过xpath定位的,不会书上的css定位。

代码如下:

def index_page(page):

"""

抓取索取页源代码

param: page 页码

如果page大于1 那么就进行翻页操作

"""

print(f'正在抓取关键词为{KEYWORD} 的 {page} 页')

try:

url = 'https://list.tmall.com/search_product.htm?q=' + quote(KEYWORD)

browser.get(url)

# print(browser.page_source) 此处ok

if page > 1: # 进行翻页操作

inp = wait.until(

EC.presence_of_element_located((By.XPATH, '//*[@id="content"]/div/div[8]/div/b[2]/form/input[6]')))

submit = wait.until(

EC.element_to_be_clickable((By.XPATH, '//*[@id="content"]/div/div[8]/div/b[2]/form/button')))

inp.clear() # 清空

inp.send_keys(page) # 输出页码

time.sleep(1)

submit.click()

# 某个节点文本是否包含某文字 判断当前高亮页码数是不是跳转页码数

wait.until(EC.text_to_be_present_in_element((By.XPATH, '//*[@id="content"]/div/div[8]/div/b[1]/b[2]'),

str(page)))

# 判断商品是否全部加载出来 节点加载出来,传入定位元组

wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="J_ItemList"]//div')))

get_product() # 调用

except TimeoutException: # 如果超时 重新访问

index_page(page)

获得该页的需求数据:

比如这张图: 我想获得图片,价格,名称,店铺,还有销售额,但是这是一个产品呀,要想获得该页所有产品,我们就得先定位总产品,思路是这样的。

就是我箭头所指的位置,我们这样定位:就可以获得所有的产品了,打开这个树节点,就可以看到每个产品的节点。那下面就是编写对于的数据的xpath语法了。

roducts = html.xpath('//*[@id="J_ItemList"]//div') # 定位总产品

代码如下:

def get_product():

"""

根据传来的网页源代码

进行数据的解析

param : None

"""

product = []

html = browser.page_source # 获得该页的真实源代码

html = etree.HTML(html)

html = etree.tostring(html)

html = etree.fromstring(html)

products = html.xpath('//*[@id="J_ItemList"]//div') # 定位总产品

for item in products:

img = item.xpath('//div[@class="product-iWrap"]/div[@class="productImg-wrap"]/a/img/@src')

price = item.xpath('//div[@class="product-iWrap"]/p[@class="productPrice"]/em/text()')

title = item.xpath('//div[@class="product-iWrap"]/p[@class="productTitle"]/a/text()')

shop = item.xpath('//div[@class="product-iWrap"]/div[@class="productShop"]/a[@class="productShop-name"]/text()')

buy = item.xpath('//div[@class="product-iWrap"]/p[@class="productStatus"]/span/em/text()')

for i, j in enumerate(img):

product_item = {

'img': j,

'title': title[i],

'price': price[i],

'shop': shop[i],

'buy': buy[i]

}

product.append(product_item)

save_prduct(product) # 保存

保存该页数据:

我使用的是csv表格的保存,对于数据库来说,因为我还没学过,但是我计划过一段时间学习数据库。

简单的cvs表格的录入实例:

def save_prduct(product):

"""

根据抓取的信息 按照条数保存

param: None

"""

header = ['img', 'title', 'price', 'shop', 'buy']

with open('天猫' + KEYWORD + '数据.csv', 'a+', newline='') as fw:

fw_write = csv.DictWriter(fw, header)

fw_write.writeheader() # 写入表头

fw_write.writerows(product)

print('数据保存成功一次!')

主函数:

"""基本设置 和 关键词"""

# browser = webdriver.Chrome(chrome_options=chrome_options)

browser = webdriver.Chrome()

wait = WebDriverWait(browser, 30) # 设置显性时间

KEYWORD = 'iphoneXR'

if __name__ == '__main__':

"""遍历每一页"""

for i in range(1, 3):

index_page(i)

browser.close()

后记:

对于爬虫来说,其实我也是在学习中,我不是很聪明,但是我很认真的会做笔记,我也会骚扰别人,寻求我不会的东西,挺感谢他们的,这是我的学习方法。

还有一点,请问有没有大佬能指导我一下,这个淘宝和天猫,我到底要怎么爬! 我真的没办法了。

若看到这里,请点个关注和赞,你我一起加油!

原文链接:https://blog.csdn.net/qq_45906219/article/details/106121233

python爬虫淘宝和天猫的区别_荐真实难过,当python爬虫对上淘宝和天猫,我又失败了!...相关推荐

  1. python数组和函数的区别_真假美猴王-Numpy数据与Python数组的区别与联系!

    Numpy,是python中的一个矩阵计算包,功能类似matlab的矩阵计算.Numpy的诞生弥补了下面提到的两项的不足,numpy提供了两种基本的对象:ndarray(N-dimensional a ...

  2. python数据抓取技术与实战训练_师傅带徒弟学Python:项目实战1:网络爬虫与抓取股票数据...

    本视频基于**Python 3.X版本 本视频课程是第四篇第一个实战项目,内容包括网络爬虫技术.使用urllib爬取数据.使用Selenium爬取数据.使用正则表达式.使用BeautifulSoup库 ...

  3. python开发环境和运行环境的区别_Python 初学者必知:Python 运行与开发环境

    http://codingdao.com/wp/post/py-must-know-run-dev-env/ Python 初学者必知:Python 运行与开发环境 2011年2月11日 Breake ...

  4. 风变编程python第一关脸黑怪我喽_风变编程:Python适合编程初学者学习吗?

    来源标题:风变编程:Python适合编程初学者学习吗? 据百度大数据统计每月有4260705的用户在百度检索Python相关介绍,在大众周围,也总是充斥着各种如何学习Python的声音,许多人已经对于 ...

  5. python有什么特点有什么应用方向_你知道吗?python特点+可以做什么+就业前景(附30G学习资料)...

    前言 互联网浪潮来袭,人们已经进入数字化时代,科技的进步离不开一批批程序员的创意Idea,如果说过去一年编程语言界最流行的语言是什么,毫无疑问python首当其冲.如果你经常关注互联网相关新闻,你会看 ...

  6. python c++情侣网名是什么意思_网友:c++与Python,究竟谁才是大哥?

    一直以来,在 TIOBE 编程语言排行榜中,简单易用的新贵 Python 和老将 C++ 是强劲的竞争对手,不过 C++ 和 Python 都是非常流行的编程语言,对于开发者而言,在选择语言利器时究竟 ...

  7. python的控件text的文本属性_只需6行Python代码就给图片加上水印——你一看就会了...

    大家在做项目开发的过程中,会不会经常遇到需要处理图片却没有快速有效的工具的情况呢?比如客户需要给图片加上水印,你可能会用到PS这些高级软件去处理,这样虽然有效果但是需要相对较长的时间:作为程序猿,你一 ...

  8. python装饰器带参数函数二阶导数公式_一文搞定Python装饰器,看完面试不再慌

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第12篇文章,我们来看看Python装饰器. 一段囧事 差不多五年前面试的时候,我就领教过它的重要性.那时候我Pyt ...

  9. 为什么要学python语言、学完有什么好处_学编程为什么首选Python?学完Python的优势有哪些?...

    原标题:学编程为什么首选Python?学完Python的优势有哪些? Python 是一门更注重可读性和效率的语言,尤其是相较于 Java,PHP 以及 C++ 这样的语言,它的这两个优势让其在开发者 ...

最新文章

  1. html中,纯数字或纯英文的一串字符超出父容器不会折行显示,如何解决?
  2. Object.defineProperty()方法的用法详解
  3. aws iot 连接时间_AWS IoT Core 定价
  4. 人口预测和阻尼-增长模型_使用分类模型预测利率-第3部分
  5. 童年各大名场面~ | 今日最佳
  6. remoteing2
  7. CSDN中markdown字体颜色,大小,首行缩进,居中排布
  8. 学习C# 3.0语法笔记(1)
  9. 漏洞10年深藏不露,PHP 项目依赖关系管理工具Composer安全吗?
  10. git 查看修改明细_git查看某个文件的修改历史
  11. 计算机系统的工作方式,计算机的操作系统与工作方式
  12. 哈理工OJ 1795 发现王国之旅(最小生成树)
  13. IIS应用程序池自动停止,报503错误解决方法
  14. 全球消费精品消博会亮相!科蒂、资生堂、欧莱雅、奔富、保乐力加、红牛、雀巢、拜耳、澳佳宝都来了 | 美通社头条...
  15. 【U3D小游戏】愤怒的小鸟(三)猪的相关
  16. 纯电小型领军者 奇瑞无界Pro
  17. 在Vue中使用 createjs
  18. 现代人遇到鸿蒙碎片,原来我是盖世奶爸-第126章 虚空之门是鸿蒙鼎碎片?
  19. 亚洲第六家乐高品牌旗舰店将在广州开业;趣链科技成为区块链独角兽企业;KPS将收购欧洲最大金属包装企业之一 | 美通企业周刊...
  20. 我的奇思妙想机器人消防员_我是小小消防员~来啊~斗图啊~看一场奇思妙想SHOW!...

热门文章

  1. ESPCN论文阅读笔记
  2. crc32库 qt_QT实现CRC16校验(查表法)
  3. 【综述阅读】Pre-trained Language Models for Text Generation: A Survey
  4. Bugly升级SDK适配Android N
  5. 怎么在markdown中使用上标、下标?
  6. Python案例: 采集糖豆网站的数据内容
  7. 破解非完美信息场景应用,微软公布专业十段麻将AI技术细节
  8. 江西师范大学计算机信息工程学院研究生,2021年江西师范大学计算机信息工程学院考研专业目录_研究生考试范围 - 学途吧...
  9. 赋truncate权限mysql_权限管理
  10. 古月居ros课件_古月居ROS入门21讲学习笔记(基础概述1-5课)