江山代有才人出,各领风骚数百 ——清·赵翼 《论诗五首·其二》
长江后浪推前浪,浮事新人换旧人 ——宋·刘斧《青琐高议》
东西用时间长了就该换新的了,特别是手机,这几年发展太快,APP是越来越大,内存是越来越不够用了,想要换新的手机,但不知道换什么,那今天就爬一下淘宝,看一下淘宝手机的数据,参考一下
我的开发环境:python3.8
计算机系统:Windows10
开发工具:pycharm
要用的包:selenium、csv、time
网址:https://www.taobao.com/
今天用的是自动化测试工具selenium,没有这个包的同学可以用pip install selenium 来安装
安装完之后还需要安装个浏览器驱动,我用的是谷歌浏览器
http://chromedriver.storage.googleapis.com/index.html
打开这个链接,找到你浏览器版本所对应的驱动,这是我的浏览器版本
可以看到我的版本是94.0.4606.81 没有找到一样的就找低一个版本的
选择对应的系统,我的是win系统
把下载的压缩文件解压后,放到python解释器的当前文件夹下
验证一下
from selenium.webdriver import Chrome web = Chrome() web.get('https://www.baidu.com')
如果正常出现网页就成功了,注意,一定要和你的版本相匹配,不然就会出现这样
这个是我把浏览器更新之后驱动版本太低不支持了
至于其他浏览器在这里就不做太多的叙述了,流程大体相同,至于网站可以在网上找一下,下面进入正题
selenium是模拟人正常在浏览器上的操作,正常我们打开网页在搜索框输入内容点击搜索
import time import csv from selenium.webdriver import Chrome def main(): win.get('https://www.taobao.com/') win.find_element_by_xpath('//*[@id="q"]').send_keys(commodity) # 点击搜索框,输入前面想要搜索的内容 win.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button').click() # 点击搜索按钮 win.maximize_window() # 将网页放大方便我们扫码登录 time.sleep(15) # 等待15秒 让我们有时间扫码 if __name__ == '__main__': commodity = input('想要查询的商品:') win = Chrome() main()
这里需要我们扫码登录才让我们搜索
我们在分析一下搜索界面,发现所有的商品数据都放在div标签里,可以看到不是所有的div里都有商品数据,是从第四个div开始有数据,这些div都有共同的特征,那就是属性都是一样的,可以用xpath通过class定位进行晒选
items = win.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq "]')
这里需要注意一点因为我们选取了许多个div,所以find_elements_by_xpath里的element一定要加s,这样才返回列表,前面选取搜索框和搜索按钮的时候是不加s的
将获取的div遍历取出我们想要数据
for item in items: # 旗舰店 store = item.find_element_by_xpath('.//div[@class="shop"]/a').text # 商品简述 desc = item.find_element_by_xpath('./div[2]/div[2]/a').text # 价格 price = item.find_element_by_xpath('./div[2]/div/div/strong').text # 人数 num = item.find_element_by_xpath('.//div[@class="deal-cnt"]').text # 地址 address = item.find_element_by_xpath('.//div[@class="location"]').text
再将获取的数据存储到以搜索名称命名的csv文件中
with open(f'{commodity}.csv', mode='a', newline='', encoding='utf-8-sig')as f: csv_writ = csv.writer(f, delimiter=',') csv_writ.writerow([store, desc, price, num, address])
附上结果
这次先这样下次再将获取到的数据进行可视化生成柱状图、饼状图及地图分布
全部代码如下
import time import csv from selenium.webdriver import Chrome def get_data(): items = win.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq "]') for item in items: # 旗舰店 store = item.find_element_by_xpath('.//div[@class="shop"]/a').text # 商品简述 desc = item.find_element_by_xpath('./div[2]/div[2]/a').text # 价格 price = item.find_element_by_xpath('./div[2]/div/div/strong').text # 人数 num = item.find_element_by_xpath('.//div[@class="deal-cnt"]').text # 地址 address = item.find_element_by_xpath('.//div[@class="location"]').text with open(f'{commodity}.csv', mode='a', newline='', encoding='utf-8-sig')as f: csv_writ = csv.writer(f, delimiter=',') csv_writ.writerow([store, desc, price, num, address]) def main(): win.get('https://www.taobao.com/') win.find_element_by_xpath('//*[@id="q"]').send_keys(commodity) # 点击搜索框,输入前面想要搜索的内容 win.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button').click() # 点击搜索按钮 win.maximize_window() # 将网页放大方便我们扫码登录 time.sleep(15) # 等待15秒 让我们有时间扫码 get_data() if __name__ == '__main__': commodity = input('想要查询的商品:') win = Chrome() main()