数据分析---1.数据获取----淘宝商品信息获取

弱水三千,只取一瓢


上一篇: https://blog.csdn.net/cht2511/article/details/99088106

世上无难事只怕有心人

遇到的问题
1.登录需要验证
2.用requests对付不了淘宝(我暂时不行)
3.selenium要验证滑块
4.下一页的功能元素定位不了

直接上代码

"""
@author: cht
@time: 2019/8/8 22:23
"""
import csv
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


class TaoBao(object):
    # 初始化时,传递要查询的关键词
    def __init__(self, keyword):

        self.keyword = keyword

    def query_taobao(self):
        # 1.创建chrom浏览器对象
        driver = webdriver.Chrome()
        # 2.打开淘宝登录网址
        driver.get(
            'https://login.taobao.com/member/login.jhtml?spm=a21bo.2017.201864-2.d1.5af911d9oPmC7G&f=top&redirectURL=http%3A%2F%2Fwww.taobao.com%2F')
        # 3.点击登录
        driver.find_element_by_xpath('//*[@id="J_QRCodeLogin"]/div[5]/a[1]').click()
        # 选择微博登录
        driver.find_element_by_xpath('//*[@id="J_OtherLogin"]/a[1]').click()
        # 5.输入账号和密码
        driver.find_element_by_name("username").clear()
        driver.find_element_by_name("username").send_keys("微博账号")
        driver.find_element_by_name('password').clear()
        driver.find_element_by_name("password").send_keys("微博密码")
        driver.find_element_by_xpath('//*[@class="btn_tip"]/a/span').click()
        # 6.找到输入框
        #等待10S
        sleep(10)
        search_input = driver.find_element_by_class_name('search-combobox-input')
        # 7.输入搜索内容
        search_input.send_keys(self.keyword)
        # 8.到搜索按钮
        search_btn = driver.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button')
        # 9.点击搜索按钮
        search_btn.click()
        # 休眠2sleep(2)
        # 打开文件 encoding=utf-8 指定文件的字符编码
        file_handle = open('C:\\Users\\Administrator\\Desktop\\laguodata\\%s.csv' % self.keyword, 'w', encoding='utf-8')

        for y in range(1, 100):
            print('正在获取第%s页数据,请稍后......' % y)
            # for 循环执行5for x in range(1, 10, 2):
                # 休眠1sleep(1)
                # 把x转换小数
                j = x / 10
                # 拼接让浏览器滚动的js代码
                # %f float类型数据占位符
                js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight *%f ' % j
                # 执行让浏览器滚动的js代码
                driver.execute_script(js)
            #获取商品信息所有元素
            shops = driver.find_elements_by_class_name('J_MouserOnverReq')
            # print(len(shops))
            # 如果没有找到数据,换另一种方式去找
            if len(shops) == 0:
                shops = driver.find_elements_by_class_name('info-cont')

            # for循环遍历列表,取出每一个商品的信息
            file = open('C:\\Users\\Administrator\\Desktop\\laguodata\\InstantNoodles.csv', 'a+', newline='',
                        encoding='utf-8')  # 打开文件
            content = csv.writer(file, dialect='excel')  # 设定文件写入模式
            for shop in shops:
                # 输出查看商品信息
                line_list = shop.text.split('\n')
                content.writerow(line_list)

            # 找到下一页,点击
            # 找到li标签下一页
            try:
                url_input = WebDriverWait(driver, 10).until(EC.presence_of_element_located(
                    (By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > input')))
                url = WebDriverWait(driver, 10).until(EC.element_to_be_clickable(
                    (By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit')))
                url_input.clear()
                y += 1
                url_input.send_keys(y)
                time.sleep(3)
                url.click()
            except Exception as e:
                print(y)
                break
        # 3.关闭文件
        # 退出浏览器
        driver.quit()


# 如果是从当前文件直接运行的,执行以下代码
if __name__ == '__main__':
    keyword = "方便面"
    tb = TaoBao(keyword)
    tb.query_taobao()

问题解决方案:
1.用淘宝号登录需要滑块验证,淘宝反爬机制,能检测到你用了selenium,一晚上没搞定,腿儿球其实,使用微博账号(已绑定淘宝)登录,即可跳过滑块验证
2、使用find_elements_by系列定位不到下一页元素,使用了WebDriverWait和expected_conditions 、By.CSS_SELECTOR等确定元素位置。详细看代码
注意:
# 查找当前页所有的商品信息,返回的是一个列表(elements查找多个)
#经过验证不同的商品,对应的元素calssname不一样
# 电脑,鼠标、键盘…class_name填写 info-cont
# 其他的产品…class_name填写 J_MouserOnverReq

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值