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 webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ecfrom selenium.webdriver.common.by import Byfrom pyquery import PyQuery as pqimport reimport timefrom 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()

原文地址:https://www.cnblogs.com/syhshare/p/10560824.html

时间: 2024-08-30 05:18:09

Selenium爬取淘宝商品概要入mongodb的相关文章

利用Selenium爬取淘宝商品信息

一.  Selenium和PhantomJS介绍 Selenium是一个用于Web应用程序测试的工具,Selenium直接运行在浏览器中,就像真正的用户在操作一样.由于这个性质,Selenium也是一个强大的网络数据采集工具,其可以让浏览器自动加载页面,这样,使用了异步加载技术的网页,也可获取其需要的数据. Selenium模块是Python的第三方库,可以通过pip进行安装: pip3 install selenium Selenium自己不带浏览器,需要配合第三方浏览器来使用.通过help命

使用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 im

python基础项目实战:selenium控制浏览器爬取淘宝商品信息

今天为大家介绍一个Python利用selenium打开浏览器的方式来爬取淘宝商品的信息,下面就来看看,关于selenium的知识点,是如何做到控制浏览器获取网站的信息 导入第三方库 关键词搜索 抓取索引页 大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:784758214,这里是python学习者聚集地!!同时,自己是一名高级python开发工程师,从基础的python脚本到web开发.爬虫.django.数据挖掘等,零基础到项目实

爬虫实例之selenium爬取淘宝美食

这次的实例是使用selenium爬取淘宝美食关键字下的商品信息,然后存储到MongoDB. 首先我们需要声明一个browser用来操作,我的是chrome.这里的wait是在后面的判断元素是否出现时使用,第二个参数为等待最长时间,超过该值则抛出异常. browser = webdriver.Chrome() wait = WebDriverWait(browser,10) 声明好之后就需要进行打开网页.进行搜索的操作. #使用webdriver打开chrome,打开淘宝页面,搜索美食关键字,返回

用selenium爬取淘宝美食

'''利用selenium爬取淘宝美食网页内容''' 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.su

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

项目内容 本案例选择>> 商品类目:沙发: 数量:共100页  4400个商品: 筛选条件:天猫.销量从高到低.价格500元以上. 项目目的 1. 对商品标题进行文本分析 词云可视化 2. 不同关键词word对应的sales的统计分析 3. 商品的价格分布情况分析 4. 商品的销量分布情况分析 5. 不同价格区间的商品的平均销量分布 6. 商品价格对销量的影响分析 7. 商品价格对销售额的影响分析 8. 不同省份或城市的商品数量分布 9.不同省份的商品平均销量分布 注:本项目仅以以上几项分析为

selenium抓取淘宝商品

我们知道,javascript动态渲染页面不止ajax这一种,有些网站可能整个都是由javascript渲染后生成的,还有些网站,比如淘宝,它虽然有ajax请求,但其中加入了很多复杂的参数,需要耗费大量时间才能找出规律,这时候,我们就可以用selenium,它可以直接模仿浏览器运行,并且抓取在运行时的源码,不用管ajax那些复杂的数,此次我们使用一种无界面的浏览器PhantomJS,它可以做到不用打开浏览器就可以运行,另外,需要正确安装好Selenium库. #我们需要用到MongoDB数据库,

Python3爬虫爬取淘宝商品数据

这次的主要的目的是从淘宝的搜索页面获取商品的信息.其实分析页面找到信息很容易,页面信息的存放都是以静态的方式直接嵌套的页面上的,很容易找到.主要困难是将信息从HTML源码中剥离出来,数据和网页源码结合的很紧密,剥离数据有一定的难度. 然后将获取的信息写入excel表格保存起来,这次只爬取了前面10页 的内容.在运行代码的过程中发现,30页后面的数据有问题,出现了手机价格为0的情况,这是不符合实际的,码也没有写错误处理的代码. 这次先写个粗略的,有点凌乱的感觉,下次有时间再系统的整理整理吧. im

selenium+pyquery爬取淘宝商品信息

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_condi