使用Selenium抓取淘宝商品美食信息
一、介绍
还是崔庆才老师的视频,废话不多说,直接上菜
二、流程
-
目标站点分析
用浏览器打开淘宝首页输入‘美食’,打开审查元素,分析我们要的商品信息都在Element里哪个分段 -
搜索关键字
利用Selenium驱动浏览器搜索关键字,得到查询后的商品列表 -
分析页码并翻页
得到商品页码数,模拟翻页,得到后续页面的商品列表
1.png
- 分析提取商品内容
利用PyQuery分析源码,解析得到商品列表
2.png
3.png
- 储存到MongoDB
将商品列表信息储存到数据库MongoDB
三、代码
#config.py MONGO_URL='localhost' MONGO_DB='taobao' MONGO_TABLE='product' KEYWORD = '美食'
import re from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from pyquery import PyQuery as pq from day27.config import * import pymongo client=pymongo.MongoClient(MONGO_URL) db=client[MONGO_DB] browser=webdriver.Chrome() wait=WebDriverWait(browser, 10) def search(): print('正在搜索') try: browser.get('http://www.taobao.com') input= wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#q'))) submit=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#J_TSearchForm > div.search-button > button'))) input.send_keys('KEYWORD') submit.click() total=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > div.total'))) get_products() return total.text except TimeoutException: return search() def next_page(page_number): print('正在翻页', page_number) try: input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > div.form > input'))) submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit'))) input.clear() input.send_keys(page_number) submit.click() wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > ul > li.item.active > span'),str(page_number))) get_products() except TimeoutException: next_page(page_number) def get_products(): wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-itemlist .items .item'))) #使用CSS选择器时,每层要有空格分开 html=browser.page_source doc=pq(html) items=doc('#mainsrp-itemlist .items .item').items() #使用CSS选择器时,每层要有空格分开 for item in items: product={ 'image':item.find('.pic.img').attr('src'), 'price':item.find('.price').text(), 'deal':item.find('.deal-cnt').text()[:-3], 'title':item.find('.title').text(), 'shop':item.find('.shop').text(), 'location': item.find('.location').text() } print(product) save_to_mongo(product) def save_to_mongo(result): try: if db[MONGO_TABLE].insert(result): print('储存到MongoDB成功',result) except Exception: print('储存到MongoDB失败',result) def main(): try: total=search() total=int(re.compile('(\d+)').search(total).group(1)) #print(total) for i in range(2,total+1): next_page(i) except Exception: print('出错啦') finally: browser.close() if __name__=='__main__': main()
四、最后得到的数据视图
4.png
五、总结
1.目标站点分析时候访问的url务必和代码里的url一致
2.使用CSS选择器时,每层要有空格分开
3.Compare是个好东西
原文地址:https://www.jianshu.com/p/0679aa469a27
相关推荐
-
分析一下点评网的反爬 网络爬虫
2019-2-24
-
在Scrapy中运用Selenium和Chrome 网络爬虫
2019-8-26
-
MongoDB 4.0 Python3.7 稳定高效的评分制IP代理池APIserver 网络爬虫
2018-12-5
-
反爬终极方案总结—字体反爬 网络爬虫
2019-2-24
-
B 站直播间数据爬虫 网络爬虫
2018-4-8
-
Python爬虫(1):基本原理 网络爬虫
2018-3-13
-
记录大众点评的字体反爬——Css+svg 网络爬虫
2019-5-10
-
python爬虫学习教程,爬取网易云音乐! 网络爬虫
2019-7-20
-
80行代码爬取豆瓣Top250电影信息并导出到csv及数据库 网络爬虫
2019-3-23
-
爬虫入门系列(二):优雅的HTTP库requests 网络爬虫
2018-2-20