您的位置:首页 > 编程语言 > Python开发

python selenium 爬取淘宝商品数据

2017-09-20 16:00 656 查看
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()

c2a9
######阻塞, 等到翻页完成, 完成条件 就是 当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单板民谣电箱木吉他41寸
2390.00    1人付款    蓝盾Randon单板民谣木吉他RG-44C 缺角D型RG-44圆角琴 亮光漆指弹
3480.00    1人付款    Dove鸽子E系列36寸41寸40寸民谣单板原木色亮光吉他缺角指弹乐器
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游戏教学发光民谣智能吉他40寸41吋
35.00    3人付款    B级阿拉斯加西德卡云杉单板吉他前板毛板面板制作材料木材配件
468.00    1人付款    经典电吉他初学套餐男生吉他女生吉他摇滚吉他白色吉它黑色包邮
248.00    4人付款    电箱正品民谣吉他40寸41寸木吉他初学者入门学生男女成人乐器jita


老生常谈:深圳有爱好音乐的会打鼓(吉他,键盘,贝斯等)的程序员和其它职业可以一起交流加入我们乐队一起嗨。我的QQ:657455400
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: