python·数据采集·Selenium动态爬取(爬虫4)

官网链接:Selenium-python

Selenium+chromedriver获取动态数据:

Selenium相当于是一个机器人。可以模拟人在浏览器上的一些行为,自动处理浏览器上的一些行为,比如点击,填充数据,删除cookie等。chromedriver是一个驱动Chrome浏览器的驱动程序,使用他才可以驱动浏览器。当然针对不同的浏览器有不同的driver。以下列出了不同浏览器及其对应的driver:

  1. Chrome:https://sites.google.com/a/chromium.org/chromedriver/downloads
  2. Firefox:https://github.com/mozilla/geckodriver/releases
  3. Edge:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
  4. Safari:https://webkit.org/blog/6900/webdriver-support-in-safari-10/

安装

pip install selenium

下载chromedriver

打开谷歌-点击右上角更多-帮助-关于Google Chrome,查看Google Chrome版本。

在这里插入图片描述

Chrome驱动文件下载链接: https://npm.taobao.org/mirrors/chromedriver/
找到相同版本的chromedriver下载,下载后放入pycharm当前工作目录中。

打开一个网页

from selenium import webdriver

driver_path = 'chromedriver.exe' #指定浏览器的驱动
driver = webdriver.Chrome(executable_path=driver_path) #实例化一个 机器人对象

driver.get('https://www.baidu.com')
print(driver.page_source) #返回网页源代码

可以看到打开的谷歌

在这里插入图片描述

关闭网页

from selenium import webdriver
import time

driver_path = 'chromedriver.exe' #指定浏览器的驱动
driver = webdriver.Chrome(executable_path=driver_path) #实例化一个 机器人对象

driver.get('https://www.baidu.com')
print(driver.page_source) #返回网页源代码
time.sleep(5)
#driver.close() #关闭窗口
driver.quit()# 退出整个浏览器

打开浏览器自动搜索

根据id来查找某个元素find_element_by_id
根据类名查找元素find_element_by_class_name

from selenium import webdriver
import time

driver_path = 'chromedriver.exe' #指定浏览器的驱动
driver = webdriver.Chrome(executable_path=driver_path) #实例化一个 机器人对象

driver.get('https://www.baidu.com')
inputTag = driver.find_element_by_id('kw')
inputTag.send_keys('计算机培训到底哪家强,千锋武汉扛把子')
submitTag = driver.find_element_by_id('su')
submitTag.click()
time.sleep(3)
driver.quit()# 退出整个浏览器

根据name属性的值来查找元素:find_element_by_name
根据xpath语法来获取元素:find_element_by_xpath
根据css选择器选择元素:find_element_by_css_selector

from selenium import webdriver
import time
from selenium.webdriver.common.by import By

driver_path = 'chromedriver.exe' #指定浏览器的驱动
driver = webdriver.Chrome(executable_path=driver_path) #实例化一个 机器人对象

driver.get('https://www.scuec.edu.cn/yxsz.htm')
driver.get('https://www.scuec.edu.cn/yxsz.htm')
#inputTag = driver.find_element_by_name('kw')
#inputTag = driver.find_element(By.ID,'kw')
inputTag = driver.find_element(By.CSS_SELECTOR,'.quickdelete-wrap>input')
#inputTag = driver.find_elements(By.CSS_SELECTOR,'.quickdelete-wrap>input')[0]
submitTag =driver.find_element_by_xpath('//*[@id="hotsearch-content-wrapper"]/li[1]/a/span[2]')
inputTag.send_keys('python基础·练习1(字符串作业)')
submitTag = driver.find_element_by_id('su')
submitTag.click()
time.sleep(3)
driver.quit()# 退出整个浏览器

行为链打开人人

账号需自己补充

from selenium import webdriver #导入webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.common.action_chains import ActionChains
driver_path = 'chromedriver.exe' #指定浏览器的驱动
driver = webdriver.Chrome(executable_path=driver_path) #实例化一个 机器人对象
driver.get('https://renren.com/login?to=https%3A%2F%2Frenren.com%2F')

usernameTag = driver.find_element_by_xpath('/html/body/div/div[3]/div/div[1]/div[2]/div[2]/div[1]/input')
#获取输入框
passwordTag = driver.find_element_by_xpath('/html/body/div/div[3]/div/div[1]/div[2]/div[2]/div[2]/input')
#密码框
submitTag =driver.find_element_by_xpath('/html/body/div/div[3]/div/div[1]/div[2]/div[2]/div[5]')
#获取按钮框
actions = ActionChains(driver) #创建一组行为
actions.move_to_element(usernameTag) #焦点移到到输入框
actions.send_keys_to_element(usernameTag,'....') #输入用户名
actions.move_to_element(passwordTag)#焦点移到到密码框
actions.send_keys_to_element(passwordTag,'...')#输入密码
actions.move_to_element(submitTag) #焦点移到到按钮框
actions.click(submitTag) #点击按钮
actions.perform()

隐藏浏览器

上面代码中加入:

options = webdriver.Chrome()
options.add_argument('--headless')
options.add_argument('--disable-gpu')

driver_path = 'chromedriver.exe' #指定浏览器的驱动
driver = webdriver.Chrome(executable_path=driver_path,options=options) #实例化一个 机器人对象

代理ip

from selenium import webdriver #导入webdriver
options = webdriver.ChromeOptions() #创建一个选项 最终运行按照选项执行
options.add_argument('--headless') #隐藏浏览器
options.add_argument('--disable-gpu') #禁用GPU
#options.add_argument('--proxy-server=http://101.200.187.22:16817') #使用代理
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import Select
driver_path = "chromedriver.exe" #指定浏览器的驱动
driver = webdriver.Chrome(executable_path=driver_path,options=options) #实例化一个 机器人对象
driver.get('http://httpbin.org/ip')
print(driver.page_source)

登录中南民族大学信息门户

“*”的位置需要输入学号和密码:

from selenium import webdriver #导入webdriver
import time
#from selenium.webdriver.common.action_chains import ActionChains


driver_path = 'chromedriver.exe' #指定浏览器的驱动
driver = webdriver.Chrome(executable_path=driver_path) #实例化一个 机器人对象
driver.get('https://ehall.scuec.edu.cn/new/index.html')

submitTag1 = driver.find_element_by_xpath('//*[@id="ampHasNoLogin"]/span[2]')
submitTag1.click()

usernameTag = driver.find_element_by_xpath('/html/body/div/div[1]/section/div[3]/div[1]/div/form/div/div[1]/div[1]/input')
#获取输入框
usernameTag.send_keys('************')
passwordTag = driver.find_element_by_xpath('/html/body/div/div[1]/section/div[3]/div[1]/div/form/div/div[1]/div[2]/input[1]')
#密码框
passwordTag.send_keys('**********')
submitTag =driver.find_element_by_xpath('/html/body/div/div[1]/section/div[3]/div[1]/div/form/div/div[3]/a')
# #获取按钮框
submitTag.click()
time.sleep(5)
driver.quit()

获取网页截图

from selenium import webdriver #导入webdriver
options = webdriver.ChromeOptions() #创建一个选项 最终运行按照选项执行
options.add_argument('--headless') #
options.add_argument('--disable-gpu')
#options.add_argument('--proxy-server=http://101.200.187.22:16817')
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import Select
driver_path = "chromedriver.exe" #指定浏览器的驱动
driver = webdriver.Chrome(executable_path=driver_path,options=options) #实例化一个 机器人对象
driver.get('http://www.baidu.com')
submitBtn = driver.find_element_by_id('su')
print(submitBtn.get_attribute('value'))
driver.set_window_size(200,200)
driver.save_screenshot('baidu.png')
#print(driver.page_source)

京东

import json
import time
from selenium import webdriver
driver_path = "chromedriver.exe"
"""
发送请求
    1.1生成driver对象
    2.1窗口最大化
    2.2下拉滚动条(保证每个位置都刷新)
    3.获取所有li标签列表
    保存图片
翻页
"""
driver = webdriver.Chrome(executable_path=driver_path)
driver.maximize_window() # 让窗口最大化
time.sleep(1)
# 京东商品页
driver.get('https://list.jd.com/list.html?cat=9987,653,655&ev=exbrand%5F12669&sort=sort_rank_asc&trans=1&JL=3_%E5%93%81%E7%89%8C_%E9%AD%85%E6%97%8F%EF%BC%88MEIZU%EF%BC%89#J_crumbsBar')
while True:
    time.sleep(1)
    for i in range(16):
        driver.execute_script('window.scrollTo(0,{})'.format(i * 500))
        time.sleep(1)
    lis = driver.find_elements_by_xpath('//ul[@class="gl-warp clearfix"]/li')
    with open('京东.txt', 'w', encoding='utf-8') as f:
        for li in lis:
            # 商品图片、价格、评价人数、商品名
            img_url = li.find_element_by_xpath('./div/div[1]/a/img').get_attribute('src')
            price = li.find_element_by_xpath('.//div[@class="p-price"]/strong').text
            buyers = li.find_element_by_xpath('./div/div[5]/strong').text
            name = li.find_element_by_xpath('./div/div[4]//em').text

            # 将信息写入文本
            dic = {}
            dic['name'] = name
            dic['price'] = price
            dic['buyers'] = buyers
            json.dump(dic, f, ensure_ascii=False)
            f.write(',\n')
    try:
        next_url = driver.find_element_by_xpath('/html/body/div[7]/div/div[2]/div[1]/div/div[3]/div/span[1]/a[4]').click()
    except Exception as e:
        print(e)
        break

time.sleep(1)
driver.close()

天猫

from selenium import webdriver
import csv
import time
# 访问网址
url = "http://www.tmall.com"
# 驱动器
driver_path = "chromedriver/chromedriver.exe"

browser = webdriver.Chrome(executable_path=driver_path)
browser.get(url)
# 获取文本框
browser.find_element_by_css_selector("#mq").send_keys("迪奥")
browser.find_element_by_css_selector("#mallSearch > form > fieldset > div > button").click()
# 登陆
# browser.find_element_by_css_selector("#fm-login-id").send_keys("13966445588")
# browser.find_element_by_css_selector("#fm-login-password").send_keys("123456")
# 查看源代码
print(browser.page_source)
# 找到所有裙子的div标签   [data,data,data,....]
liList = browser.find_elements_by_css_selector("#J_ItemList > div")
# print(liList)
# 循环每一条数据
for i in liList:
    # print(i)   <em>399</em>
    # 获取价格em标签,取出价格
    price = i.find_element_by_css_selector("#J_ItemList > div > div > p.productPrice > em").text
    price = price[1:]
    # 获取简介a标签,取出简介
    title = i.find_element_by_css_selector("#J_ItemList > div > div > p.productTitle > a").text
    # 获取店铺名称a标签,取出店铺名
    store = i.find_element_by_css_selector("#J_ItemList > div > div > div.productShop > a").text
    print(price,title,store)
    # 表格操作 as 重命名 [1,2,3]    [[1,2,3],[1,2,3],[1,2,3]]
    # open("表格名称", "模式 w/r/a+", 编码格式, 禁止换行)
    # 查看数据:ANSI格式    操作:utf-8格式
    with open("tm.csv","a+",encoding="utf-8",newline="") as openFile:
        csv.writer(openFile).writerow([price,store,title])
    print("数据装入表格成功")
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值