您好,欢迎来到重庆城乡网!
 
用户名: 密码: 看不清楚请点击刷新验证码 登录/免费注册   帮助中心
免费发布您的乡村旅游、基地、农副产品等信息!免费开通网站
首页 > IT常识 > 列表

Python使用Selenium自动进行百度搜索的实现

发布时间: 2023/3/10 16:48:38 人气: 747
目录安装 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 webdriverfrom webdriver_manager.chrome import ChromeDriverManagerfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.keys import Keys

首先我们定义一个类Search_Baidu, 它主要用于初始化;定义自动化步骤的方法;结束关闭浏览器。

class Search_Baidu:def __init__(self):def search(self, keyword):def tear_down(self):

接下来我们分别介绍每个方法的实现过程。

def __init__(self): #类构造函数,用于初始化selenium的webdriver url = ’https://www.baidu.com/’ #这里定义访问的网络地址 self.url = url options = webdriver.ChromeOptions() options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2}) # 不加载图片,加快访问速度 options.add_experimental_option(’excludeSwitches’, [’enable-automation’]) # 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium# 这里使用chrome浏览器,而且使用我们刚才安装的webdriver_manager的chrome driver,并赋值上面的浏览器设置options变量 self.browser = webdriver.Chrome(ChromeDriverManager().install(), options=options) self.wait = WebDriverWait(self.browser, 10) #超时时长为10s,由于自动化需要等待网页控件的加载,所以这里设置一个默认的等待超时,时长为10秒 def tear_down(self): self.browser.close() #最后,关闭浏览器

接下来是重头戏,写我们操作浏览器的步骤,打开浏览器,进入百度网页,输入搜索关键字:Selenium,等待搜索结果,把搜索结果的题目和网址保存到文件里。

def search(self, keyword): # 打开百度网页 self.browser.get(self.url) # 等待搜索框出现,最多等待10秒,否则报超时错误 search_input = self.wait.until(EC.presence_of_element_located((By.XPATH, ’//*[@id="kw"]’))) # 在搜索框输入搜索的关键字 search_input.send_keys(keyword) # 回车 search_input.send_keys(Keys.ENTER) # 等待10秒钟 self.browser.implicitly_wait(10) # 找到所有的搜索结果 results = self.browser.find_elements_by_css_selector(".t a , em , .c-title-text") # 遍历所有的搜索结果 with open("search_result.txt","w") as file: for result in results: if result.get_attribute("href"): print(result.get_attribute("text").strip()) # 搜索结果的标题 title = result.get_attribute("text").strip() # 搜索结果的网址 link = result.get_attribute("href") # 写入文件 file.write(f"Title: {title}, link is: {link} n")

点位网页元素

这里头有个关键点,就是如何点位网页元素:

比如:

search_input = self.wait.until(EC.presence_of_element_located((By.XPATH, ’//*[@id="kw"]’)))

还有:

self.browser.find_elements_by_css_selector(".t a , em , .c-title-text")

打个比方,快递员通过地址找到你家,给你送快递,这里的XPATH和CSS Selector就是网页元素的地址,那么如何得到呢?
第一个就是Chrome自带的开发者工具,可以快捷键F12,也可以自己在下图中找到:

Python使用Selenium自动进行百度搜索的实现

然后在百度搜索框,右键:

Python使用Selenium自动进行百度搜索的实现

找到输入框的HTML元素,

在HTML元素右键,拷贝XPath地址。

Python使用Selenium自动进行百度搜索的实现

这是比较简单的定位网页元素的方法。接下来我们定位搜索结果元素的时候,就遇到了麻烦,如下图:

Python使用Selenium自动进行百度搜索的实现

我们不能单独的定位每个元素,而是要找到规律,一次把所有的搜索结果找到,然后返回一个list,我们好遍历这个list,这个怎么实现呢?

接下来,我们请出一大神器:SelectorGadget

Python使用Selenium自动进行百度搜索的实现

SelectorGadget是一个CSS Selector生成器,大家可以在他的官方文档找到具体的使用说明,我这里简单介绍一下:
首先启动SelectorGadget,点击一下图标

浏览器会出现下面的框框:

Python使用Selenium自动进行百度搜索的实现

然后我们在网页用鼠标左键,点击我们要定位的元素

Python使用Selenium自动进行百度搜索的实现

然后页面会变成下面的样子:

所有黄色的部分说明都被选择了,如果我们不想要的元素,右键点击,使它变为红色,说明它被去掉了。如果没有被选择我们又需要的元素,我们左键选择它,使它变为绿色。最后我们希望选择的页面元素都变成了绿色或者黄色,如下图:

Python使用Selenium自动进行百度搜索的实现

我们就可以拷贝框框里的内容作为CSS Selector了。

Python使用Selenium自动进行百度搜索的实现

通过CSS Selector找到所有的搜索结果。

results = self.browser.find_elements_by_css_selector(".t a , em , .c-title-text")

到此,我们就实现了这么个简单的小应用了,其实selenium就是帮助我们自动操作网页元素,所以我们定位网页元素就是重中之重,希望本文给你带来一点帮助。

下面我附上代码:

from datetime import timefrom selenium import webdriverfrom webdriver_manager.chrome import ChromeDriverManagerfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.keys import Keysclass Search_Baidu: def __init__(self): url = ’https://www.baidu.com/’ self.url = url options = webdriver.ChromeOptions() options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2}) # 不加载图片,加快访问速度 options.add_experimental_option(’excludeSwitches’, [’enable-automation’]) # 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium self.browser = webdriver.Chrome(ChromeDriverManager().install(), options=options) self.wait = WebDriverWait(self.browser, 10) #超时时长为10s def search(self, keyword): # 打开百度网页 self.browser.get(self.url) # 等待搜索框出现,最多等待10秒,否则报超时错误 search_input = self.wait.until(EC.presence_of_element_located((By.XPATH, ’//*[@id="kw"]’))) # 在搜索框输入搜索的关键字 search_input.send_keys(keyword) # 回车 search_input.send_keys(Keys.ENTER) # 等待10秒钟 self.browser.implicitly_wait(10) # 找到所有的搜索结果 results = self.browser.find_elements_by_css_selector(".t a , em , .c-title-text") # 遍历所有的搜索结果 with open("search_result.txt","w") as file: for result in results: if result.get_attribute("href"): print(result.get_attribute("text").strip()) # 搜索结果的标题 title = result.get_attribute("text").strip() # 搜索结果的网址 link = result.get_attribute("href") # 写入文件 file.write(f"Title: {title}, link is: {link} n") def tear_down(self): self.browser.close()if __name__ == "__main__": search = Search_Baidu() search.search("selenium") search.tear_down()


·上篇:电脑常识及技巧大全(关于计算机的一些基本知识)
·下篇:python实现自动化办公邮件合并功能
还没有对此评论!
评论
☆☆ ☆☆☆ ☆☆☆☆ ☆☆☆☆☆
推荐游玩
重庆涪陵大木花谷内心怡农家主营:餐饮、休闲、观光、娱乐等,农家乐设有住宿,能同时容纳40人住宿
地址:重庆市涪陵区大木花谷内 13883571610
人气:523    加入时间:2023-11-06      地区:【涪陵区
璧山很有情调的一个农场璧山本草传说农场(民宿、农家乐),团建、野炊、住宿为一体的游玩场地
地址:璧山区正兴镇沙塝村四组 17323964384
人气:3524    加入时间:2023-04-13      地区:【壁山区
巴南云篆山知青山庄,体验知青年代的回忆,会议娱乐一体
地址:重庆市巴南区云纂山风景区 18725813430
人气:4701    加入时间:2022-09-14      地区:【巴南区
巴南天星寺镇花房筑·明院
地址:重庆市巴南区天星寺镇花房村董上组 18725813430
人气:5863    加入时间:2022-06-22      地区:【巴南区
歌乐山上天池度假村度假游玩的好去处(农家乐)
地址:重庆市沙坪坝区歌乐山镇天池村 13883571610
人气:8526    加入时间:2022-04-09      地区:【沙坪坝
巴南云篆山网红打卡地徐掌柜北方部落民宿,等你来打卡!特色烧烤】二日游:特色坑烤2人+特色住宿1间(大
地址:重庆市巴南区鱼洞云篆山一社24号 13883571610
人气:5683    加入时间:2021-08-28      地区:【巴南区
重庆沙坪坝歌乐山海石公园石林城堡烧烤:自助烧烤畅吃不限+景区游玩+机麻+植树+甜点
地址:重庆市·沙坪坝区·中梁镇·歌乐山北部环形山麓重庆海石公园 15086617639
人气:6088    加入时间:2021-08-26      地区:【沙坪坝
重庆江津区雨仙农谷民宿,农家乐酒店,水果采摘 | 蔬菜采摘 | 骑马 | 插秧 | 摸鱼
地址:江津区保坪村雨仙农谷稻田设计师酒店 17323964384
人气:11923    加入时间:2021-08-18      地区:【江津区
巴南丰盛镇彩色森林云山房乡村艺术酒店
地址:重庆市·巴南区·丰盛镇·重庆市巴南区丰盛镇油房村茶山 15086617639
人气:4376    加入时间:2021-07-29      地区:【巴南区
铜梁爱莲湖度假酒店,土桥荷花园
地址:铜梁区·土桥镇·庆林村20社(爱莲湖湿地公园) 18580200652
人气:5416    加入时间:2021-07-29      地区:【铜梁区
  • 推荐阅读
  • 推荐农业基地