色彩时光 | 记录程序员世界的点点滴滴

selenium小实验


selenium 能模拟浏览器行为,常用于与自动测试和网页内容抓取。在网页内容抓取方面,能比较合理的解决动态内容,以及验证环节等问题。下面写了个简单例子抓取淘宝排行榜的热门品牌排行榜。




#!/usr/bin/python
# -*- coding: utf8 -*-
"""
@version: ??
@author: lihai 
@license: Apache Licence 
@contact: 13142283701 51347294@qq.com 
@software: PyCharm Community Edition
@file: seleniumTest.py
@time: 2017/3/16 10:49
"""
# encoding=utf8
import sys

reload(sys)
sys.setdefaultencoding('utf8')

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time, base64, re


def getType(url,top_num=3):
    browser = webdriver.Chrome()  # Get local session of firefox
    # 打开
    # url = r"https://top.taobao.com/index.php?topId=TR_MY&leafId=50013618"
    browser.get(url)  # Load page

    browser.maximize_window()
    time.sleep(1)

    # 获取栏目url
    ele_types = browser.find_elements_by_xpath("//a[contains(@class,'param-item icon-tag ')]")
    # "https://top.taobao.com/index.php?spm=a1z5i.3.4.5.14oJbs&topId=TR_FS&leafId=1623&rank=brand&type=up"
    url_types = []
    for ele_type in ele_types:
        if ele_type.text:
            url_types.append(ele_type.get_attribute("href"))

    # 所有内容
    all_content = u""
    # 栏目内容
    filter_content = u""
    filters = """
    时尚女装 :
    连衣裙|T恤|半身裙|牛仔裤|衬衫|蕾丝/雪纺衫|背心/吊带|打底裤|马甲|毛衣|风衣|卫衣/绒衫|女士西装|针织衫|
    棉衣/棉服|裤子|婚纱/礼服|中老年服装|女士皮衣|短外套|羽绒服|休闲长裤|民族/舞台服
    靓丽女鞋 :
    凉鞋|帆布鞋|低帮鞋|高帮鞋
    帅气男装 :
    夹克|羽绒服|皮衣|休闲裤|衬衫|卫衣|牛仔裤|毛衣|风衣|西服|T恤|棉衣|背心|Polo衫|西服套装|西裤|民族服装
    流行男鞋 :
    低帮鞋|帆布鞋|高帮鞋|凉鞋|靴子
    内衣/家居服 :
    睡衣/家居服套装|袜子|内裤|睡裙|文胸|睡裤|保暖套装|文胸套装|睡袍/浴袍|塑身连体衣|吊带/背心
    精品箱包 :
    女士包袋|钱包|旅行箱
    化妆:
    眼部护理|面膜|乳液/面霜|面部精华|防晒霜|化妆水/爽肤水|洁面|卸妆|面部去角质|唇部护理|面部按摩霜|时尚香水|唇膏/口红
    粉饼|唇彩/唇蜜|魅惑眼影|蜜粉/散粉|腮红/胭脂|粉底液/膏|指甲油/美甲|身体保养|胸部护理|精油芳疗|手部保养
    婴儿:
    婴儿奶粉|果泥/米粉/辅食|婴幼儿营养品|纸尿裤|布尿裤/尿垫|奶瓶|抱被/床品|洗浴护肤|水杯/餐具|护理小用品
    """

    for url in url_types:
        browser.get(url)

        # 栏目名
        col_name = browser.find_element_by_xpath("//a[contains(@class,'param-item icon-tag param-item-selected')]").text
        # 过滤栏目
        if filters.find(col_name) == -1:
            continue

        all_content = u"""%s\r\n%s""" % (all_content, col_name)
        filter_content = u"%s\r\n#%s\r\n" % (filter_content, col_name)

        # 品牌热门排行点击
        cols = browser.find_elements_by_xpath("//div[@class='col switch-item ']/a")
        cols[4].click()
        time.sleep(0.5)

        # 热门排行品牌链接
        ele_urls = browser.find_elements_by_xpath("//div[@class='title']/a")
        # print ele_urls
        tag = 0
        for ele_url in ele_urls:
            # 热门排行品牌文字
            name = ele_url.text
            # 链接
            url = ele_url.get_attribute("href")

            tname = name.lower().strip()
            tname = re.sub(r"['.|&? ·.&\-\d\s]", "", tname)
            index = tname.find("/")
            if index > -1:
                tname = tname[index + 1:]

            # 取前三且未被收录
            if tag < top_num and filter_content.find(tname) == -1:
                filter_content = u"%s'%s'," % (filter_content, tname)
            tag += 1

            # print name, url
            all_content = u"""%s\r\n%s|%s""" % (all_content, name, url)

    return all_content, filter_content


if __name__ == '__main__':
    urls = ["https://top.taobao.com/index.php?spm=a1z5i.2.2.2.Z6YlAt&topId=TR_FS&leafId=50010850",
            "https://top.taobao.com/index.php?topId=TR_HZP&leafId=121454013",
            "https://top.taobao.com/index.php?topId=TR_MY&leafId=50013618"]
    all_content = ""
    filter_content = ""
    for url in urls:
        t1, t2 = getType(url)
        all_content = "%s%s" % (all_content, t1)
        filter_content = "%s%s" % (filter_content, t2)
    print filter_content

    file = open("tbTop.txt", "w")
    file.write(all_content)
    file.write(filter_content)
    file.flush()
    file.close()
    pass

返回结果:
#连衣裙
'fx.&mongyi','veromoda','zara',
#T恤
'韩都衣舍','only',
#半身裙
'mg小象',
#牛仔裤
'逸阳',
#衬衫
'韩e库','欧伊琳','茵曼',
#蕾丝/雪纺衫
'梦梦家','yeswomen',
#背心/吊带
'布噜阁','顶鹿',
#打底裤
'南极人','唐女','北极绒',
#马甲
'兰姿琳','碧沁伊人',
#毛衣
'恒源祥','戚米',
#风衣
'戎美','秋比',
#卫衣/绒衫
'米子旗','韩雅蜗牛(服饰)','森马',
#女士西装
'jingeneration',
#针织衫

#棉衣/棉服
'启序',
#裤子
'雅羊人','ojsz',
#婚纱/礼服
'天使嫁衣','满庭芳','名兰世家',
#中老年服装
'简狐','浅恋','香颜',
#女士皮衣
'ccstudios','优优维','诺贝妮娜',
#短外套
'bobowaltz','梵莉思',
#羽绒服
'波司登','娇兰恋','moncler',
#休闲长裤
'优衣库',
#民族/舞台服
'鹿韵记','汉尚华莲','重回汉唐',
#凉鞋
'达芙妮','charleskeith','思加图',
#帆布鞋
'人本','环球','ddoo',
#低帮鞋
'卓诗尼',
#高帮鞋
'ash','加菲鱼',
#夹克
'花花公子','花花公子贵宾','战地吉普',
#羽绒服
'黄金琼斯','yzlxaviucr',
#皮衣
'英爵伦','莫臣',
#休闲裤
'莫邦',
#衬衫
'雅戈尔',
#卫衣
'罗里格',
#牛仔裤
'jeans',
#毛衣
'墨麦客',
#风衣
'gxg','思莱德',
#西服
'杰克琼斯',
#T恤
'以潮',
#棉衣
'慈缘','emenord',
#低帮鞋
'奥康','骆驼',
#帆布鞋
'回力','老北京布鞋',
#高帮鞋
'palladium','骆驼牌',
#凉鞋

#靴子
'redwing','其乐','马登',
#睡衣/家居服套装
'芬腾','贝妍','兰秀美',
#袜子
'浪莎','宝娜斯',
#内裤
'七匹狼',
#睡裙
'顶瓜瓜','rosetree',
#文胸
'曼妮芬','都市丽人','黛安芬',
#睡裤
'oysho','八月格桑',
#保暖套装
'三枪',
#文胸套装
'初纯','纵酷','歌瑞尔',
#睡袍/浴袍
'芬凡','汀伊兰','欣美舒',
#塑身连体衣
'qanme','婷美婼雅','黛秀花',
#女士包袋
'蔻驰','迈克科尔斯',
#钱包
'稻草人',
#旅行箱
'rimowa','佐斯登','新秀丽',
#眼部护理
'雅诗兰黛','芳丹薄罗','资生堂',
#面膜
'宝罗丝丹','膜法世家','御泥坊',
#乳液/面霜
'海蓝之谜','naturerepublic',
#面部精华
'宝丽','skii',
#防晒霜
'碧柔','安热沙',
#化妆水/爽肤水
'城野医生','雅漾',
#洁面
'芙丽芳丝','美丽自助',
#卸妆
'贝德玛','芭妮兰','nursery',
#面部去角质
'李医生','rosette','cure',
#唇部护理
'兰芝','dhc','曼秀雷敦',
#面部按摩霜
'bblaboratories','aboutme',
#时尚香水
'香奈儿','迪奥','祖马龙',
#唇膏/口红
'圣罗兰','魅可',
#粉饼
'井田','mistine','卡姿兰',
#唇彩/唇蜜
'阿玛尼','爱茉莉',
#魅惑眼影
'伊蒂之屋','汤姆福特',
#蜜粉/散粉
'纪梵希','悦诗风吟','雅莉格丝',
#腮红/胭脂
'nars','玛丽黛佳',
#粉底液/膏
'肌肤之钥',
#指甲油/美甲
'糖果小姐','kasi','傲碧爱',
#身体保养
'柏诗春天','玛贝拉','长耀堂',
#胸部护理
'圣荷','娇韵诗','freezeframe',
#精油芳疗
'阿芙','海洋诗韵',
#手部保养
'欧舒丹','贺本清','半亩花田',
#毛衣
'巴拉巴拉','糖果雨','singbail',
#袜子
'浪莎','卓上棉品','贝步',
#衬衫
'英米熊','菲菲虎',
#卫衣/绒衫
'gap','左西',
#婴儿奶粉
'爱他美','诺优能',
#果泥/米粉/辅食
'亨氏','嘉宝','喜宝',
#婴幼儿营养品
'bioisland','童年时光','culturelle',
#纸尿裤
'帮宝适','好奇','妙而舒',
#布尿裤/尿垫
'叮叮乐','德佑','xxyp',
#奶瓶
'贝亲','爱得利','可么多么',
#抱被/床品
'可优比','南极人','良良',
#洗浴护肤
'强生婴儿','艾维诺',
#水杯/餐具
'babycare','beaba',
#护理小用品
'博朗','易简','运宝',


您可能也对下面文章感兴趣:

Write a Comment


* Content (required) 10~500s

分类

热门标签

友情链接