如何使用Python Selenium定位元素
由于技术的频繁变化,我们经常需要重新设计和重构网页或网站的内容。Selenium与Python的结合非常有用,可以从网页中提取所需的内容。Selenium是一个免费的开源自动化工具,用于评估跨多个平台的Web应用程序。Selenium测试脚本可以使用多种计算机语言编写,例如Java,C#,Python,NodeJS,PHP,Perl等。本Python Selenium文章介绍了使用两个不同的示例定位Selenium中网页元素的方法。在这两个示例中,我们使用新闻网站来提取内容。
要提取的元素定位-
打开要提取内容的网站。现在按鼠标右键并打开检查窗口。高亮显示网页中的元素或部分,并从检查窗口中查看其HTML设计规范。使用这些规范来定位元素。
示例1:使用Selenium和Python定位具有特定类名的div元素
步骤
- 步骤 1 - 首先下载与Chrome版本相同的Chrome驱动程序。现在将驱动程序保存在与Python文件存储在相同的文件夹中。
-
步骤 2 - 使用START_URL = “https://www.indiatoday.in/science”. Import BeautifulSoup进行解析。使用”class”为”story__grid”来定位div元素。
-
步骤 3 - 指定网站URL,并启动驱动程序获取URL。
-
步骤 4 - 使用BeautifulSoup解析获取的页面。
-
步骤 5 - 搜索所需类别的div标签。
-
步骤 6 - 提取内容。通过将提取的内容包含在HTML标签中,将其打印并转换为HTML格式。
-
步骤 7 - 写入输出HTML文件。运行程序。打开输出的HTML文件并检查结果。
示例
from selenium import webdriver
from bs4 import BeautifulSoup
import time
START_URL= "https://www.indiatoday.in/science"
driver = webdriver.Chrome("./chromedriver")
driver.get(START_URL)
time.sleep(10)
def scrape():
temp_l=[]
soup = BeautifulSoup(driver.page_source, "html.parser")
for div_tag in soup.find_all("div", attrs={"class", "story__grid"}):
temp_l.append(str(div_tag))
print(temp_l)
enclosing_start= "<html><head><link rel='stylesheet' " + "href='styles.css'></head> <body>"
enclosing_end= "</body></html>"
with open('restructuredarticle.html', 'w+', encoding='utf-16') as f:
f.write(enclosing_start)
f.write('\n' + '<p> EXTRACTED CONTENT START </p>'+'\n')
for items in temp_l:
f.write('%s' %items)
f.write('\n' + enclosing_end)
print("File written successfully")
f.close()
scrape()
输出
在命令窗口中运行Python文件 –
打开cmd窗口。首先,我们将在cmd窗口中检查输出。然后在浏览器中打开保存的html文件,以查看提取的内容。
示例2:使用Python的Selenium定位具有特定类名的h4元素
- 步骤1 - 首先下载与Chrome相同版本的chromedriver。现在将该驱动程序保存在与Python文件存储在同一文件夹中的位置。
-
步骤2 - 使用START_URL= “ https://jamiatimes.in/”.导入 用于解析的BeautifulSoup。使用”class”作为”entry-title title”来定位h4元素。
-
步骤3 - 指定网站URL,并启动驱动程序来获取URL。
-
步骤4 - 使用BeautifulSoup解析获取的页面。
-
步骤5 - 使用所需类进行h4标签的搜索。
-
步骤6 - 提取内容。将其打印出来并将其转换为html形式,将提取的内容放在HTML标签中。
-
步骤7 - 编写输出的HTML文件。运行程序。打开输出的HTML文件并检查结果。
示例
from selenium import webdriver
from bs4 import BeautifulSoup
import time
START_URL= "https://jamiatimes.in/"
driver = webdriver.Chrome("./chromedriver")
driver.get(START_URL)
time.sleep(10)
def scrape():
temp_l=[]
soup = BeautifulSoup(driver.page_source, "html.parser")
for h4_tag in soup.find_all("h4", attrs={"class", "entry-title title"}):
temp_l.append(str(h4_tag))
enclosing_start= "<html><head><link rel='stylesheet' " + "href='styles.css'></head> <body>"
enclosing_end= "</body></html>"
with open('restructuredarticle2.html', 'w+', encoding='utf-16') as f:
f.write(enclosing_start)
f.write('\n' + '<p> EXTRACTED CONTENT START </p>'+'\n')
for items in temp_l:
f.write('%s' %items)
f.write('\n' + enclosing_end)
print("File written successfully")
f.close()
print(temp_l)
scrape()
输出
在命令窗口中运行python文件−
打开cmd窗口。首先在cmd窗口中检查输出。然后打开保存的html文件在浏览器中查看提取的内容。
在这篇Python Selenium文章中,给出了两个不同的示例,展示了定位元素以进行爬虫的方法。在第一个示例中,使用Selenium定位div标签,然后从一个新闻网站上爬取指定的元素。在第二个示例中,定位h4标签,并从另一个新闻网站上提取所需的标题。