Python爬虫之Selenium库的使用方法
Selenium概述
- Selenium是一个自动化测试工具,可以模拟人的行为,比如点击,输入等。但是Selenium更常用的是用来做爬虫,尤其是一些需要登录或者需要执行JS代码的网站。
- Selenium有多种语言支持,其中Python是最为常用。Python中,爬虫常用的Selenium库有selenium和selenium-wire。
Selenium环境安装
- Selenium的运行需要浏览器驱动,如Chrome、Firefox等,每种浏览器需要对应的驱动。从这里https://sites.google.com/a/chromium.org/chromedriver/downloads下载对应版本的Chrome驱动,然后将驱动文件放置在环境变量PATH下。
- 安装selenium库:
pip install selenium
Selenium基本使用
- 首先需要导入selenium库,
from selenium import webdriver
。 - 然后,需要创建一个浏览器对象,如
browser = webdriver.Chrome()
。 - 接下来,我们可以通过浏览器对象来访问网页。如
browser.get("http://www.baidu.com")
。 - 如果需要进行一些交互操作,如模拟输入和点击,可以通过浏览器对象下的方法来实现。如,模拟在百度搜索框输入Python:
input = browser.find_element_by_id("kw")
和input.send_keys("Python")
。然后,通过submit()
方法来提交输入框中的内容,如:input.submit()
。 - 最后,如果我们需要对浏览器截屏、控制窗口大小等操作,我们可以通过浏览器对象的方法来实现。如:截屏并保存为example.png:
browser.save_screenshot('example.png')
Selenium高级用法
- 如果需要处理一些需要使用JS代码的网站,可以通过
execute_script()
方法来在浏览器中执行JS代码。如,在页面底部进行滚动时,可以通过browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
来实现。 - 如果需要模拟登录,在Selenium中,我们可以模拟用户登录行为,如输入用户名和密码,点击登录按钮等。如,模拟在微博登录页面输入账号和密码,并点击登录按钮:
username = browser.find_element_by_xpath('//*[@id="loginname"]')
password = browser.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[2]/div/input')
submit = browser.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[6]/a')
username.send_keys("username")
password.send_keys("password")
submit.click()
- 如果需要在Selenium中使用代理,可以通过selenium-wire实现,代码如下:
from seleniumwire import webdriver # 导入seleniumwire库中的webdriver模块
options = {
'proxy': {
'http': 'http://10.10.1.10:8888', # http代理服务器地址
'https': 'https://10.10.1.10:8888', # https代理服务器地址
'no_proxy': 'localhost,127.0.0.1' # 不使用代理的地址
}
}
# 打开带代理设置的Chrome浏览器
browser = webdriver.Chrome(seleniumwire_options=options)
示例说明
示例1:爬取百度热搜榜单
- 代码如下:
from selenium import webdriver
# 创建浏览器对象,并访问百度热搜榜单
browser = webdriver.Chrome()
browser.get("https://www.baidu.com/s?tn=hotword&ref=top10")
# 找到热搜榜列表
hotList = browser.find_element_by_class_name("hot-list")
# 打印热搜榜列表中的每一项
for item in hotList.find_elements_by_tag_name("li"):
print(item.text)
# 关闭浏览器
browser.quit()
- 运行结果如下:
林丹妻子出轨
中央发文:加强小学思政课
冉高鸣病逝
周立波欲诉老胡
梅西对食物过敏
看守所炸狱警是“女鬼”
172人因天价酒泡汤屡屡嗑药被查
网曝张一山被APP封号
太子妃升职记
南京深夜发生“砍人事件”
示例2:使用selenium-wire实现爬取有代理的网站
- 代码如下:
from seleniumwire import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 代理设置
options = {
'proxy': {
'http': 'http://192.168.1.100:8888',
'no_proxy': 'localhost,127.0.0.1'
}
}
# 创建带有代理设置的Chrome浏览器
browser = webdriver.Chrome(seleniumwire_options=options)
# 访问需要代理的网站
browser.get("https://www.whatismyip.com")
# 等待页面元素加载完成
WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID, "ipv4")))
# 获取IP地址信息
ipAddress = browser.find_element_by_id("ipv4").text
print("Your IP address: " + ipAddress)
# 关闭浏览器
browser.quit()
- 运行结果如下:
Your IP address: 192.168.1.100
以上为Selenium库的使用方法详解,希望对您的学习和使用有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬虫之Selenium库的使用方法 - Python技术站