Python 爬取淘宝商品信息栏目的实现

一、相关知识点

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驱动,动态解析爬取的网址

 #提取公共的爬取信息的api
 def 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)

 #爬取整个目录的div
 div_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]').text
 number = div_list.find_element_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[1]/div[2]/div[1]/div[2]').text
 shoping_information = div_list.find_element_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[1]/div[2]/div[2]').text
 shop = div_list.find_element_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[1]/div[2]/div[3]/div[1]/a').text
 adress = div_list.find_element_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[1]/div[2]/div[3]/div[2]').text
 path = 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 爬取淘宝商品信息栏目的实现的文章就介绍到这了,更多相关Python 爬取淘宝商品信息内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python爬取淘宝商品销量信息

    python爬取淘宝商品销量的程序,运行程序,输入想要爬取的商品关键词,在代码中的'###'可以进一步约束商品的属性,比如某某作者的书籍,可以在###处输入作者名字,以及时期等等.最后可以得到所要商品的总销量 import requests import bs4 import re import json def open(keywords, page): headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64)

  • Python使用Selenium爬取淘宝异步加载的数据方法

    淘宝的页面很复杂,如果使用分析ajax或者js的方式,很麻烦 抓取淘宝'美食'上面的所有食品信息 spider.py #encoding:utf8 import re from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.common.by import By from selenium.webdriver.support.ui

  • Python进阶之使用selenium爬取淘宝商品信息功能示例

    本文实例讲述了Python进阶之使用selenium爬取淘宝商品信息功能.分享给大家供大家参考,具体如下: # encoding=utf-8 __author__ = 'Jonny' __location__ = '西安' __date__ = '2018-05-14' ''' 需要的基本开发库文件: requests,pymongo,pyquery,selenium 开发流程: 搜索关键字:利用selenium驱动浏览器搜索关键字,得到查询后的商品列表 分析页码并翻页:得到商品页码数,模拟翻页

  • python实现爬取千万淘宝商品的方法

    本文实例讲述了python实现爬取千万淘宝商品的方法.分享给大家供大家参考.具体实现方法如下: import time import leveldb from urllib.parse import quote_plus import re import json import itertools import sys import requests from queue import Queue from threading import Thread URL_BASE = 'http://s

  • python爬取淘宝商品详情页数据

    在讲爬取淘宝详情页数据之前,先来介绍一款 Chrome 插件:Toggle JavaScript (它可以选择让网页是否显示 js 动态加载的内容),如下图所示: 当这个插件处于关闭状态时,待爬取的页面显示的数据如下: 当这个插件处于打开状态时,待爬取的页面显示的数据如下:   可以看到,页面上很多数据都不显示了,比如商品价格变成了划线价格,而且累计评论也变成了0,说明这些数据都是动态加载的,以下演示真实价格的找法(评论内容找法类似),首先检查页面元素,然后点击Network选项卡,刷新页面,可

  • python3爬取淘宝信息代码分析

    # encoding:utf-8 import re # 使用正则 匹配想要的数据 import requests # 使用requests得到网页源码 这个函数是用来得到源码 # 得到主函数传入的链接 def getHtmlText(url): try: # 异常处理 # 得到你传入的URL链接 设置超时时间3秒 r = requests.get(url, timeout=3) # 判断它的http状态码 r.raise_for_status() # 设置它的编码 encoding是设置它的头

  • python爬虫爬取淘宝商品信息

    本文实例为大家分享了python爬取淘宝商品的具体代码,供大家参考,具体内容如下 import requests as req import re def getHTMLText(url): try: r = req.get(url, timeout=30) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "" def parasePage(ilt, html): tr

  • python登录并爬取淘宝信息代码示例

    本文主要分享关于python登录并爬取淘宝信息的相关代码,还是挺不错的,大家可以了解下. #!/usr/bin/env python # -*- coding:utf-8 -*- from selenium import webdriver import time import datetime import traceback import logging import os from selenium.webdriver.common.action_chains import ActionC

  • Python通过正则库爬取淘宝商品信息代码实例

    使用正则库爬取淘宝商品的商品信息,首先我们需要确定想要爬取的对象 我们在淘宝里搜索"python",出来的结果 从url连接中可以得到搜索商品的关键字是"q=",所以我们要用的起始url为:https://s.taobao.com/search?q=python 然后翻页,经过对比发现,翻页后,变化的关键字是s,每次翻页,s便以44的倍数增长(可以数一下每页显示的商品数量,刚好是44) 所以可以根据关键字"s=",来设置爬取的深度(爬取多少页)

  • python3实现爬取淘宝美食代码分享

    环境: ubuntu16.04 python3.5 python库: selenium, pyquery,pymongo, re 要求: 设置×××面浏览器访问,并将商品列表存入mongoDB数据库. 分析过程暂时略过 代码: #!/usr/bin/env python # -*- coding:utf-8 -*- """ 1.爬取淘宝美食的流程 - 搜索关键字: 用selenium打开浏览器,模拟输入关键字,并搜索对应的商品列表. - 分析页码并翻页,模拟翻页,查看到所有页

  • python定向爬取淘宝商品价格

    python爬虫学习之定向爬取淘宝商品价格,供大家参考,具体内容如下 import requests import re def getHTMLText(url): try: r = requests.get(url, timeout=30) r.raise_for_status() #如果发送了一个失败请求(非200响应),#我们可以通过 Response.raise_for_status() 来抛出异常: r.encoding= r.apparent_encoding return r.te

随机推荐