我正在编写一个自动化代码,以从网站上刮取独立的保险代理人的姓名,地址和邮政编码。我似乎无法识别正确的xpath或编写正确的代码集来获取要打印的元素。我正处在流程的开始阶段,现在我正要打印出代理商名称,然后再转到代理商的地址和邮政编码。
我尝试使用css选择器和xpath来识别和打印数据。该网站使用Javascript运行,因此当我尝试在Anaconda上进行编码并使用Scrapy时,蜘蛛只会抓取加载页面的html,而不会抓取随后出现的代理列表,因此我着手将Selenium与PyCharm结合使用。我已经尝试了很多不同的方式输入xpath,但是我得到的结果大致相同或错误消息也很多。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import NoSuchAttributeException
from selenium.webdriver.remote.webelement import WebElement
# My Chrome webdriver
driver = webdriver.Chrome(executable_path="C:/Users/Owner/Desktop/chromedriver.exe")
# The website I'm scraping is here
url = "https://insurance-agent.safeco.com/find-an-insurance-
agency/app/search-results-locationSearch=Chicago,%2520IL"
driver.get(url)
# The wait so the results page gets scraped and not the loading page
driver.implicitly_wait(30)
# Identifying the xpath of the agent name
Agency_Name = driver.find_elements_by_xpath('//[@id="srpgLftAgencyName"]')
print(Agency_Name)
我得到的输出中有很多:
[<selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-1")>, <selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-2")>, <selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-3")>, <selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-4")>, <selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-5")>, <selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-6")>, <selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-7")>, <selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-8")>, <selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-9")>, <selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-10")>]
我要获取的只是代理商名称的纯文本,以便将其导出到Excel文档中。
(以下是我要查找的html中的确切元素:
<a id="srpgLftAgencyName" class="agencyTitle ng-binding" ng-
show="x.agencyPrimaryName != ' '" ng-href="/find-an-insurance-
agency/app/agency/2428293524282935" href="/find-an-insurance-
agency/app/agency/2428293524282935">
PJ NUNZIO AND ASSOCIATES, INC.
</a>
谢谢!)
答案 0 :(得分:0)
[agency.text for agency in Agency_Name]
答案 1 :(得分:0)
find_elements_by_xpath
()将返回列表,而不是WebElement
,因此,如果要获取元素文本,可以使用以下选项。
选项1:
#use index this will returns first match
Agency_Name = driver.find_elements_by_xpath('//[@id="srpgLftAgencyName"]')[0]
print(Agency_Name.text)
选项2:
#Use find_element this will return element
Agency_Name = driver.find_element_by_xpath('//[@id="srpgLftAgencyName"]')
print(Agency_Name.text)