python selenium 爬取淘宝商品数据
2017-09-20 16:00
656 查看
1.今天来介绍下利用selenium来爬取淘宝搜索的商品数据,如下图:
2.代码实现, 需要了解selenium 知识,在我这篇博客:http://blog.csdn.net/luozheng4698729/article/details/78032362
2.1 main函数
大致流程,利用selenium模拟用户输入并搜索得到总页数,然后遍历总页数,解析每一页
2.2 createWebView()函数
创建chrome驱动函数
2.3 search()函数
前面说了selenium 不懂的见我上篇博客,这里利用selenium 模拟了输入,并点击搜索,得到总页数,然后调用parser_page解析这页数据
2.4 parser_page()函数
这里利用bs4来解析。读者要打开开发者工具找dom。这里用户还可以抓更多的商品属性,也可以自己存库。
2.5 to_page()函数
这里模拟了上述图片的1, 2 操作,也就是翻页动作。有个问题是怎么来判断页面加载完。也就是当高亮选中的是当前页时,代表这一页加载完了。具体看代码
2.6 执行结果
老生常谈:深圳有爱好音乐的会打鼓(吉他,键盘,贝斯等)的程序员和其它职业可以一起交流加入我们乐队一起嗨。我的QQ:657455400
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
相关文章推荐
- python3实现爬取淘宝页面的商品的数据信息(selenium+pyquery+mongodb)
- Python实例之抓取淘宝商品数据(json型数据)并保存为TXT
- 使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
- 用Python 爬取淘宝商品数据挖掘分析实战
- python淘宝爬虫基于requests抓取淘宝商品数据
- 使用python利器selenium工具模拟浏览器运行并爬取淘宝商品信息
- Python Selenium + PhantomJS爬取考拉海购商品数据
- Python爬取淘宝页面的数据,包含商品名字,价格及地址
- python爬取淘宝商品详情页数据
- 利用Python爬虫爬取淘宝商品做数据挖掘分析实战篇,超详细教程
- Python Selenium + PhantomJS爬取考拉海购商品数据
- Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
- Python爬取淘宝商品详情页数据
- python_利用selenium 爬取淘宝商品
- Python使用Selenium webdriver爬虫某电商商品数据
- Python爬虫(入门+进阶)学习笔记 1-8 使用自动化神器Selenium爬取动态网页(案例三:爬取淘宝商品)
- Python使用Selenium爬取淘宝异步加载的数据
- python淘宝爬虫基于requests抓取淘宝商品数据
- python3 selenium+re+pyquery+mongodb爬取并保存淘宝美食商品
- 使用python + selenium爬取淘宝商品信息