2023年11月25日发(作者:)

Python使⽤Selenium⾃动进⾏百度搜索的实现

⽬录

安装 Selenium

写代码

点位⽹页元素

我们今天介绍⼀个⾮常适合新⼿的python⾃动化⼩项⽬,项⽬虽⼩,但是五脏俱全。它是⼀个⾃动化操作⽹页浏览器的⼩应⽤:打开浏览器,进⼊百度⽹页,搜索关键词,最后

把搜索结果保存到⼀个⽂件⾥。这个例⼦⾮常适合新⼿学习Python⽹络⾃动化,不仅能够了解如何使⽤Selenium,⽽且还能知道⼀些超级好⽤的⼩⼯具。

当然有⼈把操作⽹页,然后把⽹页的关键内容保存下来的应⽤⼀律称作⽹络爬⾍,好吧,如果你想这么爬取内容,随你。但是,我更愿意称它为⽹络机器⼈。

我今天介绍的项⽬使⽤SeleniumSelenium 是⽀持 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): #类构造函数,⽤于初始化seleniumwebdriver

url = '/' #这⾥定义访问的⽹络地址

= url

options = Options()

_experimental_option("prefs", {"d_default_content_": 2}) # 不加载图⽚,加快访问速度

_experimental_option('excludeSwitches', ['enable-automation']) # 此步骤很重要,设置为开发者模式,防⽌被各⼤⽹站识别出来使⽤了Selenium

# 这⾥使⽤chrome浏览器,⽽且使⽤我们刚才安装的webdriver_managerchrome 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")

打个⽐⽅,快递员通过地址找到你家,给你送快递,这⾥的XPATHCSS 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")