python爬虫学习--爬虫可视化工具

爬虫学习:☠️

一.爬虫基础知识

1.1爬虫开发使用的开发环境

"""
Python3.11
系统环境:Mac(windows、linux都行)
编辑器:Pycharm
"""




# 三.selenium爬虫

## 3.1 selenium基础理论

​```python
"""
Selenium是什么?
官网:Selenium是一个用于Web应用程序测试的工具。
真实:大量用于网络爬虫,相比requests爬虫,完全模拟真人使用浏览器的流程,对于动态JS加载的网页更容易爬取
"""

"""
Selenium的功能
框架底层使用JavaScript模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从终端用户的角度测试应用程序。
可用于较难的爬虫:动态JS加载、登录验证、表单提交等
使用简单,可使用Python、Java等多种语言编写用例脚本。
"""

为什么要学习Selenium?
requests爬虫局限性较大,分析困难、被封禁概率高
可用于较难的爬虫
伪装成真实的浏览器,被封禁的概率更低
动态JS加载
登录验证
表单提交等
Selenium的缺点,相比requests,性能比较差,爬取的慢

Selenium的框架
"Python爬虫代码.依赖:seleinum库" -> "浏览器驱动 例如:ChromeDriver" ->"真实的浏览器(chrome)"
#seleinum库会在脚本执行时调用浏览器驱动访问目标网站,而不是python访问

1.2 环境配置windows

1.构建一个Selenium环境:
电脑安装谷歌Chrome浏览器(其他浏览器不推荐)
需要看一下当前的Chrome版本号,下载对应ChromeDriver
2.下载安装 ChromeDriver
https://www.selenium.dev/documentation/getting_started/installing_browser_drivers/
#http://chromedriver.storage.googleapis.com/index.html?path=110.0.5481.77/
#根据google下载即可
放到C:\WebDriver\bin目录,这个目录加入系统PATH
#计算机高级设置,将目录路径新建至path中即可
3.Python安装selenium库
C:\Users\xxq>C:\Users\xxq\AppData\Local\Programs\Python\Python311\python.exe -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium

1.3 selenium爬虫豆瓣官网

import selenium
hh = selenium.__version__
if hh:
    print("\033[34m安装成功版本为:%s\033[0m" % hh)

from selenium.webdriver import Chrome
#从web驱动中获取chrome的selenium
driver = Chrome()
#创建chrome对象
driver.get("https://movie.douban.com/")
#会自动打开指定的url网页
#并提示chrome正在收到自动化程序的控制,展现格式化
from selenium.webdriver.support.ui import WebDriverWait
#查看网页是否打开的ui工具
from selenium.webdriver.common.by import By
#xpath分析工具模块导入
WebDriverWait(driver,30).until(lambda d:"豆瓣电影" in d.title)
#会直接打开网页,最多等待35s,并获取网页的内容lambda匿名函数获取标题是否包含python.来确定网页是否打开
print(driver.find_element(By.XPATH,'//*[@id="db-nav-movie"]').text)
#通过xpath获取某个元素,点击网页中的某个标题,f12查看源码,获取对应class的xpath,注意是div块的class
driver.save_screenshot("./image.png")
#网页截图

1.4 Selenium语法总结

1.4.1 访问URL和导航

# 访问一个网页                            
driver.get("https://selenium.dev")  
# 获取当前URL
driver.current_url
# 返回上一页
driver.back()
# 前往下一页
driver.forward()
# 刷新页面
driver.refresh()


# 最大化窗口
driver.maximize_window()
# 全屏窗口
driver.fullscreen_window()
# 屏幕截图
driver.save_screenshot('./image.png')
# 元素截图
element.screenshot('./image.png')
# 关闭driver
driver.close()

1.4.2 定位和查找页面元素

# 定位单个元素
driver.find_element(By.NAME, "q")
# 定位多个元素
driver.find_elements(By.TAG_NAME, 'p')
# 获取元素的子元素
search_form.find_element(By.NAME, "q")
# 获取元素的多个子元素
element.find_elements(By.TAG_NAME, 'p')
# 获取标签名
driver.find_element(By.CSS_SELECTOR, "h1").tag_name
# 获取文本
driver.find_element(By.CSS_SELECTOR, "h1").text
# 获取属性
active_element.get_attribute("title")

定位元素的方式
1.class name
2.css selector
3.id
4.name
5.link text
6.partial link text
7.tag name
8.xpath

1.4.3 等待页面加载完毕

# 含义:有时候Python代码太快了,页面还没加载完毕就去取数据就会报错
# 可以等待条件满足,再去取数据

WebDriverWait(driver, timeout=3).until(some_condition)
#超时时间为3秒,超过3s未打开则认定失败.满足某个条件继续向下执行
from selenium.webdriver.support.ui import WebDriverWait
WebDriverWait(driver).until(lambda d: d.find_element_by_tag_name("p"))
#获取网页标签名称并返回

1.4.4 执行键盘操作

# 发送内容,然后回车
driver.find_element(By.NAME, "q").send_keys("webdriver" + Keys.ENTER)

# 输入内容,然后清理
SearchInput = driver.find_element(By.NAME, "q")
SearchInput.send_keys("selenium")
# Clears the entered text
SearchInput.clear()

1.5 python读取excel上传表单

import pandas as pd
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from  selenium.webdriver.support.ui import WebDriverWait
import time
df = pd.read_excel("./student_grades.xlsx")
#定义pandas对象读取excel文件
print(df.head())
#打印前五行
driver = Chrome()
#定义chrome对象
for idx,row in df.iterrows():
    #for循环遍历所有和结果,idx为第一列的索引,row为字典内容
    url = "http://antpython.net/webspider/grade_form"
    driver.get(url)
    #打开网页
    WebDriverWait(driver,5).until(lambda d:"已提交数据" in d.page_source)
    #定义一个ui检测对象,最多等待5s,定义匿名函数,需要参数d,d为传入的driver.page_source:获取网页源码
    #如果已提交数据在网页源码中
    姓名= row["姓名"]
    driver.find_element(By.XPATH,'//*[@id="sname"]').send_keys(姓名)
    time.sleep(0.3)
    #间隔3秒,防止网页奔溃,send_keys为input需要传入的按钮
    语文成绩 = row["语文成绩"]
    driver.find_element(By.XPATH, '//*[@id="yuwen"]').send_keys(语文成绩)
    time.sleep(0.3)
    数学成绩 = row["数学成绩"]
    driver.find_element(By.XPATH, '//*[@id="shxue"]').send_keys(数学成绩)
    time.sleep(0.3)
    英语成绩 = row["英语成绩"]
    driver.find_element(By.XPATH, '//*[@id="yingyu"]').send_keys(英语成绩)
    time.sleep(0.3)

    driver.find_element(By.XPATH, '//*[@id="submit_button"]').click()
    #点击提交按钮
    WebDriverWait(driver, 5).until(lambda d: "提交成功" in d.page_source)
    #点击提交按钮后会返回提交成功,如果提示提交成功,则判断完成post


driver.close()
#关闭引擎

1.6 练习打开自己搭建的gitlab

from selenium.webdriver import Chrome
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import time
driver = Chrome()
url = "http://qqkj.gitlab.com/users/sign_in"      #gitlab的登陆页面
driver.get(url)          #打开url
status = WebDriverWait(driver,3).until(lambda d:"GitLab Community Edition" in d.page_source) #网页中出现Gitlab标签视为正常
if  status:
    print("\033[35m网页打开正常!\033[0m")
    user = "xuexiaoqiang"
    psd = "xxq020311"
    driver.find_element(By.XPATH, '//*[@id="user_login"]').send_keys(user)
    time.sleep(0.3)
    driver.find_element(By.XPATH, '//*[@id="user_password"]').send_keys(psd)
    time.sleep(1)
    driver.find_element(By.XPATH, '//*[@id="new_user"]/div[5]/button').click()
    time.sleep(3)
    driver.close()
else:
    print("网页打开错误!")
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维神经科主任

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值