import pymongo
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from pyquery import PyQuery as pq
from urllib.parse import quote # browser = webdriver.Chrome()
# browser = webdriver.PhantomJS(service_args=SERVICE_ARGS) chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(chrome_options=chrome_options) MONGO_URL = 'localhost'
MONGO_DB = 'taobao'
MONGO_COLLECTION = 'products' KEYWORD = 'ipad' MAX_PAGE = 100 SERVICE_ARGS = ['--load-images=false', '--disk-cache=true'] wait = WebDriverWait(browser, 10)
client = pymongo.MongoClient(MONGO_URL)
db = client[MONGO_DB] def index_page(page):
"""
抓取索引页
:param page: 页码
"""
print('正在爬取第', page, '页')
try:
url = 'https://s.taobao.com/search?q=' + quote(KEYWORD)
browser.get(url)
if page > 1:
input = wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager div.form > input')))
submit = wait.until(
EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager div.form > span.btn.J_Submit')))
input.clear()
input.send_keys(page)
submit.click()
wait.until(
EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#mainsrp-pager li.item.active > span'), str(page)))
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.m-itemlist .items .item')))
get_products()
except TimeoutException:
index_page(page) def get_products():
"""
提取商品数据
"""
html = browser.page_source
doc = pq(html)
items = doc('#mainsrp-itemlist .items .item').items()
for item in items:
product = {
'image': item.find('.pic .img').attr('data-src'),
'price': item.find('.price').text(),
'deal': item.find('.deal-cnt').text(),
'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):
"""
保存至MongoDB
:param result: 结果
"""
try:
if db[MONGO_COLLECTION].insert(result):
print('存储到MongoDB成功')
except Exception:
print('存储到MongoDB失败') def main():
"""
遍历每一页
"""
for i in range(1, MAX_PAGE + 1):
index_page(i)
browser.close() if __name__ == '__main__':
main()
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from urllib.parse import quote
from pyquery import PyQuery
from pymongo import MongoClient browser = webdriver.Chrome()
wait = WebDriverWait(browser, 10)
KEYWORD = 'iPad' def index_page(page):
"""
抓取索引页
:param page: 页码
"""
print('正在爬取第', page, '页')
try:
url = 'https://s.taobao.com/search?q=' + quote(KEYWORD)
browser.get(url)
if page > 1:
input = wait.until(
EC.presence_of_element_located(
(By.CSS_SELECTOR, '#mainsrp-page div.form > input')
)
)
# 利用 CSS 选择器,选择 id=mainsrp-page 的节点的所有元素,再从中选择父节点为 div 的 input 元素
# 其中 div 的属性 class=form。此时选择的是输入框
submit = wait.until(
EC.element_to_be_clickable(
(By.CSS_SELECTOR, '#mainsrp-pager div.form > span.btn.J_Submit')
)
)
# 利用CSS选择器,选择 id=mainsrp-pager 的节点的所有元素,再从中选择父节点为 div 的 span 元素
# 其中 div 的属性 class=form,span 的属性 class=btn J_Submit。此时选择的是"确定"按钮
input.clear() # 清除输入框中的内容
input.send_keys(page) # 在输入框中输入页码 page
submit.click() # 点击确定按钮
wait.until(
EC.text_to_be_present_in_element(
(By.CSS_SELECTOR, '#mainsrp-pager li.item.active > span'), str(page)
)
)
# 利用CSS选择器,选择 id=mainsrp-pager 的节点的所有元素,在从中选出 span 节点,
# 其中span节点的父节点为li节点,li节点的属性class=item active
wait.until(
EC.presence_of_element_located(
(By.CSS_SELECTOR, '.m-itemlist .items .item')
)
)
# 利用 CSS 选择器,选择 class=m-iremlist 的节点,从该节点中选择 class-items 的节点,再从中选择 class=item 的节点的所有元素
# 这里对应的是这一页中的每个淘宝商品
get_products()
except TimeoutException:
index_page(page) def get_products():
"""
提取商品数据
"""
html = browser.page_source # 获取源代码
doc = PyQuery(html) # 解析html
items = doc('#mainsrp-itemlist .items .item').items()
for item in items:
# 这个 item 中
product = {
'image': item.find('.pic .J_ItemPic.img').attr('data-src'),
# 找到 class=pic 的节点,再从中选择 class=J_ItemPic img 的节点,最后通过 attr() 方法获取 data-src 属性
'price': item.find('.price.g_price.g_price-highlight').text(),
# 找到属性 class=price g_price g_price-highlight 的节点,获取其文本(价格)
'deal': item.find('.deal-cnt').text(),
# 找到 class=deal-cnt 的节点,获取其文本(付款人数)
'title': item.find('row.row-2.title').text(),
# 找到属性值 class=row row-2 title 的节点,获取其文本(商品价格)
'shop': item.find('.shop').text(),
# 获取 class=shop 的节点的文本(店铺)
'location': item.find('.location').text()
# 获取 class=location 的节点的文本(店铺地址)
}
print(product)
save_to_mongo(product) MONGO_URL = 'localhost'
MONGO_DB = 'TaoBao'
MONGO_COLLECTION = 'products'
client = MongoClient(MONGO_URL)
db = client[MONGO_DB] def save_to_mongo(result):
"""
将爬取结果保存到MongoDB
:param result: 结果
:return:
"""
try:
if db[MONGO_COLLECTION].insert(result):
print('存储到 MongoDB 成功')
except Exception:
print('存储到 MongoDB 失败') MAX_PAGE = 100 def main():
"""
遍历每一页
:return:
"""
for i in range(1, MAX_PAGE + 1):
index_page(i)
browser.close() if __name__ == '__main__':
main()

与上面的一样

使用Selenium爬取淘宝商品的更多相关文章

  1. 利用Selenium爬取淘宝商品信息

    一.  Selenium和PhantomJS介绍 Selenium是一个用于Web应用程序测试的工具,Selenium直接运行在浏览器中,就像真正的用户在操作一样.由于这个性质,Selenium也是一 ...

  2. python3编写网络爬虫16-使用selenium 爬取淘宝商品信息

    一.使用selenium 模拟浏览器操作爬取淘宝商品信息 之前我们已经成功尝试分析Ajax来抓取相关数据,但是并不是所有页面都可以通过分析Ajax来完成抓取.比如,淘宝,它的整个页面数据确实也是通过A ...

  3. Selenium爬取淘宝商品概要入mongodb

    准备: 1.安装Selenium:终端输入 pip install selenium 2.安装下载Chromedriver:解压后放在…\Google\Chrome\Application\:如果是M ...

  4. Selenium+Chrome/phantomJS模拟浏览器爬取淘宝商品信息

    #使用selenium+Carome/phantomJS模拟浏览器爬取淘宝商品信息 # 思路: # 第一步:利用selenium驱动浏览器,搜索商品信息,得到商品列表 # 第二步:分析商品页数,驱动浏 ...

  5. <day003>登录+爬取淘宝商品信息+字典用json存储

    任务1:利用cookie可以免去登录的烦恼(验证码) ''' 只需要有登录后的cookie,就可以绕过验证码 登录后的cookie可以通过Selenium用第三方(微博)进行登录,不需要进行淘宝的滑动 ...

  6. Python 爬取淘宝商品数据挖掘分析实战

    Python 爬取淘宝商品数据挖掘分析实战 项目内容 本案例选择>> 商品类目:沙发: 数量:共100页  4400个商品: 筛选条件:天猫.销量从高到低.价格500元以上. 爬取淘宝商品 ...

  7. 爬取淘宝商品信息,放到html页面展示

    爬取淘宝商品信息 import pymysql import requests import re def getHTMLText(url): kv = {'cookie':'thw=cn; hng= ...

  8. 利用Python爬虫爬取淘宝商品做数据挖掘分析实战篇,超详细教程

    项目内容 本案例选择>> 商品类目:沙发: 数量:共100页  4400个商品: 筛选条件:天猫.销量从高到低.价格500元以上. 项目目的 1. 对商品标题进行文本分析 词云可视化 2. ...

  9. python爬虫学习(三):使用re库爬取"淘宝商品",并把结果写进txt文件

    第二个例子是使用requests库+re库爬取淘宝搜索商品页面的商品信息 (1)分析网页源码 打开淘宝,输入关键字“python”,然后搜索,显示如下搜索结果 从url连接中可以得到搜索商品的关键字是 ...

随机推荐

  1. Elasticsearch实战-磁盘IO被打满

    背景 事情是这样的.一天下午4点42分左右.业务反馈我开发的服务在测试环境出现问题,返回资源数据是0.查日志发现是ES访问超时.相当于数据库挂了.持续了20多分钟自己恢复.咨询了ES团队,最终得到下面 ...

  2. spring源码分析系列3:BeanFactory核心容器的研究

    目录 @(spring源码分析系列3:核心容器的研究) 在讲容器之前,再明确一下知识点. BeanDefinition是Bean在容器的描述.BeanDefinition与Bean不是一个东西. Be ...

  3. Zookeeper监控(Zabbix)

      一直在弄监控,这些个中间件Zookeeper.Kafka......,平时也只知道一点皮毛,也就搭建部署过,没有真正的用过,一般都是大数据的同学在用,作为运维人员我需要对他做一个监控,由于对他不是 ...

  4. js常用Matn函数的操练

    Math.PI console.log(Math.PI); 随机数以及向下取整 这是一个能实现从a-b之间随机打印一个整数 function rand_s(a, b) { var x = a + (b ...

  5. Salesforce Admin篇(四) Security 之Two-Factor Authentication & Single Sign On

    本篇参考: https://c1.sfdcstatic.com/content/dam/web/en_us/www/documents/white-papers/2fa-admin-rollout-g ...

  6. Java 并发编程(三):如何保证共享变量的可见性?

    上一篇,我们谈了谈如何通过同步来保证共享变量的原子性(一个操作或者多个操作要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行),本篇我们来谈一谈如何保证共享变量的可见性(多个线程访问同一个变 ...

  7. win10家庭版升级专业版

    在网上随便百度一个产品密钥,记得一定要先断网(这个很重要),否则很难升级. 升级之后发现产品未激活,下载KMS激活一下就可以了.

  8. 利用Helm简化Kubernetes应用部署(2)

    目录 定义Charts  使用Helm部署Demo  Helm常用操作命令  定义Charts 回到之前的“charts”目录,我们依次进行解读并进行简单的修改. Chart.yaml 配置示例: a ...

  9. mac下编译openjdk8?so easy!

    写在最前面的话:建议第一次编译jdk的朋友,查阅任何博客都不如认真读一遍源码中的README-builds.html 环境:macOS High Sierra(10.13.5) 编译jdk:openj ...

  10. Java内存模型总结

    Java内存模型 内存模型可以理解为在特定的操作协议下,对特定的内存或者高速缓存进行读写访问的过程抽象,不同架构下的物理机拥有不一样的内存模型,Java虚拟机也有自己的内存模型,即Java内存模型(J ...