python 爬虫 Selenium练习 爬取淘宝页面 /使用Selenium/点击下一页/BeautifulSoup解析源码获取数据

1.一般使用Selenium 爬取页面 就以下步骤:
1.使用Selenium 请求页面
2.使用wait.until()等到指定的元素标签被加载出来,才继续往下执行,开始打印源码,否则抛出异常。
3.得到源码后 使用BeautifulSoup 解析库 解析页面 获取数据 别的解析库也行。
4.入库。
5.代码 :

# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as  EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
from bs4 import BeautifulSoup
import sys
reload(sys)
sys.setdefaultencoding('utf8')
# 构造一个webdriver对象 使用谷歌浏览器
broser = webdriver.Chrome()
# 显示等待 10s
wait = WebDriverWait(broser, 10)
# KEYWORD = 'ipad'

# 通过传入的页码进行页面跳转 获取源码 把源码传入解析商品 获取 所需字段
def index_page(page):
    print '正在抓取第',page,'页'
    try:
        url = 'https://s.taobao.com/search?initiative_id=staobaoz_20190628&q=ipad'
        # 请求url
        broser.get(url)
        if page > 0:
            print '1'
            # 等待指定的selector被加载出来 否则 抛出异常 (输入框标签)
            input = wait.until(EC.presence_of_element_located(
                (By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > input')))
            print '2'
            # 等待指定的selector被加载出来 否则 抛出异常 (点击标签)
            submit = wait.until(EC.presence_of_element_located(
                (By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit')))
            print '3'
            # 清空文本框
            input.clear()
            # 在指定的文本框中 输入页码
            input.send_keys(page)
            # 点击
            submit.click()
            # 等待指定的selector被加载出来 否则 抛出异常 (判断当前高亮的页面是当前的页码数 即可)
            wait.until(EC.text_to_be_present_in_element(
                (By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > ul > li.item.active > span'), str(page)))
            print '4'
            # 等待指定的selector被加载出来 否则 抛出异常 (要爬取的列表标签)
            wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist > div')))
            print '源码: ', broser.page_source
            # 当前页码的源码
            html = broser.page_source
            # 调用get_products 解析页面 获取信息
            get_products(html)
    except TimeoutException:
        print '爬取出错'
        index_page(page)

# 使用BeautifulSoup 解析商品列表 获取商品信息
def get_products(html):
    print '开始解析源码,获取数据....'
    soup = BeautifulSoup(html, 'lxml')
    # 根据BeautifulSoup提供的诸多方法解析页面 获取到所需信息 具体操作 略
    # soup.select_one()
    # soup.select()
    # soup.findAll()
    # soup.find()

    # 最后入库
    insert_db()



# BeautifulSoup 获取到信息后 就需要数据清洗 存入数据库 或者excel ,cvs等文件中
def insert_db():
    print '开始 清洗数据 ,入库....'
    # 连接数据库 存入数据
    # 或者写入excel

# main
def main():
    """"
     遍历每一页
    """
    for i in range(1,3):
        index_page(i)
if __name__ == "__main__":
    main()
    # 关闭浏览器
    broser.close()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值