使用Selenium爬取淘宝商品
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爬取淘宝商品的更多相关文章
- 利用Selenium爬取淘宝商品信息
一. Selenium和PhantomJS介绍 Selenium是一个用于Web应用程序测试的工具,Selenium直接运行在浏览器中,就像真正的用户在操作一样.由于这个性质,Selenium也是一 ...
- python3编写网络爬虫16-使用selenium 爬取淘宝商品信息
一.使用selenium 模拟浏览器操作爬取淘宝商品信息 之前我们已经成功尝试分析Ajax来抓取相关数据,但是并不是所有页面都可以通过分析Ajax来完成抓取.比如,淘宝,它的整个页面数据确实也是通过A ...
- Selenium爬取淘宝商品概要入mongodb
准备: 1.安装Selenium:终端输入 pip install selenium 2.安装下载Chromedriver:解压后放在…\Google\Chrome\Application\:如果是M ...
- Selenium+Chrome/phantomJS模拟浏览器爬取淘宝商品信息
#使用selenium+Carome/phantomJS模拟浏览器爬取淘宝商品信息 # 思路: # 第一步:利用selenium驱动浏览器,搜索商品信息,得到商品列表 # 第二步:分析商品页数,驱动浏 ...
- <day003>登录+爬取淘宝商品信息+字典用json存储
任务1:利用cookie可以免去登录的烦恼(验证码) ''' 只需要有登录后的cookie,就可以绕过验证码 登录后的cookie可以通过Selenium用第三方(微博)进行登录,不需要进行淘宝的滑动 ...
- Python 爬取淘宝商品数据挖掘分析实战
Python 爬取淘宝商品数据挖掘分析实战 项目内容 本案例选择>> 商品类目:沙发: 数量:共100页 4400个商品: 筛选条件:天猫.销量从高到低.价格500元以上. 爬取淘宝商品 ...
- 爬取淘宝商品信息,放到html页面展示
爬取淘宝商品信息 import pymysql import requests import re def getHTMLText(url): kv = {'cookie':'thw=cn; hng= ...
- 利用Python爬虫爬取淘宝商品做数据挖掘分析实战篇,超详细教程
项目内容 本案例选择>> 商品类目:沙发: 数量:共100页 4400个商品: 筛选条件:天猫.销量从高到低.价格500元以上. 项目目的 1. 对商品标题进行文本分析 词云可视化 2. ...
- python爬虫学习(三):使用re库爬取"淘宝商品",并把结果写进txt文件
第二个例子是使用requests库+re库爬取淘宝搜索商品页面的商品信息 (1)分析网页源码 打开淘宝,输入关键字“python”,然后搜索,显示如下搜索结果 从url连接中可以得到搜索商品的关键字是 ...
随机推荐
- UVA12983 The Battle of Chibi
第一眼能看出来是个dp O($n^3$) 暴力应该很好想 dp[i][j] = $\sum_{k=1}^i [a[k] < a[i]] *dp[k][j-1]$ 发现dp[i][j] 为前面小于 ...
- shell检测网站地址是否存活
#!/bin/bash . /etc/init.d/functions url_list=(www.baidu.com) ChkCurl(){ i=0 while [ $i -lt 2 ] do cu ...
- 报错com.neenbedankt.android-apt not found如何解决
apply plugin: 'com.neenbedankt.android-apt' 在moudle中build.gradle文件内有应用此插件,编译时报错 检查Project中build.grad ...
- Spring 源码阅读 二
程序入口: 接着上一篇博客中看完了在AnnotationConfigApplicationContext的构造函数中的register(annotatedClasses);将我们传递进来的主配置类添加 ...
- 网络游戏开发-客户端1(开始Hello world)
打开Egret Launcher ,新建一个EUI项目,起名为 EQiPai 这里需要勾选的是socket网络库,game游戏库.如果要面向海外用户的话,建议勾上Facebook的小游戏sdk. 然后 ...
- python常用算法(5)——树,二叉树与AVL树
1,树 树是一种非常重要的非线性数据结构,直观的看,它是数据元素(在树中称为节点)按分支关系组织起来的结构,很像自然界中树那样.树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树形 ...
- 解决vue组件内前置路由守卫beforeRouteEnter无法获取上下文this
问题描述 vue框架,只有在报名页面报名成功,然后自动跳转到订单详情,才弹出一个引流弹窗,其他情况均不弹出,我就想到使用vue 的组件内前置守卫beforeRouteEnter来实现.beforeRo ...
- Qt5教程: (2) 信号与槽
1. 新建工程 新建一个"Qt Widgets Application"工程 2. 添加按钮 一个Qt工程会有很多个控件, 如果把逻辑代码都写在main函数里, main函数会非常 ...
- vue-cli 中stylus写样式莫名报错?
报错一: expected "indent", got "eos" 错误截图如下: 在确认stylus安装无误后,我们应该看看是否stylus代码不符合规范. ...
- mssql数据库提权
1.关于 “xp_cmdshell” “存储过程”:其实质就是一个“集合”,那么是什么样的结合呢,就是存储在SqlServer中预先定义好的“SQL语句集合”,说的更直白一些就是使用T-SQL语言编写 ...