如何使用 lxml 从 xpath 获取所有文本
How to get all text from an xpath using lxml
我目前有以下
u = 'https://www.cruiseplum.com/search#{%22numPax%22:2,%22geo%22:%22US%22,%22portsMatchAll%22:true,%22numOptionsShown%22:100,%22ppdIncludesTaxTips%22:true,%22uiVersion%22:%22split%22,%22sortTableByField%22:%22dd%22,%22sortTableOrderDesc%22:false,%22filter%22:null}'
driver = webdriver.Chrome()
driver.get(u)
driver.maximize_window()
time.sleep(.3)
driver.find_element_by_id('restoreSettingsYesEncl').click() # select 'yes' on the webpage to restore settings
time.sleep(7) # wait until the website downloads data so we get a return value
elem = driver.find_element_by_xpath("//*")
source_code = elem.get_attribute("innerHTML")
t = html.fromstring(source_code)
for i in t.xpath('//td[@class="dc-table-column _2"]/text()'):
print(i.strip())
这样做的目的是从代码中列出的网页中获取文本。我 运行 遇到的问题是 "Route" 列中是否列出了两个端口。我目前拥有的代码会将其打印在 2 个单独的行上。
这是我遇到问题的示例 html:
<td class="dc-table-column _2">Fort Lauderdale <i class="fa fa-long-arrow-right"></i> Venice</td>
对于这个例子,它将在第 1 行打印 "Fort Lauderdale",然后在第 2 行打印 "Venice"。我希望能够在一行上打印它们。
正如 所指出的,这只是您打印结果方式的结果。
print()
为它打印的每个字符串添加一个换行符。
替代打印方式
results = t.xpath('//td[@class="dc-table-column _2"]/text()')
print(" ".join([r.strip() for r in results]))
输出
Barcelona Martinique Martinique Doha Doha Fort Lauderdale Venice Miami Miami Miami Miami [...]
我目前有以下
u = 'https://www.cruiseplum.com/search#{%22numPax%22:2,%22geo%22:%22US%22,%22portsMatchAll%22:true,%22numOptionsShown%22:100,%22ppdIncludesTaxTips%22:true,%22uiVersion%22:%22split%22,%22sortTableByField%22:%22dd%22,%22sortTableOrderDesc%22:false,%22filter%22:null}'
driver = webdriver.Chrome()
driver.get(u)
driver.maximize_window()
time.sleep(.3)
driver.find_element_by_id('restoreSettingsYesEncl').click() # select 'yes' on the webpage to restore settings
time.sleep(7) # wait until the website downloads data so we get a return value
elem = driver.find_element_by_xpath("//*")
source_code = elem.get_attribute("innerHTML")
t = html.fromstring(source_code)
for i in t.xpath('//td[@class="dc-table-column _2"]/text()'):
print(i.strip())
这样做的目的是从代码中列出的网页中获取文本。我 运行 遇到的问题是 "Route" 列中是否列出了两个端口。我目前拥有的代码会将其打印在 2 个单独的行上。
这是我遇到问题的示例 html:
<td class="dc-table-column _2">Fort Lauderdale <i class="fa fa-long-arrow-right"></i> Venice</td>
对于这个例子,它将在第 1 行打印 "Fort Lauderdale",然后在第 2 行打印 "Venice"。我希望能够在一行上打印它们。
正如
print()
为它打印的每个字符串添加一个换行符。
替代打印方式
results = t.xpath('//td[@class="dc-table-column _2"]/text()')
print(" ".join([r.strip() for r in results]))
输出
Barcelona Martinique Martinique Doha Doha Fort Lauderdale Venice Miami Miami Miami Miami [...]