Selenium爬取淘宝商品概要入mongodb
准备:
1.安装Selenium:终端输入 pip install selenium
2.安装下载Chromedriver:解压后放在…\Google\Chrome\Application\;如果是Mac,可放入/usr/locl/bin,并将此目录放入环境变量
3.安装pyquery:终端输入 pip install pyquery
4.安装pymongo:终端输入 pip install pymongo
5.安装MongoDB的PyCharm插件:Preferences——Plugins——Mongo Plugin,安装完成后重启PyCharm可发现右侧有Mongo Explorer
6.安装MongoDB,windows:参考小歪老师知乎专栏MongoDB及可视化工具的安装;mac:参考 Mac OSX 平台安装 MongoDB安装
注:有时pip安装后,PyCharm中无法识别,首先确认编译器地址是否正确Preferences---Project interpreter;如果还不行,可在PyCharm下Preferences---Project interpreter重新添加包
基于:python3.6
遇到的坑:
1.定位搜索框元素的时候,查找对象路径,在点完搜索按钮后的页面得到(正确应该在淘宝首页获取),结果运行的时候,怎么都获取不到这个对象;所以:获取元素的时候,一定要在正确的页面查找该元素位置
2.翻页,10页以前的页码链接定位中规中矩,10页以后分奇偶,奇数用#mainsrp-pager > div > div > div > ul > li:nth-child(8) > a定位;偶数用#mainsrp-pager > div > div > div > ul > li:nth-child(9) > a定位,具体见源码
以下是源码,参考了很多DC 学院《Python爬虫(入门+进阶)》1-7,1-8课程内容,这算不算硬广:p
#!/usr/bin/python
# -*- coding:utf-8 -*- from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.by import By
from pyquery import PyQuery as pq
import re
import time
from pymongo import MongoClient as mc driver = webdriver.Chrome() #打开Chrome浏览器
wait = WebDriverWait(driver, 10) # 获取总页数
def search():
try:
driver.get('https://www.taobao.com')
# 获取搜索关键字输入框
input = wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, '#q')))
# 获取搜索按钮
search = wait.until(ec.element_to_be_clickable((By.CSS_SELECTOR, '#J_TSearchForm > div.search-button > button')),'not find element')
# 输入关键字
input.send_keys(u'鞋子')
# 点搜索
search.click()
# 获取总页数
page_total = wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.total')),'not find element')
# 调用方法获取首页产品概要
get_products()
return page_total.text
except Exception as ex:
print(ex) # 翻页
def page(pagenum):
try:
# 页数小于10,直接按页数定位
if(pagenum < 10):
css = '#mainsrp-pager > div > div > div > ul > li:nth-child({}) > a'.format(pagenum)
else:
# 页数大于10,如果是偶数,按nth-child(9)定位
if (pagenum%2==0):
css = '#mainsrp-pager > div > div > div > ul > li:nth-child(9) > a'
# 页数大于10,如果是奇数,按nth-child(8)定位
else:
css = '#mainsrp-pager > div > div > div > ul > li:nth-child(8) > a' # 获取页码链接
link = wait.until(ec.element_to_be_clickable((By.CSS_SELECTOR, css)), 'not find element')
# 点击页码链接
link.click()
time.sleep(1)
# 调用方法获取产品概要
get_products()
except Exception as ex:
print(ex) # 获取每页产品概要数据
def get_products():
# 所有产品项位置
pb = wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist .items .item')),
' not find element')
html = driver.page_source
doc = pq(html)
# 获取所有产品项数据
items = doc('#mainsrp-itemlist .items .item').items()
# 轮询每个产品
for item in items:
product = {
# 产品图片链接
'image': item.find('.pic .img').attr('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['title'])
# 入MongoDB库
client =mc()
db = client.taobao
set = db.xiezi
set.insert(product) if __name__ == '__main__':
# 获取总页数
page_total = search()
# 获取int 总页数
pagenum = int(re.compile('(\d+)').search(page_total).group(1))
# 轮询页码,获取产品概要;测试需要,只取15页
for i in range(3, 15):
print(str(i)+':')
page(i)
driver.quit()
Selenium爬取淘宝商品概要入mongodb的更多相关文章
- 利用Selenium爬取淘宝商品信息
一. Selenium和PhantomJS介绍 Selenium是一个用于Web应用程序测试的工具,Selenium直接运行在浏览器中,就像真正的用户在操作一样.由于这个性质,Selenium也是一 ...
- python3编写网络爬虫16-使用selenium 爬取淘宝商品信息
一.使用selenium 模拟浏览器操作爬取淘宝商品信息 之前我们已经成功尝试分析Ajax来抓取相关数据,但是并不是所有页面都可以通过分析Ajax来完成抓取.比如,淘宝,它的整个页面数据确实也是通过A ...
- 使用Selenium爬取淘宝商品
import pymongo from selenium import webdriver from selenium.common.exceptions import TimeoutExceptio ...
- 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连接中可以得到搜索商品的关键字是 ...
随机推荐
- SSD-tensorflow-3 重新训练模型(vgg16)
一.修改pascalvoc_2007.py 生成自己的tfrecord文件后,修改训练数据shape——打开datasets文件夹中的pascalvoc_2007.py文件,根据自己训练数据修改:NU ...
- 一个icon的选中与不选中
页面的样式展示 1.页面中选中的状态 2.页面中未选中的状态 3.俩个icon代表的状态 页面的布局展示 <label> <i class="iconfont icon-d ...
- 20180929 北京大学 人工智能实践:Tensorflow笔记03
更改的程序部分如下: 另: 难?????????????见链接: https://www.bilibili.com/video/av22530538/?p=17 + (完)
- 阿里云上如何找到虚拟主机和用户名登录FileZilla软件?
0.少玩游戏 1.登录阿里云官网 :https://www.aliyun.com/ 2.点击自己的旁边的名称进入进入自己的页面 3.购买的域名和主机会在这里显示,点击域名与网站(万网)>云虚拟主 ...
- HDU——T 2647 Reward
http://acm.hdu.edu.cn/showproblem.php?pid=2647 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- c#+ArcGIS Engine-获取矢量图层的空间参考
转自原文c#+ArcGIS Engine-获取矢量图层的空间参考 介绍一种简单的获取矢量图层空间参考的方法: 首先打开Shp文件获得FeatureClass,代码如下: string pPath=&q ...
- Attach、Detach和DeleteObject
原文:Attach.Detach和DeleteObject,想飞的梦想 1.CWnd Attatch和Detach的关系 首先,要明白Windows对象和MFC对象的区别. MFC对象实际上并没有把整 ...
- [Python] Pandas load DataFrames
Create an empty Data frame with date index: import pandas as pd def test_run(): start_date='2017-11- ...
- Codeforces Round #313 (Div. 2) 解题报告
A. Currency System in Geraldion: 题意:有n中不同面额的纸币,问用这些纸币所不能加和到的值的最小值. 思路:显然假设这些纸币的最小钱为1的话,它就能够组成随意面额. 假 ...
- xml方式封装通信数据方法
xml方式封装通信数据方法 public static function xmlToEncode($data) { $xml = ""; foreach($data as $key ...