运用Python爬取天猫商品音信并举办数量可视化

前段时间人们不畏是买个牙刷恐怕都会在天猫方面,何况在买东西的时候各样人都会做的一件专门的学业正是看钻探,看看早前买家批评明白商品质量,外观是还是不是和图表相符等等。不过只要实在想要一条一条去看的话,那日子是真的要超级多,当然了生机勃勃旦买的小物件那倒不在乎,假设是比较高尚的物料就非得得好赏心悦目了(PS:在小编心里100之上正是贵重货色,哈哈哈哈卡塔 尔(英语:State of Qatar)

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

manbetx手机网页版 1

上意气风发篇博客只介绍了chromedriver在windows下的安装

 

http://yhch.xyz/2018/07/08/Python3%E7%88%AC%E8%99%AB-selenium-chromedriver%E5%8F%AF%E8%A7%81%E5%8D%B3%E5%8F%AF%E7%88%AC/

倘诺是肖似人为了让和睦买的事物放心当然是选取一条一条看,可能直接去实体门店买。但是身为技(chui卡塔 尔(阿拉伯语:قطر‎术(niu卡塔 尔(阿拉伯语:قطر‎人(zhuang卡塔 尔(英语:State of Qatar)员(bi卡塔 尔(英语:State of Qatar)的作者,确定是用Python批量爬取Tmall商品新闻并举办轻松的多少解析啦~~~~

对应版本的下载和测验安装是情势是意气风发致的

manbetx手机网页版 2

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

 

1.ajax倡议剖析

manbetx手机网页版 3pic1

_ksTS,rn那八个参数很难发掘其原理,所以这边不选取构造Ajax必要的艺术来爬取内容,而通过selemium价格网页最后表现效果的HTML代码全部爬取下来,再来提取所要音讯

想要爬取商酌第生龙活虎件事正是找到实际的USportageL地址,具体步骤:

2.货色剖判

manbetx手机网页版 4pic2需求验证的是src
data-src都以商品图片的网络地址,分化是前边二个是缩略图而后人是高清大图,两个都足以专擅爬取,这里爬取的是后世manbetx手机网页版 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

manbetx手机网页版,通过结构查询参数,获得Tmall网的搜索UENVISIONLhttps://s.taobao.com/search?q=iMac,q前面接你要寻觅的首要性词。就可以预知跳转到寻找钦命商品后的页面,也是程序的入口U中华VL通过改换EYWORD的值,就能够爬取不相同商品音信;拼接U奇骏L的时候用到quote措施,屏蔽特殊字符串,如空格等,UCR-VL地址里是不含空格的,同期将字符串转变为UEnclaveL编码格式,以承保ULacrosseL的正确。

上面代码等待加载时,使用了WebDriverWait对象,钦定等待条件和10s的最长等待时间,借使在此个日子内页面元素成功加载出来了,就相应结果并一而再三番五次向下执行,不然抛出超时至极。EC.presence_of_element_located是因素成功加载出来,EC.presence_of_element_located
意思是因素得以点击,因为它是二个按键,这些按键的效劳是选定页码后的点击分明后跳转。

为了印证跳转到了对应的页码,供给看清当前高亮的页码数是当前的页码数(当前所在页码会高亮彰显,也便是说当前页码的css是出格的),所以这里运用了另八个等候条件text_to_be_present_in_element,它会等待钦命的公文出今后某一个节点里面时即重临成功。这里我们将高亮的页码节点对应的CSS采取器和当下要跳转的页码通过参数字传送递给那个等待条件,那样它就能够检查测量试验当前高亮的页码节点是还是不是大家传过来的页码数,假诺是,就证实页面成功跳转到了那大器晚成页,页面跳转成功。

那般刚才完毕的index_page()方法就足以流传对应的页码,待加载出相应页码的货品列表后,再去调用get_products()方法开展页面分析。

那一个等待条件的参数都以一定的css选取器,不做赘述了,图片已经注解的很理解了

然后去除不供给的字段,获取本身想要的内容

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.属性艺术,获取图片URAV4L,和其它文件消息并构产生Json字符串,调用save_to_mongo函数存入数据库中。

manbetx手机网页版 6

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函数。

拜见运转后的效率图

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以往可能会写几篇学习笔记

manbetx手机网页版 7

1,输出结果

manbetx手机网页版 8pic4

 

2.翻看mongodb中存入的多寡

manbetx手机网页版 9pic5

只要你想要实行轻便多少拆解剖析的话,那能够把爬取下来的评介保存下去。

然后用Python对其进展数量剖析,对于数据可视化笔者比较推荐pyecharts

它能够是那样的

manbetx手机网页版 10

 

也足以是如此的

manbetx手机网页版 11

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图