一、相关知识点

1.1、Selenium

Selenium是一个强大的开源Web功能测试工具系列,可进行读入测试套件、执行测试和记录测试结果,模拟真实用户操作,包括浏览页面、点击链接、输入文字、提交表单、触发鼠标事件等操作,并且能够对页面结果进行种种验证。也就是说,只要在测试用例中把预期的用户行为与结果都描述出来,我们就得到了一个可以自动化运行的功能测试套件。

1.2、ActionChains

Actionchains是selenium里面专门处理鼠标相关的操作如:鼠标移动,鼠标按钮操作,按键和上下文菜单(鼠标右键)交互。这对于做更复杂的动作非常有用,比如悬停和拖放。

1.3、time

返回当前时间的时间戳

1.4、lxml

lxml是一个Python库,使用它可以轻松处理XML和HTML文件,还可以用于web爬取。市面上有很多现成的XML解析器,但是为了获得更好的结果,开发人员有时更愿意编写自己的XML和HTML解析器。这时lxml库就派上用场了。这个库的主要优点是易于使用,在解析大型文档时速度非常快,归档的也非常好,并且提供了简单的转换方法来将数据转换为Python数据类型,从而使文件操作更容易。

1.5、csv

csv文件格式是一种通用的电子表格和数据库导入导出格式。最近我调用RPC处理服务器数据时,经常需要将数据做个存档便使用了这一方便的格式。

1.6、requests

Requests 库是一个优雅而简单的 Python HTTP 库,主要用于发送和处理 HTTP 请求

二、部分代码解析

加载Chrome驱动,动态解析爬取的网址

 #提取公共的爬取信息的apidef commonsdk(self,url):browser = webdriver.Chrome('D:/chromedriver.exe')try:browser.get(url)except Exception as e:browser.execute_script('window.stop()')  # 超出时间则不加载print(e, 'dynamic web load timeout')return browser;

实现模拟登录
通过定位淘宝登陆界面的url的表单框,然后输入自己的用户名及密码,再模拟鼠标点击事件,继而提交表单信息实现用户登录。

#模拟登录def logon(self,url,a_href_list_next):username = "淘宝账户名"password = "密码"browser1 = self.commonsdk(url)#登录账号browser1.find_element_by_id('fm-login-id').send_keys(username)browser1.find_element_by_id('fm-login-password').send_keys(password)#模拟用户点击登录browser1.find_element_by_xpath('//*[@id="login-form"]/div[4]/button').click()#解析商品信息self.Buy_information(a_href_list_next,browser1)

爬取侧边栏目录
1、首先定位到目录分类栏,鼠标光标移动到需要选中的那一栏,继而会出现隐藏的div,(这里需要实现鼠标悬停事件)action.move_to_element(li_list).perform()实现了这一功能。
2、然后定位自己所需要爬取的侧边栏的那一行或多行,通过实现鼠标悬停事件后获取其中内容。
3、获取其超链接进入下一界面

#爬取目录def List(self,url):browser = self.commonsdk(url)#ActionChains类实现鼠标的单击、双击、拖拽等功能action = ActionChains(browser)li_list = browser.find_elements_by_css_selector('.service-bd li')[1]#实现执行鼠标悬停,便于爬取悬停内容action.move_to_element(li_list).perform()time.sleep(5)#爬取整个目录的divdiv_list = browser.find_element_by_css_selector('.service-fi-links')#爬取其中的总的名称h5_list = div_list.find_elements_by_css_selector('h5')#爬取小标题的名称p_list = div_list.find_elements_by_css_selector('p')#获取a标签a_href_list = div_list.find_elements_by_css_selector('a')#获取a标签的超链接a_href_list_next = div_list.find_elements_by_css_selector('a')[1].get_attribute('href')print(li_list.text)for j in range(len(p_list)):if j<len(p_list):print(h5_list[j].text)print(p_list[j].text)for i in range(len(a_href_list)):print(a_href_list[i].get_attribute('href'))#获取登录框logon = browser.find_element_by_id('J_SiteNavBd')#获取登录框的超链接logon_url = logon.find_element_by_css_selector('a').get_attribute('href')#先关闭第一个网页browser.close()self.logon(logon_url,a_href_list_next)

获取商品信息
1、这里使用的定位方式是Xpath方式,使用了绝对定位来获取标签的位置。

#爬取商品信息def Buy_information(self,url,browser):browser.get(url)div_list = browser.find_element_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[1]')img = div_list.find_element_by_css_selector('img')img_url = "https:"+img.get_attribute('data-src')price = div_list.find_element_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[1]/div[2]/div[1]/div[1]').textnumber = div_list.find_element_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[1]/div[2]/div[1]/div[2]').textshoping_information = div_list.find_element_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[1]/div[2]/div[2]').textshop = div_list.find_element_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[1]/div[2]/div[3]/div[1]/a').textadress = div_list.find_element_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[1]/div[2]/div[3]/div[2]').textpath = self.img_baocun(img_url)data={'图片路径':path,'价格':price,'购买人数':number,'商品信息':shoping_information,'商家':shop,'籍贯':adress}self.write_dictionary_to_csv(data,'information')

下载图片
通过获取到的图片的url,然后将图片下载到指定的文件夹内

#下载照片def img_baocun(self,url):root = "文件夹下载的路径"//电脑上的绝对路径path = root + url.split('?')[0].split('/')[-1].strip('')#获取jpg的名称#判断是否存在该路径,不存在则创建if not os.path.exists(root):os.mkdir(root)#判断是否存在该图片,存在则不下载if not os.path.exists(path):r = requests.get(url)r.raise_for_status()with open(path,'wb') as f:f.write(r.content)return path

将需要爬取的信息写入到csv文件中,便于查看
1、商品信息以字典的形式写入csv文件中方便查看。

#将解析得到的内容(字典格式)逐行写入csv文件def write_dictionary_to_csv(self,dict,filename):#格式化文件名file_name='{}.csv'.format(filename)with open(file_name, 'a',encoding='utf-8') as f: file_exists = os.path.isfile(filename)#delimiter(定界符)  w =csv.DictWriter(f, dict.keys(),delimiter=',', quotechar='"', lineterminator='\n',quoting=csv.QUOTE_ALL, skipinitialspace=True)if not file_exists :w.writeheader()w.writerow(dict)print('当前行写入csv成功!')

三、程序思路

1、首先定位到侧边栏的位置,然后使用action.move_to_element(li_list).perform()的方法实现鼠标的动态悬停,让隐藏的div显示出来,再获取其中的信息。
2、然后再实现模拟登录的功能,登录账号,获取其中的商品信息(由于淘宝的反扒机制,多次登录会让用户扫码登录,此功能暂未实现)
3、商品信息的获取使用Xpath的绝对定位方式来获取。

Xpath的使用方式:右键需要定位的标签->选中Copy选项->Copy Xpath

四、发展空间

1、解决淘宝反扒机制的问题。传送门,解决问题
2、文件的写入换用其他方式。

Python 爬取淘宝商品信息栏目相关推荐

  1. Python爬取淘宝商品信息保存到Excel

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  2. 使用python爬取淘宝商品信息

    使用python爬虫爬取淘宝商品信息 使用的模块主要有 selenium ,time , re, from selenium import webdriver import time import c ...

  3. python爬取淘宝商品信息_python爬取淘宝商品信息并加入购物车

    先说一下最终要达到的效果:谷歌浏览器登陆淘宝后,运行python项目,将任意任意淘宝商品的链接传入,并手动选择商品属性,输出其价格与剩余库存,然后选择购买数,自动加入购物车. 在开始爬取淘宝链接之前, ...

  4. python爬取淘宝商品信息并加入购物车

    先说一下最终要达到的效果:谷歌浏览器登陆淘宝后,运行python项目,将任意任意淘宝商品的链接传入,并手动选择商品属性,输出其价格与剩余库存,然后选择购买数,自动加入购物车. 在开始爬取淘宝链接之前, ...

  5. python爬虫——用selenium爬取淘宝商品信息

    python爬虫--用selenium爬取淘宝商品信息 1.附上效果图 2.淘宝网址https://www.taobao.com/ 3.先写好头部 browser = webdriver.Chrome ...

  6. python+scrapy简单爬取淘宝商品信息

    python结合scrapy爬取淘宝商品信息 一.功能说明: 已实现功能: 通过scrapy接入selenium获取淘宝关键字搜索内容下的商品信息. 待扩展功能: 爬取商品中的全部其他商品信息. 二. ...

  7. python淘宝爬虫_python爬虫爬取淘宝商品信息

    本文实例为大家分享了python爬取淘宝商品的具体代码,供大家参考,具体内容如下 import requests as req import re def getHTMLText(url): try: ...

  8. 利用Selenium爬取淘宝商品信息

    文章来源:公众号-智能化IT系统. 一.  Selenium和PhantomJS介绍 Selenium是一个用于Web应用程序测试的工具,Selenium直接运行在浏览器中,就像真正的用户在操作一样. ...

  9. 爬取淘宝商品信息selenium+pyquery+mongodb

    ''' 爬取淘宝商品信息,通过selenium获得渲染后的源码,pyquery解析,mongodb存储 '''from selenium import webdriver from selenium. ...

最新文章

  1. java中普通代码块,构造代码块,静态代码块的区别及代码示例
  2. 简单做了一个sina微博的MVC第三方登陆
  3. javascript中构造函数的返回值问题和new对象的过程
  4. 《javascript高级程序设计》第五章知识点总结
  5. PHP的表单获取与HHTP请求方式
  6. 【CodeForces - 746E】Numbers Exchange(贪心构造)
  7. Linux中的crontab详解
  8. 【JUC】第五章 JUC 阻塞队列、线程池
  9. php 5.6 zend opcache,使用Zend OpCache 提高 PHP 5.5+ 性能
  10. plsql创建、测试存储过程
  11. 一元线性回归的前因后果
  12. html 鼠标经过出现横线,CSS实现鼠标经过,文字下方横线划过特效
  13. linux搭建tht框架,教程 中标麒麟linux硬盘安装图解
  14. 读书笔记:聪明人用方格纸
  15. XHR>>name不显示sug
  16. 如何在linux系统中安装虚拟机?
  17. 智慧水务平台“爱水APP”助力搭建智慧城市
  18. 软件开发项目为什么要做第三方软件测试,软件测评机构怎么选择?
  19. 杰理ac18芯片_杰理AC1074 MP3解码芯片ic方案说明
  20. abaqus应力值导出并进行后处理(同一节点多个应力值如何处理?)

热门文章

  1. java io中断_JDK源码阅读:InterruptibleChannel 与可中断 IO
  2. php如何新建xml文件,PHP中的生成XML文件的4种方法分享
  3. laravel安装laravel-ide-helper扩展进行代码提示(二)
  4. OSPF-5类LSA和4类LSA
  5. Django1.9开发博客06- 模板继承
  6. Android控件第6类——杂项控件
  7. mysql悲观锁总结和实践
  8. Apache cxf JaxRs基本应用
  9. Android:SharedPreferences详解+示例
  10. PHP用于登录的类,基于MySQL