栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

selenium爬虫入门(1)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

selenium爬虫入门(1)

contents
  • 安装
  • selenuim小实验
  • selenium常用语法
  • 百度爬虫(翻页,爬取标题)

selenium可以伪装成真实的浏览器,被封禁的概率更低,有动态JS加载,登录验证,表单提交,只是相比requests,性能比较差爬取的慢

安装

step1:浏览器驱动安装要对应真实浏览器的版本,查看chrome浏览器版本

step2:找到对应或接近的版本,下载浏览器驱动ChromeDriver
https://www.selenium.dev/documentation/webdriver/getting_started/install_drivers/
将该chromedriver.exe所在目录放到环境路径下。
step3:pip install selenium

selenuim小实验

目标:爬取红框内的文字

from selenium.webdriver import Chrome  #导入chrome的浏览器驱动chromedriver
from selenium.webdriver.support.ui import WebDriverWait #网页检测

#驱动selenium打开网页
driver=Chrome(executable_path=r"C:WebDriverbinchromedriver.exe") #创建实例,如果加入到了环境变量可不写?
driver.get("https://www.python.org/")  

#判断网页是否加载完毕
WebDriverWait(driver,10).until(lambda d: "python" in d.title)  #等待10s 检测网页的title中是否已经显示python

打开https://www.python.org/,在页面右键点击检查,点击红框中的符号,再找到要爬取的内容点击,下图中的元素(element)就会定位到文本中的地址,右键copy,选copy Xpath

from selenium.webdriver.common.by import By

#用XPATH爬取元素的内容
print(driver.find_element(By.XPATH,'//*[@id="touchnav-wrapper"]/header/div/div[3]/p').text) #打印爬取到的内容
selenium常用语法

driver=Chrome()

访问URL和导航code
访问一个网页driver.get(“放一个网址”)
获取当前URLdriver.current_url
返回上一页driver.back()
前往一页driver.forward()
刷新页面driver.refresh()
获取标题driver.title
最大化窗口driver.maximize_window()
全屏窗口driver.fullscreen_window()
屏幕截图driver.save_sreenshot("./image.png")
元素截图element.screenshot("./image.png")
关闭driverdriver.close

定位元素的方式:class name, css selector, id, name, link text, partial link text, tag name, xpath

定位和查找页面元素code
定位单个元素driver.find_element(By.NAME,“q”)
定位多个元素driver.find_elements(By.TAG_NAME,“q”)
获取元素的子元素search_form.find_element(By.TAG_NAME,“q”)
获取元素的多个子元素search_form.find_elements(By.TAG_NAME,“p”)
获取标签名driver.find_element(By.CSS_SELECTOR,“h1”).tag_name
获取文本driver.find_element(By.CSS_SELECTOR,“h1”).text
获取属性activate_element.get_attribute(“title”)

等待页面加载完毕,元素加载完毕再取数据,否则会报错
用等待条件:

from selenium.webdriver.support.ui import WebDriverWait 
WebDriverWait(driver,timeout=3).until(condition)  #等待10s 检测网页的title中是否已经显示python
参数含义
timeout=3设置等待时间为3s
conditon写条件,如果限定时间内条件为False则会报错
键盘操作code
发送内容,并回车driver.find_element(By.NAME,“q”).send_keys("输入内容“+keys.ENTER)from selenium.webdriver.common.keys import Keys

示例:输入内容,然后清理

from selenium.webdriver.common.keys import Keys

SearchInput=driver.find_element(By.NAME,"q")
SearchInput.send_keys("selenium爬虫"+Keys.ENTER)
SearchInput.clear()

也可使用点击.click()

SearchInput=driver.find_element(By.XPATH,"q1")
SearchInput.send_keys("selenium爬虫")
driver.find_element(By.XPATH,"q2").click()
SearchInput.clear()
百度爬虫(翻页,爬取标题)
from selenium.webdriver import Chrome  #导入chrome的浏览器驱动chromedriver
from selenium.webdriver.support.ui import WebDriverWait #网页是否加载完毕
from selenium.webdriver.support.expected_conditions import title_contains
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

#驱动selenium打开网页
driver=Chrome() #创建实例,如果加入到了环境变量可不写
driver.get("https://www.baidu.com/")  

searchinput=driver.find_element(By.XPATH,'//*[@id="kw"]')
searchinput.send_keys('Python'+Keys.ENTER)

#判断网页是否加载完毕
WebDriverWait(driver,10).until(title_contains("Python")) 

#写文件
with open('baidu.txt','a') as f:
  
    i=0
    while i <3:
        h3=driver.find_elements(By.CSS_SELECTOR,'h3.t')
        for h in h3:
            f.write(h.text+"n")

        #翻页
        driver.find_element(By.XPATH,'//*[@id="page"]/div/a[last()]').click() #XPATH原本是//*[@id="page"]/div/a[10],但是他不一定是第十个位置,改成last()
        i+=1
        time.sleep(3)#给加载预留时间
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/649731.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号