使用带有请求和lxml的xpath进行抓取,但遇到问题

问题描述 投票:0回答:2

当我使用 xpath 使用 lxml 抓取数据时,我不断遇到问题。我想抓取道琼斯指数价格,但是当我用 python 打印出来时,它显示元素跨度为 0x448d6c0。我知道那一定是一块内存,但我只想要价格。如何打印价格而不是内存中的位置?

from lxml import html
import requests

page = requests.get('https://markets.businessinsider.com/index/realtime- 
chart/dow_jones')
content = html.fromstring(page.content)

#This will create a list of prices:
prices = content.xpath('//*[@id="site"]/div/div[3]/div/div[3]/div[2]/div/table/tbody/tr[1]/th[1]/div/div/div/span')

#This will create a list of volume:


print (prices)
python web-scraping python-requests lxml
2个回答
3
投票

你得到的生成器正如你所说的只是内存位置。要访问它们,您需要对它们调用一个函数,在本例中,您需要这样的文本

.text

此外,我强烈建议更改您的 XPath,因为它是字面位置并且可能会发生更改。

prices = content.xpath("//div[@id='site']//div[@class='price']//span[@class='push-data ']")
prices_holder = [i.text for i in prices]
prices_holder
 ['25,389.06',
 '25,374.60',
 '7,251.60',
 '2,813.60',
 '22,674.50',
 '12,738.80',
 '3,500.58',
 '1.1669',
 '111.7250',
 '1.3119',
 '1,219.58',
 '15.43',
 '6,162.55',
 '67.55']

还值得注意的是,您只会在加载时获得值。如果您想要价格变化,您可能需要使用 Selenium。


1
投票
变量

prices

 是一个包含 Web 元素的列表。您需要调用文本方法来提取值。 

print(prices[0].text) '25,396.03'
    
© www.soinside.com 2019 - 2024. All rights reserved.