今天我们利用上次的工具selenium 的webdrive工具简单爬取某宝上商品信息
目的:爬取华为手机的 名称、价格、月销量、评论数
第一步:
利用代码驱动浏览器打开登陆网页
这里说明下:不用url=https://www.taobao.com/ 一般的网址都有反爬的机制,用这个网址驱动浏览器报错或者获取不到链接,这里用了微博登陆的地址
下面是代码块:
#引用库
from selenium import webdriver
#指定要打开的网址
#url = 'https://www.taobao.com/'
url='https://weibo.com/login.php?spm=a2107.1.0.0.6cf811d9eVk1ed&entry=taobao&goto=https%3A%2F%2Flogin.taobao.com%2Faso%2Ftvs%3Fdomain%3Dweibo%26sid%3Ded1f8e67c161b086b4382b16468b2dba%26target%3D68747470733A2F2F7777772E74616F62616F2E636F6D2F&goto2=https%3A%2F%2Fwww.taobao.com%2F'
#调用谷歌驱动
driver = webdriver.Chrome(r"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe" )
#打开网页
driver.get(url)
第二步:
打开网页后,搜索要爬取的商品,华为手机,选择天猫,这里只要天猫下的商品
搜索完以后,我们发现有很多页商品,先看第一页,显示是每个商品的简图,在简图上点击商品名称,会进入详情页面,在详情页面里面有我们想要爬取的内容:名称 价格 月销量 评论数。
所有我们爬取的路线就是 在第一页点击商品名称 -----到第二页上爬取内容
首先要获取商品的所有链接:
find_elements_by_xpath() //div[@ ] 查找div目录下包含@后面所写元素的所有节点,爬取到存储到pros里面, 这个链接是什么?就是商品名称所在代码,在谷歌浏览器,F12 查看这个代码是:class=''row row-2 title"
点开详情页面后,分别获取具体的信息
这里说明下:获取评论数的时候,发现跟踪的代码获取不到或不正确,就带上找他的上一级代码
这样就爬取了第一个商品
批量爬取就建立for 循环
for i in pros:
第三步:
存储数据
titles = []
prices = []
mcounts = []
ccounts = []
titles.append(title)
prices.append(price)
mcounts.append(mcount)
ccounts.append(ccount)
#把存储的数据放入数据表中
#引入pandas库
import pandas as pd
data = pd.DataFrame()
data['名称']=titles
data['价格']=prices
data['月销量']=mcounts
data['评论数']=ccounts
data
完整代码:
#素质四连
#引用库
from selenium import webdriver
#指定要打开的网址
#url = 'https://www.taobao.com/'
url='https://weibo.com/login.php?spm=a2107.1.0.0.6cf811d9eVk1ed&entry=taobao&goto=https%3A%2F%2Flogin.taobao.com%2Faso%2Ftvs%3Fdomain%3Dweibo%26sid%3Ded1f8e67c161b086b4382b16468b2dba%26target%3D68747470733A2F2F7777772E74616F62616F2E636F6D2F&goto2=https%3A%2F%2Fwww.taobao.com%2F'
#调用谷歌驱动
driver = webdriver.Chrome(r"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe" )
#打开网页
driver.get(url)
#优化代码
#存储数据
titles = []
prices = []
mcounts = []
ccounts = []
#建立一个for循环 从1到4
for i in pros:
#每个链接点击打开详情页面
i.click()
#打开后切换页面到第二页
driver.switch_to_window(driver.window_handles[1])
#切换页面后开始获取商品了
#取商品名称,使用单数的element是查找第一个
title = driver.find_element_by_xpath('//h1[@data-spm="1000983"]').text
print(title)
#获取价格
price = driver.find_element_by_xpath('//span[@class="tm-price"]').text
print(price)
#获取月销量
mcount = driver.find_element_by_xpath('//span[@class="tm-count"]').text
print(mcount)
#评论数
ccount = driver.find_element_by_xpath('//li[@class="tm-ind-item tm-ind-reviewCount canClick tm-line3"]//span[@class="tm-count"]').text
print(ccount)
#一个商品爬取完后打印分割线看着明显
print('============================================')
#存储
titles.append(title)
prices.append(price)
mcounts.append(mcount)
ccounts.append(ccount)
#一个爬取完关闭这个详情页面
driver.close()
#切换页面到第一页
driver.switch_to_window(driver.window_handles[0])
#把存储的数据放入数据表中
#引入pandas库
import pandas as pd
data = pd.DataFrame()
data['名称']=titles
data['价格']=prices
data['月销量']=mcounts
data['评论数']=ccounts
data
#数据表保存excel表格
data.to_excel('淘宝商品数据.xlsx')
网友评论