当前位置: 美高梅棋牌 > 智能家电 > 正文

利用Python爬取淘宝商品信息并进行数据可视化

时间:2019-12-15 16:43来源:智能家电
现在人们哪怕是买个牙刷可能都会在淘宝上面,而且在买东西的时候每个人都会做的一件事情就是看评论,看看之前买家评论了解商品质量,外观是不是和图片一样等等。但是如果真的

现在人们哪怕是买个牙刷可能都会在淘宝上面,而且在买东西的时候每个人都会做的一件事情就是看评论,看看之前买家评论了解商品质量,外观是不是和图片一样等等。但是如果真的想要一条一条去看的话,那时间是真的要很多,当然了如果买的小物件那倒无所谓,如果是比较贵重的物品就必须得好好看了(PS:在小编心里100以上就是贵重物品,哈哈哈哈)

前面介绍了使用selenium和chromedriver通过模拟浏览器运行的方式可以做到在浏览器中看到是什么样,抓取的源码就是什么样。不用再去管网页内部的JavaScript是如何渲染页面,也不用管网页后台的Ajax接口有哪些参数,甚至是加密规律等。这篇博客是实战演练,通过Selenium爬取淘宝网商品的图片,名称,价格,购买人数,店铺名称,店铺所在地信息,将结果保存至Mongodb数据库中。

图片 1

上一篇博客只介绍了chromedriver在windows下的安装

 

如果是一般人为了让自己买的东西放心当然是选择一条一条看,或者直接去实体店买。但是身为技(chui)术(niu)人(zhuang)员(bi)的小编,肯定是用Python批量爬取淘宝商品信息并进行简单的数据分析啦~~~~

对应版本的下载和测试安装是方法是一样的

图片 2

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

 

1.ajax请求分析

图片 3pic1

_ksTS,rn这两个参数很难发现其规律,所以这里不采用构造Ajax请求的方式来爬取内容,而通过selemium价格网页最终呈现效果的HTML代码全部爬取下来,再来提取所要信息

想要爬取评论第一件事就是找到真实的URL地址,具体步骤:

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

通过构造查询参数,得到淘宝网的搜索URL,q后面接你要搜索的关键词。就能够跳转到搜索指定商品后的页面,也是程序的入口URL通过改变EYWORD的值,就能爬取不同商品信息;拼接URL的时候用到quote方法,屏蔽特殊字符串,如空格等,URL地址里是不含空格的,同时将字符串转换为URL编码格式,以保证URL的正确性。

下面代码等待加载时,使用了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.属性方法,获取图片URL,和其他文本信息并构造成Json字符串,调用save_to_mongo函数存入数据库中。

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

编辑:智能家电 本文来源:利用Python爬取淘宝商品信息并进行数据可视化

关键词:

  • 上一篇:没有了
  • 下一篇:没有了