如何使用python selenium从svg中提取文本
我正试图从链接中获取价格: 价格显示在svg标签内的文本标签中 当我使用xpath时:如何使用python selenium从svg中提取文本,python,selenium,svg,web-scraping,Python,Selenium,Svg,Web Scraping,我正试图从链接中获取价格: 价格显示在svg标签内的文本标签中 当我使用xpath时: //*[name()='svg']/*[name()='g']//*[name()='text']在浏览器的inspect元素中,我能够找到标记。但是相同的xpath在代码中不起作用 目前的代码是: def get_price(url): driver.get(url) time.sleep(10) try: price_xpaths = driver.find_el
//*[name()='svg']/*[name()='g']//*[name()='text']
在浏览器的inspect元素中,我能够找到标记。但是相同的xpath在代码中不起作用
目前的代码是:
def get_price(url):
driver.get(url)
time.sleep(10)
try:
price_xpaths = driver.find_elements_by_xpath(".//*[name()='svg']//*[name()='g']//*[name()='text']")
except:
print("price not found")
for p in price_tags:
print(p.text)
当我运行上述代码时,我得到一个空白列表,返回函数find_elements_by_xpath。
我尝试了其他方法,比如切换到默认内容,因为元素位于#document
driver.switch_to_default_content()
但这也没能奏效。
如果有任何其他方法来削价,请让我知道。它是外部的
SVG
,似乎Selenium在DOM中没有它,所以我必须得到
,它有这个SVG
文件的url,在数据中获得这个url,使用请求下载它,并使用美化组获取文本
from selenium import webdriver
import time
import requests
from bs4 import BeautifulSoup
url = 'https://www.kbb.com/cadillac/deville/1996/sedan-4d/'
driver = webdriver.Firefox()
driver.get(url)
time.sleep(5)
# doesn't work - always empty list
#price_xpaths = driver.find_elements_by_xpath(".//*[name()='svg']//*[name()='g']//*[name()='text']")
#price_xpaths = driver.find_elements_by_xpath('//svg')
#price_xpaths = driver.find_elements_by_xpath('//svg//g//text')
#price_xpaths = driver.find_elements_by_xpath('//*[@id="PriceAdvisor"]')
#print(price_xpaths) # always empty list
# single element `object`
svg_item = driver.find_element_by_xpath('//object[@id="PriceAdvisorFrame"]')
# doesn't work - always empty string
#print(svg_item.get_attribute('innerHTML'))
# get url to file SVG
svg_url = svg_item.get_attribute('data')
print(svg_url)
# download it and parse
r = requests.get(svg_url)
soup = BeautifulSoup(r.content, 'html.parser')
text_items = soup.find_all('text')
for item in text_items:
print(item.text)
结果:
Fair Market Range
$1,391 - $2,950
Fair Purchase Price
$2,171
Typical
Listing Price
$2,476
顺便说一句:其他用户信息:我必须使用位于US
的proxy/with-IP来查看此页面。对于位置PL
,显示
Access Denied.
You don't have permission to access "http://www.kbb.com/cadillac/deville/1996/sedan-4d/" on this server.
有时甚至对于美国的位置
它也会给我这条信息。总是把完整的错误信息(从单词“Traceback”开始)作为文本(而不是截图)放在问题中(不是评论)。还有其他有用的信息。请首先尝试获取svg
,如果获取它没有问题,请尝试下一个元素,然后再尝试另一个元素,以查看哪个元素有问题。顺便说一句:如果它是tag
,那么也许你应该使用//……
顺便说一句:你的链接只给我一条消息访问被拒绝。您没有访问“”的权限http://www.kbb.com/cadillac/deville/1996/sedan-4d/“在此服务器上。
-因此无法查看HTML并测试代码。代码中没有错误,但可以说是‘elementnotfound’错误。如果重定向到页面时遇到‘访问被拒绝’,请尝试使用vpn。”。