python selenium 爬取淘宝商品数据

1.今天来介绍下利用selenium来爬取淘宝搜索的商品数据,如下图:
这里写图片描述

2.代码实现, 需要了解selenium 知识,在我这篇博客:http://blog.csdn.net/luozheng4698729/article/details/78032362

2.1 main函数
大致流程,利用selenium模拟用户输入并搜索得到总页数,然后遍历总页数,解析每一页

#淘宝搜索url
TAOBAO_SEARCH_URL = 'https://www.taobao.com/'
# 搜索关键字
KEY_WORD = '吉他'
#创建驱动
web_view = createWebView()
#访问url
web_view.get(TAOBAO_SEARCH_URL)

# 定义wait等待 10s超时
wait = WebDriverWait(web_view,10)
#搜索关键字得到总页数
total_page = search()
# 遍历页数
for i in range(2,total_page + 1):
    #解析每一页
    to_page(i)
    #缓冲2秒
    time.sleep(2)

2.2 createWebView()函数
创建chrome驱动函数

def createWebView():
    options = webdriver.ChromeOptions()
    ### 去掉 "chrome正受到自动测试软件的控制" 警告框  搞了很久
    options.add_argument('disable-infobars')
    ##构造Chrome驱动实例  参数提供你上面下载的chromedriver.exe路径
    return webdriver.Chrome(executable_path=
    'D:/chromedriver/chromedriver.exe', chrome_options=options)

2.3 search()函数
前面说了selenium 不懂的见我上篇博客,这里利用selenium 模拟了输入,并点击搜索,得到总页数,然后调用parser_page解析这页数据

def search():
    # 等待方式得到输入框
    search_edittext = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#q')))
    # 清空文字
    search_edittext.clear()
    # 向输入框输入文字
    search_edittext.send_keys(KEY_WORD)
    # 得到搜索按钮
    submit_button = wait.until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, '#J_TSearchForm > div.search-button > button')))
    # 点击搜索
    submit_button.click()
    ## 获取共多少页
    total_page_edittext = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > div.total')))
    total = int(re.compile('(\d+)').search(total_page_edittext.text).group(1))
    parser_page()
    return total

2.4 parser_page()函数
这里利用bs4来解析。读者要打开开发者工具找dom。这里用户还可以抓更多的商品属性,也可以自己存库。

def parser_page():
   try:
       soup = BeautifulSoup(web_view.page_source, "lxml")
       div = soup.find('div', {'id': 'mainsrp-itemlist'}).find('div', {'class': 'items'})
       for item in div.find_all('div', {'data-category': 'auctions'}):
           price = item.find('div', {'class': 'price'}).find('strong').text
           perons_buy = item.find('div', {'class': 'deal-cnt'}).text
           name = item.find('div', {'class': 'row-2'}).get_text().strip()
           print(price, '  ', perons_buy, '  ', name)
   except:
       pass

2.5 to_page()函数

这里写图片描述
这里模拟了上述图片的1, 2 操作,也就是翻页动作。有个问题是怎么来判断页面加载完。也就是当高亮选中的是当前页时,代表这一页加载完了。具体看代码

def to_page(page_index):
   try:
       # 得到 跳转到 输入框
       to_page_edittext = wait.until(
           EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > input')))
       # 清空文字
       to_page_edittext.clear()
       # 输入要跳转的页码
       to_page_edittext.send_keys(str(page_index))
       # 得到确定 按钮
       sure_button = wait.until(
           EC.element_to_be_clickable(
               (By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit')))
       # 点击搜索
       sure_button.click()
       ######阻塞, 等到翻页完成, 完成条件 就是 当page_index页码被高亮显示了就代表翻页完成
       # text_to_be_present_in_element: 阻塞直到所选元素 等于page_index的值
       wait.until(EC.text_to_be_present_in_element(
           (By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > ul > li.item.active > span'), str(page_index)))
       print('当前页:', page_index)
       parser_page() # 解析此页数据
   except:  ## 10s超时,继续调用to_page()
       to_page(page_index)

2.6 执行结果

当前页: 2
1824.00    23人付款    稀世珍品Semize生命之音SE-400激光浮雕云杉单板民谣吉他电箱吉他
1080.00    23人付款    马丁史密斯单板民谣吉他41寸面单电箱木吉他初学者入门男女生通用
569.00    68人付款    kepma卡马吉他初学者学生41寸卡玛民谣木吉他电箱男女生乐器吉它
990.00    2人付款    S.Yairi 雅依利D950 雅伊利D-950 1300 41寸 单板民谣电箱木吉他
1880.00    4人付款    彩虹人aNueNue Super Lani尤克里里云杉单板乌克丽丽小吉他
1280.00    6人付款    DOVE DTB260 和平鸽DTB250 鸽子 36寸小吉他 旅行单板民谣吉他
680.00    16人付款    圣骑士吉他SK-35 SK-25 SK-610 SK-810 SK-910初学吉他单板吉他
1000.00    8人付款    LAVAGUITAR拿火吉他花呗分期专拍链接
1980.00    1人付款    Fender芬达CD-140S单板民谣 CD140SCE单板民谣电箱木吉他412390.00    1人付款    蓝盾Randon单板民谣木吉他RG-44C 缺角D型RG-44圆角琴 亮光漆指弹
3480.00    1人付款    Dove鸽子E系列364140寸民谣单板原木色亮光吉他缺角指弹乐器
1880.00    1人付款    加百列木吉他民谣吉他单板吉他LR-185/185C
38.00    2人付款    非洲桃花芯奥古曼36寸民谣吉他泰勒琴头琴颈柄料 596弦 吉他材料
999.00    1人付款    火鹰SG款异形双琴颈电吉他6弦+12弦 深酒红色琴身双斜品 可加皮箱
6500.00    3人付款    世音琴行 芬达Fender 013-3002/014-7100/7502/7302新/墨豪电吉他
9800.00    2人付款    日本进口 依班娜 IBANEZ RG2550Z GW/GK 电吉他套装
730.00    8人付款    老鹰EAGLE旅行复古民谣手工40/41寸初学者吉他学生入门练习吉它
3750.00    18人付款    雅马哈Yamaha SLG200S SLG200N SLG200NW 民谣尼龙古典静音吉他
15.00    4人付款    吉他琴颈琴头化妆板琴头贴片装饰实木吉他制作贴面贴片贴板
3400.00    5人付款    Crafter卡夫特 韩产名琴单板指弹民谣吉他 KGXE600 KDX-500
1059.00    0人付款    微瑕疵 录音之王全单吉他 ROS-A9M/G9M 美国新款 木吉他 民谣吉他
859.00    1人付款    微瑕疵吉他 正品录音之王 RD-A3M 民谣吉他  单板吉他 面单木吉他
998.00    0人付款    Poputar智能吉他初学者吉他APP游戏教学发光民谣智能吉他404135.00    3人付款    B级阿拉斯加西德卡云杉单板吉他前板毛板面板制作材料木材配件
468.00    1人付款    经典电吉他初学套餐男生吉他女生吉他摇滚吉他白色吉它黑色包邮
248.00    4人付款    电箱正品民谣吉他4041寸木吉他初学者入门学生男女成人乐器jita

老生常谈:深圳有爱好音乐的会打鼓(吉他,键盘,贝斯等)的程序员和其它职业可以一起交流加入我们乐队一起嗨。我的QQ:657455400

Python中批量爬取淘宝商品价格数据,通常会使用到网络爬虫技术,比如使用requests库获取网页内容,然后解析HTML或JSON数据,利用BeautifulSoup、Scrapy等库帮助解析。以下是简单的步骤: 1. **安装必要的库**:首先需要安装`requests`, `beautifulsoup4`, 可能还需要`lxml`库,如果遇到JavaScript渲染的内容,可能需要`selenium`。 ```bash pip install requests beautifulsoup4 lxml (如果需要处理JS) selenium ``` 2. **分析目标网站结构**:访问淘宝商品页面,查看其HTML结构,找到包含商品价格的数据元素(例如CSS选择器或者XPath表达式)。 3. **编写爬虫脚本**:创建一个Python文件,如`tobao_scraper.py`,通过循环遍历链接列表并请求每个商品页,提取价格信息。 ```python import requests from bs4 import BeautifulSoup def get_price(url): response = requests.get(url) soup = BeautifulSoup(response.text, 'lxml') price_element = soup.select_one('.your-price-selector') # 将'.your-price-selector'替换为实际价格元素的选择器 return price_element.get_text() if price_element else None # 链接列表 urls = ['https://item.taobao.com/item.htm?id=your-item-id', ...] prices = [] for url in urls: price = get_price(url) if price: prices.append(price) # 打印或保存结果 for i, price in enumerate(prices): print(f"商品{i+1}的价格: {price}") ``` 注意:这只是一个基础示例,真实的淘宝商品页面可能会有反爬虫机制(如验证码、IP限制),并且频繁抓取可能会违反网站服务条款,因此在实际操作前应确保了解并遵守相关规定。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值