基于的是selenium谷歌驱动程序的自动化模拟登录,爬取的数据可以根据用户自己的需求进行选择,比如:商品的类型(由于搜素引擎展示给用户的界面数据都是大同小异的)、需要爬取商品的页数,都由用户自己指定。
注意:模拟登录采用的方式是用户扫码。
爬取到的商品信息包括:
- 商品的金额
- 购买人数
- 商铺地址
- 商品名称
- 商品图片
Python爬虫源代码:
"""导入需要用到的包
"""
import time
from bs4 import BeautifulSoup
from selenium import webdriver
# 浏览器等待
from selenium.webdriver.support.ui import WebDriverWait
from urllib.request import urlretrieve
import os# 定义淘宝商品信息抓取类
class Taoabo_Info:# 重写构造方法def __init__(self):# https://login.taobao.com/member/login.jhtmlurl = ''# 声明类属性self.url = urlself.browser = webdriver.Chrome(executable_path='D:\pycodes\Crawler\chromedriver.exe')self.wait = WebDriverWait(self.browser,10)# 编辑淘宝数据抓取的函数逻辑"""1.登录淘宝2.首页3.指定商品的搜索信息4.提取指定商品的金额、购买人数、商铺地址、商品名称、商品图片"""def login_info(self):# 1.打开网页self.browser.get(self.url)# 2.通过扫码的形式去登录淘宝账号if self.browser.find_element_by_xpath('//*[@id="login"]/div[1]/i'):self.browser.find_element_by_xpath('//*[@id="login"]/div[1]/i').click()# 让程序等待休眠5秒,通过手机扫码登录time.sleep(8)# 3.点击淘宝网首页taobao_index = self.browser.find_element_by_xpath('//*[@id="J_SiteNavHome"]/div/a')taobao_index.click()time.sleep(1)# 4.自动的在淘宝首页中输入自己想要搜索的商品名称,并且自动点击搜索search_input = self.browser.find_element_by_xpath('//*[@id="q"]')shop_name = input("请输入你想搜索的商品名称:")search_input.send_keys(shop_name)time.sleep(0.5)search_submit = self.browser.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button')search_submit.click()# 5.获取商品信息"""先创建一个文件夹存储爬取的商品图片"""os.makedirs("imgs", exist_ok=True)page = self.browser.page_sourcesoup = BeautifulSoup(page,'lxml')shop_data_list = soup.find('div',class_='grid g-clearfix').find_all_next('div',class_='items')# 二次提取:声明几个局部变量去临时存储商品数据shop_name_list = []shop_price_list = []shop_people_list = []shop_location_list = []pic_name_list = []# 商品的页面号page_num = 1total_num = int(input("你需要爬取商品的页数:"))while page_num != total_num:for shop_data in shop_data_list:# 商品名称shop_image_data = shop_data.find_all('div',class_='pic')for shop_data_a in shop_image_data:shop_data_a = shop_data_a.find_all('a',class_='pic-link J_ClickStat J_ItemPicA')for shop_img in shop_data_a:shop_name = shop_img.find_all('img')[0]['alt']url = 'http:' + shop_img.find_all('img')[0]['data-src']pic_name = url.split('/')[-1]path = 'imgs\{}'.format(pic_name)urlretrieve(url, path)# 将商品名称和图片名存储在列表中shop_name_list.append(shop_name)pic_name_list.append(pic_name)# 商品金额shop_price_data = shop_data.find_all('div', class_='price g_price g_price-highlight')for shop_price in shop_price_data:shop_price_list.append(shop_price.text.strip())# 购买人数shop_people_number_data = shop_data.find_all('div','deal-cnt')for shop_people_number in shop_people_number_data:shop_people_list.append(shop_people_number.text)# 店铺地区shop_location_data = shop_data.find_all('div','location')for shop_location in shop_location_data:shop_location_list.append(shop_location.text)page_num = page_num + 1self.browser.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/ul/li[8]/a').click()page = self.browser.page_sourcesoup = BeautifulSoup(page, 'lxml')shop_data_list = soup.find('div', class_='grid g-clearfix').find_all_next('div', class_='items')shop_data = zip(shop_name_list,shop_price_list,shop_people_list,shop_location_list,pic_name_list)for data in shop_data:print(data)print(len(shop_name_list))if __name__ == '__main__':taobao = Taoabo_Info()taobao.login_info()
数据展示——直接在控制台打印输出:
其中图片存储的地址是在同样路径下的imgs文件夹中。
笔者表示也很奇怪,为什么我输入的关键字【汽车】却推荐给我的都是二手车,可能淘宝内部的用户画像或者推荐系统计算得出笔者的经济能力有限,不足以购买更加优质的汽车吧。所以保存下来的图片都是一些旧二手车的。