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连接中可以得到搜索商品的关键字是 ...
随机推荐
- 学习Go语言之使用channel避免竞态问题
// 使用channel避免竞态问题 package main import ( "fmt" "sync" ) var ( i int wg sync.Wait ...
- Python对象引用的所有权
目录 引用所有权 传递引用的所有权--返回值 出借引用的所有权--返回值 占据引用的所有权--参数 出借引用的所有权--参数 引用所有权 谁持有对象引用的所有权,谁就要对对象负责. 引用的所有权对函数 ...
- 今日SGU 5.28
SGU 121 题意:给你一张图,问你每个顶点必须有黑白两条边(如果它的边数>=2),问你怎么染色,不行就输出no 收获:你会发现不行的情况只有一个单纯的奇数环的时候,反之我们交替染色即可 #i ...
- CF 420B Online Meeting 模拟题
只是贴代码,这种模拟题一定要好好纪念下 TAT #include <cstdio> #include <cstring> #include <algorithm> ...
- 【VBA研究】用VBA取得EXCEL随意列有效行数
作者:iamlaosong 用VBA对Excel文件进行处理的时候,keyword段的列号编程时往往是不知道的.须要通过參数设定才干知道,因此.我们编程的时候,就不能用这种语句取有效行数: linen ...
- java-proxool 异常
使用 proxool,JDBC连接池,进行批量运行的时候遇到异常: The Thread responsible was named 'Thread-32′, but the last SQL it ...
- linux(debian/ubuntu)下连接安卓手机--小米4为例
更改:如今小米连接Ubuntu等Linux系统,直接改动手机上的连接方式就可以. --------------------------------------------- 因为安卓手机底层就是lin ...
- js --- 中字符串与unicode编码
1.charAt():把字符串分成每一个字符,从左往右提取指定位置的字符 var str = '天气'; alert( str.charAt(1) ); //气 2.charCo ...
- HDU 5370 Tree Maker
一个显然的结论是,一棵n个结点的二叉树的形态数,是Catalan数第n项.
- Server.UrlEncode与HttpUtility.UrlEncode的区别
一.HttpUtility.UrlEncode 方法 1.public static string UrlEncode(byte[]) 将字节数组转换为已编码的 URL 字符串. 2.public s ...