Python-异常处理 使用selenium库自动爬取数据

异常处理

处理程序的报错

语法

捕捉万能异常:

try:
    print(a)
except Exception as e:
    print("你的代码有问题")
print("程序走下面的代码")

字符串内置方法

  • 索引取值
  • 切片
  • 长度(len)
  • 成员运算
  • 移除两边空白字符
  • str切分
  • 循环
  • startswith/endswith
  • join()
  • index()
  • count()

selenium

  • 是一个自动化测试工具,可以通过驱动浏览器,自动点击完成功能

  • 安装驱动

    http://npm.taobao.org/mirrors/chromedriver/2.38/
    

    安装请求库

    pip3 install selenium
    

首先体验一下selenium的效果,使用驱动,自动打开浏览器进入百度,代码:

# coding=utf-8
from selenium import webdriver  # 用来驱动浏览器的
from selenium.webdriver import ActionChains  # 破解滑动验证码的时候用的 可以拖动图片
from selenium.webdriver.common.by import By  # 按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys  # 键盘按键操作
from selenium.webdriver.support import expected_conditions as EC  # 和下面WebDriverWait一起用的
from selenium.webdriver.support.wait import WebDriverWait  # 等待页面加载某些元素
import time

drive = webdriver.Chrome(r"C:\Users\Administrator\Desktop\chromedriver.exe")

try:
    #等待浏览器加载10s
    drive.implicitly_wait(10)

    #打开浏览器访问百度页面
    drive.get("https://www.baidu.com/")
    time.sleep(1)

    #找到搜索框
    search_button = drive.find_element_by_id("kw")
    search_button.send_keys("驱动")

    #找到 百度一下 按钮
    baiduyixia_button = drive.find_element_by_id("su")
    baiduyixia_button.click()

    time.sleep(10)

finally:
    drive.close()

爬取京东商品并把数据保存下来

# coding=utf-8
from selenium import webdriver  # 用来驱动浏览器的
from selenium.webdriver import ActionChains  # 破解滑动验证码的时候用的 可以拖动图片
from selenium.webdriver.common.by import By  # 按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys  # 键盘按键操作
from selenium.webdriver.support import expected_conditions as EC  # 和下面WebDriverWait一起用的
from selenium.webdriver.support.wait import WebDriverWait  # 等待页面加载某些元素
import time

drive = webdriver.Chrome(r"C:\Users\Administrator\Desktop\chromedriver.exe")
#
try:
    #等待浏览器加载
    drive.implicitly_wait(10)

    #搜索京东
    drive.get("https://www.jd.com/")
    search_button = drive.find_element_by_id("key")
    search_button.send_keys("全新国行iPhone8")

    #找到 搜索 按钮 或者回车搜索,没有找到搜索按钮, 直接回车
    search_button.send_keys(Keys.ENTER)

    #通过id查找商品的父标签
    goods_div = drive.find_element_by_id("J_goodsList")
    #通过属性名找每个商品的具体信息
    goods_list = goods_div.find_elements_by_class_name("gl-item")
    print(type(goods_list))
    #


    # #通过循环出 每个商品的详情
    for goods in goods_list:
        # 通过css_selector获取商品价格
        goods_price = goods.find_element_by_css_selector('.p-price i').text
        # 通过css_selector获取商品名称
        goods_name = goods.find_element_by_css_selector('.p-name em').text
        # 通过css_selector获取商品评价人数
        goods_commit = goods.find_element_by_css_selector('.p-commit a').text
        # 通过css_selector获取商品详情链接
        goods_url = goods.find_element_by_css_selector('.p-commit a').get_attribute('href')

        data = f'''
        商品名称:{goods_name}  
        商品价格:{goods_price}  
        评价人数:{goods_commit}  
        详情链接:{goods_url}
        '''
        print(data)

        with open("京东手机信息.txt","a",encoding="utf8") as f:
            f.write(data)

    time.sleep(10)

finally:

自动登录百度账号

# coding=utf-8
from selenium import webdriver  # 用来驱动浏览器的
from selenium.webdriver import ActionChains  # 破解滑动验证码的时候用的 可以拖动图片
from selenium.webdriver.common.by import By  # 按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys  # 键盘按键操作
from selenium.webdriver.support import expected_conditions as EC  # 和下面WebDriverWait一起用的
from selenium.webdriver.support.wait import WebDriverWait  # 等待页面加载某些元素
import time

drive = webdriver.Chrome(r"C:\Users\Administrator\Desktop\chromedriver.exe")
#

try:
    drive.implicitly_wait(10)

    drive.get("https://www.baidu.com/")
    login_button = drive.find_element_by_link_text("登录")
    login_button.click()

    login_tag = drive.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn")
    login_tag.click()

    login_tag_user = drive.find_element_by_id("TANGRAM__PSP_10__userName")
    login_tag_user.send_keys("15221024542")
    login_tag_pass = drive.find_element_by_id("TANGRAM__PSP_10__password")
    login_tag_pass.send_keys("123456789qq")

    login_commit = drive.find_element_by_id("TANGRAM__PSP_10__submit")
    login_commit.click()

    time.sleep(10)
finally:
    drive.close()
posted @ 2019-08-29 21:36  GeminiMp  阅读(581)  评论(0编辑  收藏  举报