编程

当前位置:永利皇宫463登录 > 编程 > 利用Selenium爬取淘宝商品信息,selenium爬取淘宝商

利用Selenium爬取淘宝商品信息,selenium爬取淘宝商

来源:http://www.makebuLuo.com 作者:永利皇宫463登录 时间:2019-12-09 04:24

近年来大家便是是买个牙刷大概都会在天猫方面,何况在买东西的时候种种人都会做的意气风发件业务就是看争辩,看看前面买家争辩领悟商品质量,外观是否和图片相符等等。不过只要真的想要一条一条去看的话,这日子是真的要超级多,当然了生龙活虎旦买的小物件那倒无所谓,假如是比较尊贵的物品就非得得好雅观了(PS:在小编心里100上述就是贵重货物,哈哈哈哈)

前面介绍了利用selenium和chromedriver通过模拟浏览器运转的不二法门得以成功在浏览器中见到是何许,抓取的源码便是什么。不用再去管网页内部的JavaScript是怎么着渲染页面,也不用管网页后台的Ajax接口有何参数,以致是加密规律等。那篇博客是实战演习,通过Selenium爬取Taobao网商品的图纸,名称,价格,购买人数,商场名称,商城所在地音信,将结果保存至Mongodb数据库中。

一. Selenium和PhantomJS介绍

图片 1

上风华正茂篇博客只介绍了chromedriver在windows下的安装

Selenium是三个用来Web应用程序测量检验的工具,Selenium直接运营在浏览器中,仿佛真正的客户在操作相通。由于那么些性子,Selenium也是三个有力的互联网数据搜集工具,其得以让浏览器自动加载页面,这样,使用了异步加载技巧的网页,也可收获其急需的数目。

 

Selenium模块是Python的第三方库,能够因而pip实行安装:

设假诺一般人为了让投机买的东西放心当然是接受一条一条看,只怕间接去实体门店买。不过身为技(chui)术(niu)人(zhuang)员(bi)的我,料定是用Python批量爬取Taobao商品音讯并开展简短的数码分析啦~~~~

对应版本的下载和测量检验安装是艺术是同等的

pip3 install selenium

图片 2

//解压unzip chromedriver_linux64.zip//移动到环境变量所在的目录sudo mv chromedriver /usr/bin//或者将chromedriver所在目录,添加到环境变量export PATH="$PATH:所在目录"//执行新的配置source ~/.porfile

Selenium本身不带浏览器,供给合营第三方浏览器来行使。通过help命令查看Selenium的Webdriver成效,查看Webdriver扶助的浏览器:

 

1.ajax伸手解析

图片 3pic1

_ksTS,rn那八个参数很难开采其规律,所以那边不应用结构Ajax乞求的法子来爬取内容,而通过selemium价格网页最后显示效果的HTML代码全体爬取下来,再来提取所要音信

from selenium import webdriver

help(webdriver)

想要爬取斟酌第风流倜傥件事正是找到实际的UTiggoL地址,具体步骤:

2.商品解析

图片 4pic2要求验证的是srcdata-src都以商品图片的网络地址,差异是前面二个是缩略图而后人是高清大图,两个都足以轻松爬取,这里爬取的是后人图片 5pic3

此地不点击下后生可畏页,而是经过机关输入页面数来拓宽页面跳转,一方面是要实时监督爬取到有个别页,其他方面,当程序现身至极,下一回运转又从第大器晚成页发轫,下风度翩翩页依次爬取,数据库中,会有重复记录

查看实施后的结果,如下图所示:

  1. F12(开采者选项)
  2. Notework
  3. F5(刷新)
  4. feedRateList(文件名)
  5. Headers
  6. 复制Request URL
1. 到手商品列表
import pymongofrom selenium import webdriverfrom selenium.common.exceptions import TimeoutExceptionfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWaitfrom urllib.parse import quotefrom pyquery import PyQuery as pqdriver = webdriver.Chrome()wait = WebDriverWait(driver,10)KEYWORD = 'iMac'def index_page: print('正在爬取第',page,'页') try: url = 'https://s.taobao.com/search?q='+quote driver.get if page > 1: input = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager div.form > input'))) submit = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager div.form > span.btn.J_Submit'))) input.clear() input.send_keys submit.click() wait.until( EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#mainsrp-pager li.item.active > span'),str wait.until( EC.presence_of_element_located(( By.CSS_SELECTOR,'.m-itemlist .items .item'))) get_products() except TimeoutException: index_page

通过布局查询参数,获得天猫网的寻觅U中华VL,q前面接你要找寻的首要词。就可以知道跳转到寻觅钦点商品后的页面,也是程序的入口UTiggoL通过转移EYWORD的值,就能够爬取区别商品音信;拼接UHighlanderL的时候用到quote措施,屏蔽特殊字符串,如空格等,UOdysseyL地址里是不含空格的,同一时间将字符串调换为UEscortL编码格式,以作保U讴歌MDXL的科学。

下边代码等待加载时,使用了WebDriverWait对象,钦命等待条件和10s的最长等待时间,假使在此个时辰内页面成分成功加载出来了,就相应结果并一而再接二连三向下进行,不然抛出超时格外。EC.presence_of_element_located是因素成功加载出来,EC.presence_of_element_located 意思是因素得以点击,因为它是一个按键,那些开关的效果是选定页码后的点击鲜明后跳转。

为了印证跳转到了相应的页码,需求判断当前高亮的页码数是当下的页码数(当前所在页码会高亮展现,相当于说当前页码的css是极度的卡塔尔国,所以这边运用了另三个等候条件text_to_be_present_in_element,它会等待钦赐的公文出现在某二个节点里面时即重回成功。这里大家将高亮的页码节点对应的CSS采纳器和当下要跳转的页码通过参数字传送递给这么些等待条件,那样它就能够检查评定当前高亮的页码节点是还是不是大家传过来的页码数,若是是,就证实页面成功跳转到了那风流浪漫页,页面跳转成功。

那样刚才完结的index_page(卡塔尔(قطر‎方法就足以流传对应的页码,待加载出相应页码的物品列表后,再去调用get_products(卡塔尔(英语:State of Qatar)方法进行页面深入深入分析。

这么些等待条件的参数都是特定的css选拔器,不做赘述了,图片已经注脚的很通晓了

图片 6

接下来去除不供给的字段,获取自个儿想要的源委

2.深入分析商品列表
def get_products(): html = driver.page_source doc = pq items = doc('#mainsrp-itemlist .items .item').items() for item in items: product = { 'image' : item.find('.pic .img').attr('data-src'), 'price' : item.find.text(), 'deal' : item.find('.deal-cnt').text(), 'title' : item.find.text(), 'shop': item.find.text(), 'location':item.find('.location').text() } print save_to_mongo print

通过driver.page_source 取得了差异页码下风流倜傥体化html源码;同有的时候间利用Pyqurey来剖判网页,通过已经探索的标签,查找这些标签下的子标签恐怕父标签,而毫不从头起头查找,功用更高;通过find.属性方法,获取图片UXC90L,和其余文件音讯并构产生Json字符串,调用save_to_mongo函数存入数据库中。

在这里个案例中,选用PhantomJS。Selenium和PhantomJS的相配使用可以完全效仿顾客在浏览器上的装有操作,富含输入框内容填写、单击、截屏、下滑等种种操作。那样,对于须求报到的网址,客商能够不供给经过结构表单或提交cookie音讯来报到网址。

图片 7

3.将结果保存到Mogodb中
def save_to_mongo: client = pymongo.MongoClient('mongodb://admin:admin123@localhost:27017/') db = client['taobao'] collection = db['products'] try: if collection.insert: print("成功保存到MongoDB") except Exception: print('someing wrong with MongDB')

python3通过认证情势连接Mongodb数据库,admin是小编的客户名,admin123是自家的密码,接着钦定数据库和集聚,调用insert艺术插入数据。

二. 案例介绍

 

4.定义爬取页数
def main(): MAX_PAGE = 100 for i in range(1,MAX_PAGE+1): index_page driver.close()if __name__ =='__main__': main()

轻巧for循环,并由此range生成1到100的数传递给index_page函数。

此处所举的案例,是使用Selenium爬取天猫商品音讯,爬取的内容为Tmall网(

探望运维后的效能图

5.完整代码
import pymongofrom selenium import webdriverfrom selenium.common.exceptions import TimeoutExceptionfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWaitfrom urllib.parse import quotefrom pyquery import PyQuery as pqdriver = webdriver.Chrome()wait = WebDriverWait(driver,10)KEYWORD = 'iMac'def index_page: print('正在爬取第',page,'页') try: url = 'https://s.taobao.com/search?q='+quote driver.get if page > 1: input = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager div.form > input'))) submit = wait.until( EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager div.form > span.btn.J_Submit'))) input.clear() input.send_keys submit.click() wait.until( EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#mainsrp-pager li.item.active > span'),str wait.until( EC.presence_of_element_located(( By.CSS_SELECTOR,'.m-itemlist .items .item'))) get_products() except TimeoutException: index_pagedef get_products(): html = driver.page_source doc = pq items = doc('#mainsrp-itemlist .items .item').items() for item in items: product = { 'image' : item.find('.pic .img').attr('data-src'), 'price' : item.find.text(), 'deal' : item.find('.deal-cnt').text(), 'title' : item.find.text(), 'shop': item.find.text(), 'location':item.find('.location').text() } print save_to_mongo printdef save_to_mongo: client = pymongo.MongoClient('mongodb://admin:admin123@localhost:27017/') db = client['taobao'] collection = db['products'] try: if collection.insert: print("成功保存到MongoDB") except Exception: print('someing wrong with MongDB') MAX_PAGE = 100def main(): for i in range(1,MAX_PAGE+1): index_page driver.close()if __name__ =='__main__': main() 

这段程序是对原先所学知识的汇总选拔,Mongodb是今日现学现用,那是本身首先次利用,关系型数据库Oracle,Sql server,Mysql都用过,基本知识也可以有调整,非关系型数据库Mongodb以往恐怕会写几篇学习笔记

图片 8

图片 9

1,输出结果

图片 10pic4

此处能够见见,在客商输入天猫商城后,需求效法输入,在输入框输入“男人短袖”。

 

2.翻看mongodb中存入的多少

图片 11pic5

案例中利用Selenium和PhantomJS,模拟Computer的探寻操作,输入商品名称举行搜索,如图所示,“检查”寻觅框成分。

如果你想要举办轻巧多少深入分析的话,那能够把爬取下来的评说保存下去。

图片 12

接下来用Python对其進展数据深入分析,对于数据可视化作者相比推荐pyecharts

何况如下图所示,“检查”下风度翩翩页成分:

它可以是这样的

图片 13

图片 14

爬取的源委有商品价位、付款人数、商品名称、商家名称和地址,如下图所示:

 

图片 15

也能够是那般的

末段把爬取数据存储到MongoDB数据库中。

图片 16

三. 相关本领

此处把除了selenium之外所急需的知识列一下,这里就不做详细分解了,倘诺不亮堂的话能够百度问询下。

  • mongoDB的使用,以至在python中用mongodb举行数量存款和储蓄。

  • lxml,爬虫三大方法之生龙活虎,深入分析功用相比高,使用难度比较正则表明式要低(上朝气蓬勃篇文章的拆解解析方法是正则表明式)。

  • 停顿平息的不二诀窍:driver.implicitly_wait

四. 源代码

代码如下所示,可复制直接实践:

from selenium import webdriverfrom lxml import etreeimport timeimport pymongoclient = pymongo.MongoClient('localhost',  27017)mydb = client['mydb']taobao = mydb['taobao']driver = webdriver.PhantomJS()driver.maximize_window() def get_info:     page = page + 1     driver.get     driver.implicitly_wait(10)     selector = etree.HTML(driver.page_source)     infos = selector.xpath('//div[@]')     for info in infos:        data = info.xpath('div/div/a')[0]        goods =  data.xpath('string').strip()        price = info.xpath('div/div/div/strong/text()')[0]        sell =  info.xpath('div/div/div[@]/text()')[0]        shop =  info.xpath('div[2]/div[3]/div[1]/a/span[2]/text()')[0]        address =  info.xpath('div[2]/div[3]/div[2]/text()')[0]        commodity = {            'good':goods,            'price':price,            'sell':sell,            'shop':shop,            'address':address        }        taobao.insert_one(commodity)     if page <= 50:        NextPage     else:        passdef NextPage:     driver.get     driver.implicitly_wait(10)         driver.find_element_by_xpath('//a[@trace="srp_bottom_pagedown"]').click()     time.sleep(4)     driver.get(driver.current_url)     driver.implicitly_wait(10)     get_info(driver.current_url,page)if __name__ == '__main__':     page = 1     url = 'https://www.taobao.com/'     driver.get     driver.implicitly_wait(10)     driver.find_element_by_id('q').clear()     driver.find_element_by_id('q').send_keys('男士短袖')     driver.find_element_by_class_name('btn-search').click()     get_info(driver.current_url,page)

五. 代码拆解深入分析

1~4行

导入程序须要的库,selenium库用于模拟央求和相互作用。lxml深入解析数据。pymongo是mongoDB 的交互作用库。

6~8行

开采mongoDB,举办仓库储存酌量。

10~11行

最大化PhantomJS窗口。

14~33行

应用lxml抓取网页数据,分别定位到所必要的新闻,并把音讯集成至json,存款和储蓄至mongoDB。

35~47行

分页管理。

51~57行

使用selenium模拟输入“男人短袖”,并效仿点击操作,并获得到相应的页面讯息,调取主方法分析。

———————————————————

民众号-智能化IT系统。周周都有才具随笔推送,富含原创本领干货,以致本事职业的经历分享。扫描下方关怀。

图片 17

本文由永利皇宫463登录发布于编程,转载请注明出处:利用Selenium爬取淘宝商品信息,selenium爬取淘宝商

关键词:

上一篇:没有了

下一篇:没有了