2023年11月25日发(作者:)
Python使⽤Selenium⾃动进⾏百度搜索的实现
⽬录
安装 Selenium
写代码
点位⽹页元素
我们今天介绍⼀个⾮常适合新⼿的python⾃动化⼩项⽬,项⽬虽⼩,但是五脏俱全。它是⼀个⾃动化操作⽹页浏览器的⼩应⽤:打开浏览器,进⼊百度⽹页,搜索关键词,最后
把搜索结果保存到⼀个⽂件⾥。这个例⼦⾮常适合新⼿学习Python⽹络⾃动化,不仅能够了解如何使⽤Selenium,⽽且还能知道⼀些超级好⽤的⼩⼯具。
当然有⼈把操作⽹页,然后把⽹页的关键内容保存下来的应⽤⼀律称作⽹络爬⾍,好吧,如果你想这么爬取内容,随你。但是,我更愿意称它为⽹络机器⼈。
我今天介绍的项⽬使⽤Selenium,Selenium 是⽀持 web 浏览器⾃动化的⼀系列⼯具和库的综合项⽬。Selenium 的核⼼是 WebDriver,这是⼀个编写指令集的接⼝,可以在许多
浏览器中互换运⾏。
闲⾔少叙,硬货安排。
安装 Selenium
可以使⽤ pip 安装 Python 的 Selenium 库:pip install selenium
(可选项:要执⾏项⽬并控制浏览器,需要安装特定于浏览器的 WebDriver ⼆进制⽂件。
下载 WebDriver ⼆进制⽂件 并放⼊ 系统 PATH 环境变量 中.)
由于本地浏览器版本升级,引起的版本不⼀致问题,和系统PATH环境变量的设置⽐较繁琐,所以我使⽤webdriver_manager,
安装 Install manager:
pip install webdriver-manager
写代码
引⼊模块:
from selenium import webdriver
from webdriver_ import ChromeDriverManager
from import By
from import WebDriverWait
from t import expected_conditions as EC
from import Keys
⾸先我们定义⼀个类Search_Baidu, 它主要⽤于初始化;定义⾃动化步骤的⽅法;结束关闭浏览器。
class Search_Baidu:
def __init__(self):
def search(self, keyword):
def tear_down(self):
接下来我们分别介绍每个⽅法的实现过程。
def __init__(self): #类构造函数,⽤于初始化selenium的webdriver
url = '/' #这⾥定义访问的⽹络地址
= url
options = Options()
_experimental_option("prefs", {"d_default_content_": 2}) # 不加载图⽚,加快访问速度
_experimental_option('excludeSwitches', ['enable-automation']) # 此步骤很重要,设置为开发者模式,防⽌被各⼤⽹站识别出来使⽤了Selenium
# 这⾥使⽤chrome浏览器,⽽且使⽤我们刚才安装的webdriver_manager的chrome driver,并赋值上⾯的浏览器设置options变量
r = (ChromeDriverManager().install(), options=options)
= WebDriverWait(r, 10) #超时时长为10s,由于⾃动化需要等待⽹页控件的加载,所以这⾥设置⼀个默认的等待超时,时长为10秒
def tear_down(self):
() #最后,关闭浏览器
接下来是重头戏,写我们操作浏览器的步骤,打开浏览器,进⼊百度⽹页,输⼊搜索关键字:Selenium,等待搜索结果,把搜索结果的题⽬和⽹址保存到⽂件⾥。
def search(self, keyword):
# 打开百度⽹页
()
# 等待搜索框出现,最多等待10秒,否则报超时错误
search_input = (ce_of_element_located((, '//*[@id="kw"]')))
# 在搜索框输⼊搜索的关键字
search__keys(keyword)
# 回车
search__keys()
# 等待10秒钟
itly_wait(10)
# 找到所有的搜索结果
results = _elements_by_css_selector(".t a , em , .c-title-text")
# 遍历所有的搜索结果
with open("search_","w") as file:
for result in results:
if _attribute("href"):
print(_attribute("text").strip())
# 搜索结果的标题
title = _attribute("text").strip()
# 搜索结果的⽹址
link = _attribute("href")
# 写⼊⽂件
(f"Title: {title}, link is: {link} n")
点位⽹页元素
这⾥头有个关键点,就是如何点位⽹页元素:
⽐如:
search_input = (ce_of_element_located((, '//*[@id="kw"]')))
还有:
_elements_by_css_selector(".t a , em , .c-title-text")
打个⽐⽅,快递员通过地址找到你家,给你送快递,这⾥的XPATH和CSS Selector就是⽹页元素的地址,那么如何得到呢?
第⼀个就是Chrome⾃带的开发者⼯具,可以快捷键F12,也可以⾃⼰在下图中找到:
然后在百度搜索框,右键:
找到输⼊框的HTML元素,
在HTML元素右键,拷贝XPath地址。
这是⽐较简单的定位⽹页元素的⽅法。接下来我们定位搜索结果元素的时候,就遇到了⿇烦,如下图:
我们不能单独的定位每个元素,⽽是要找到规律,⼀次把所有的搜索结果找到,然后返回⼀个list,我们好遍历这个list,这个怎么实现呢?
接下来,我们请出⼀⼤神器:SelectorGadget
SelectorGadget是⼀个CSS Selector⽣成器,⼤家可以在他的官⽅⽂档找到具体的使⽤说明,我这⾥简单介绍⼀下:
⾸先启动SelectorGadget,点击⼀下图标
浏览器会出现下⾯的框框:
我们就可以拷贝框框⾥的内容作为CSS Selector了。
通过CSS Selector找到所有的搜索结果。
results = _elements_by_css_selector(".t a , em , .c-title-text")
到此,我们就实现了这么个简单的⼩应⽤了,其实selenium就是帮助我们⾃动操作⽹页元素,所以我们定位⽹页元素就是重中之重,希望本⽂给你带来⼀点帮助。
下⾯我附上代码:
from datetime import time
from selenium import webdriver
from webdriver_ import ChromeDriverManager
from import By
from import WebDriverWait
from t import expected_conditions as EC
from import Keys
class Search_Baidu:
def __init__(self):
url = '/'
= url
options = Options()
_experimental_option("prefs", {"d_default_content_": 2}) # 不加载图⽚,加快访问速度
_experimental_option('excludeSwitches', ['enable-automation']) # 此步骤很重要,设置为开发者模式,防⽌被各⼤⽹站识别出来使⽤了Selenium
with open("search_","w") as file:
for result in results:
if _attribute("href"):
print(_attribute("text").strip())
# 搜索结果的标题
title = _attribute("text").strip()
# 搜索结果的⽹址
link = _attribute("href")
# 写⼊⽂件
(f"Title: {title}, link is: {link} n")
发布评论