详细介绍一下Python中如何使用来创建爬虫?

liftword2个月前 (02-21)技术文章22

Selenium是一个用来对Web应用程序进行测试的自动化测试工具,能够模拟出用户在浏览器中的各种行为,通过自动化的操作来执行任务,例如说可以模拟用户点击按钮、填写表单、抓取网页内容等,虽然是一个自动化测试工具,但是被很多开发者用来构建网络爬虫,尤其是在一些使用了动态技术进行交互的页面中,这个工具的效果非常好的。可以与多种浏览器兼容,支持了各种的编程语言。

??下面我们以谷歌浏览器为例来演示如何使用Selenium

安装Selenium

??想要使用Selenium,就必须要先安装Selenium,如下所示。

pip install selenium

??此外,Selenium还需要WebDriver来控制浏览器的行为,一般的比较常用的WebDriver有ChromeDriver、GeckoDriver(Firefox)等,这里以ChromeDriver为例,可以在下面的这个连接中获取。

https://storage.googleapis.com/chrome-for-testing-public/131.0.6778.264/win64/chromedriver-win64.zip

设置WebDriver

??Selenium的工作原理是通过WebDriver来控制浏览器行为,来模拟一些用户操作,如下所示。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

# 设置ChromeDriver路径
chrome_driver_path = 'H:/python-mini-script-warehouse/Selenium/chromedriver-win64/chromedriver.exe'

# 创建Service对象,并传入ChromeDriver路径
service = Service(chrome_driver_path)

# 使用WebDriver启动浏览器
driver = webdriver.Chrome(service=service)

# 访问网站
driver.get('https://www.baidu.com')

# 执行其他操作
driver.quit()

加载网页并获取网页内容

??接下来我们就来通过Selenium来加载网页并且模拟用户操作,如下所示,我们可以通过driver.get()方法加载一个页面,之后可以通过不同的方法获取网页内容。

# 获取网页标题
title = driver.title
print(title)

# 获取网页源代码
html_source = driver.page_source
print(html_source)

??在Selenium中还提供了很多的方法来获取网页上的元素,如下所示。

查找单个元素

element = driver.find_element_by_id('element_id')  # 通过ID查找
# 获取元素的文本内容
print(element.text)

# 通过类名查找
element = driver.find_element_by_class_name('class_name')

查找多个元素

elements = driver.find_elements_by_class_name('class_name')
for element in elements:
    print(element.text)

??当然还有一些其他的查询操作,如下所示。

  • find_element_by_name()
  • find_element_by_xpath()
  • find_element_by_css_selector()

??从名称上也可以看出了分别是通过名称查找、通过xpath查找、通过Class选择器查找。

处理动态内容

??在上面的介绍中我们提到过Selenium的优势就在于对于JavaScript动态渲染的内容的处理,下面我们就来详细介绍一下。

显式等待

??可以通过WebDriverWait来显式等待某个元素加载完成,如下所示。

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待某个元素出现(如,等待id为"element_id"的元素可见)
element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, "element_id"))
)
print(element.text)

滚动页面

??在很多页面操作中,内容是需要滚动页面才能进行加载的,这个时候,我们就可以通过JavaScript来执行滚动操作。

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

模拟交互

??通过Selenium我们也可以模拟出一些用户的交互行为,例如点击按钮,输入表单等,如下所示。

# 输入框输入文本
input_box = driver.find_element_by_name('q')
input_box.send_keys('Python Selenium')

# 点击按钮
submit_button = driver.find_element_by_name('btnK')
submit_button.click()

关闭浏览器

??在模拟操作完成之后,我们可以通过如下的操作来关闭浏览器。

driver.quit()

完整的百度搜索实现

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
import time

# 设置ChromeDriver路径
chrome_driver_path = './Selenium/chromedriver-win64/chromedriver.exe'

# 创建Service对象,并传入ChromeDriver路径
service = Service(chrome_driver_path)

# 使用WebDriver启动浏览器
driver = webdriver.Chrome(service=service)

# 访问网站
driver.get('https://www.baidu.com')

input_box = driver.find_element(By.ID,"kw")
input_box.send_keys('Python')

# 提交搜索(模拟按下回车键)
input_box.send_keys(Keys.RETURN)

# 等待搜索结果加载
time.sleep(2)

# 获取搜索结果并打印
results = driver.find_elements(By.CSS_SELECTOR, '.result.c-container')
for index, result in enumerate(results[:5], start=1):  # 获取前5个结果
    title = result.find_element(By.CSS_SELECTOR, 'h3').text
    link = result.find_element(By.CSS_SELECTOR, 'a').get_attribute('href')
    print(f'{index}. Title: {title}, Link: {link}')

# 关闭浏览器
driver.quit()

总结

??Selenium是一个功能强大的浏览器自动化工具,尤其适用于处理动态内容或需要与页面进行交互的场景。尽管它比传统的requestsBeautifulSoup等爬虫库要慢一些,但它能够更好地模拟用户行为,适用于复杂的网页爬取任务。

相关文章

什么是Python爬虫?一篇文章带你全面了解爬虫

一、什么叫爬虫爬虫,又名“网络爬虫”,就是能够自动访问互联网并将网站内容下载下来的程序。它也是搜索引擎的基础,像百度和GOOGLE都是凭借强大的网络爬虫,来检索海量的互联网信息的然后存储到云端,为网友...

程序员python入门课,30分钟学会,30行代码写爬虫项目

现在很多人学习编程,最开始就是选择的python,因为python现在比较火,薪资水平在程序员领域也是比较高的,入门快,今天就给大家分享一个用python写的小爬虫项目,只需要30行代码,认真学习,...

超详细的python爬虫案例,一次爬取上百篇文章

一次爬多篇文章,逻辑是先从主网址爬到每篇文章的网址,再从各个网址处爬取文章,很简单的静态网页爬取,不需考虑反扒问题。话不多说,直接案例说话。实例:从https://www.biquge.com.cn/...

最简单的python爬虫案例,适合入门学习

用python从网页爬取数据,网上相关文章很多,但能让零基础初学者轻松上手的却很少。可能是有的作者觉得有些知识点太简单不值得花费精力讲,结果是难者不会会者不难,初学者常常因此而蒙圈。本人也是小白,刚摸...

如何入门 Python 爬虫?_python爬虫入门教程

1.很多人一上来就要爬虫,其实没有弄明白要用爬虫做什么,最后学完了却用不上。大多数人其实是不需要去学习爬虫的,因为工作所在的公司里有自己的数据库,里面就有数据来帮助你完成业务分析。什么时候要用到爬虫呢...

Python爬虫超详细讲解(零基础入门,老年人都看得懂)

Python爬虫超详细讲解(零基础入门,老年人都看得懂)

先看后赞,养成习惯。点赞收藏,人生辉煌。讲解我们的爬虫之前,先概述关于爬虫的简单概念(毕竟是零基础教程)爬虫网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一...