重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍了Python中如何使用Selenium自动进行百度搜索的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python中如何使用Selenium自动进行百度搜索文章都会有所收获,下面我们一起来看看吧。
10年积累的成都做网站、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有东海免费网站建设让你可以放心的选择与我们合作。
可以使用 pip 安装 Python 的 Selenium 库:pip install selenium
(可选项:要执行项目并控制浏览器,需要安装特定于浏览器的 WebDriver 二进制文件。
下载 WebDriver 二进制文件 并放入 系统 PATH 环境变量 中.)
由于本地浏览器版本升级,引起的版本不一致问题,和系统PATH环境变量的设置比较繁琐,所以我使用webdriver_manager,
安装 Install manager:
pip install webdriver-manager
引入模块:
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from 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} ")
这里头有个关键点,就是如何点位网页元素:
比如:
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,也可以自己在下图中找到:
然后在百度搜索框,右键:
找到输入框的HTML元素,
在HTML元素右键,拷贝XPath地址。
这是比较简单的定位网页元素的方法。接下来我们定位搜索结果元素的时候,就遇到了麻烦,如下图:
我们不能单独的定位每个元素,而是要找到规律,一次把所有的搜索结果找到,然后返回一个list,我们好遍历这个list,这个怎么实现呢?
接下来,我们请出一大神器:SelectorGadget
SelectorGadget是一个CSS Selector生成器,大家可以在他的官方文档找到具体的使用说明,我这里简单介绍一下:
首先启动SelectorGadget,点击一下图标
浏览器会出现下面的框框:
然后我们在网页用鼠标左键,点击我们要定位的元素
然后页面会变成下面的样子:
所有黄色的部分说明都被选择了,如果我们不想要的元素,右键点击,使它变为红色,说明它被去掉了。如果没有被选择我们又需要的元素,我们左键选择它,使它变为绿色。最后我们希望选择的页面元素都变成了绿色或者黄色,如下图:
我们就可以拷贝框框里的内容作为CSS Selector了。
通过CSS Selector找到所有的搜索结果。
results = self.browser.find_elements_by_css_selector(".t a , em , .c-title-text")
到此,我们就实现了这么个简单的小应用了,其实selenium就是帮助我们自动操作网页元素,所以我们定位网页元素就是重中之重,希望本文给你带来一点帮助。
下面我附上代码:
from datetime import time from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.keys import Keys class 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} ") def tear_down(self): self.browser.close() if __name__ == "__main__": search = Search_Baidu() search.search("selenium") search.tear_down()
关于“Python中如何使用Selenium自动进行百度搜索”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Python中如何使用Selenium自动进行百度搜索”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注创新互联行业资讯频道。