【实战】Python爬虫获取某电商网站的商品信息

基于的是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.jhtml
        url = ''
        # 声明类属性
        self.url = url
        self.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_source
        soup = 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 = 1
        total_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 + 1
            self.browser.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/ul/li[8]/a').click()
            page = self.browser.page_source
            soup = 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文件夹中。
在这里插入图片描述
笔者表示也很奇怪,为什么我输入的关键字【汽车】却推荐给我的都是二手车,可能淘宝内部的用户画像或者推荐系统计算得出笔者的经济能力有限,不足以购买更加优质的汽车吧。所以保存下来的图片都是一些旧二手车的。

  • 2
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值