使用带有请求和 lxml 的 xpath 进行抓取但有问题
Scraping with xpath with requests and lxml but having problems
当我使用 xpath 使用 lxml 抓取数据时,我一直 运行 遇到问题。我想抓取道指价格,但当我在 python 中打印出来时,它说 Element span at 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)
变量prices
是一个包含网络元素的列表。您需要调用文本方法来提取值。
print(prices[0].text)
'25,396.03'
你得到的生成器如你所说只是内存位置。要访问它们,您需要对它们调用一个函数,在这种情况下,您需要文本 .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。
当我使用 xpath 使用 lxml 抓取数据时,我一直 运行 遇到问题。我想抓取道指价格,但当我在 python 中打印出来时,它说 Element span at 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)
变量prices
是一个包含网络元素的列表。您需要调用文本方法来提取值。
print(prices[0].text)
'25,396.03'
你得到的生成器如你所说只是内存位置。要访问它们,您需要对它们调用一个函数,在这种情况下,您需要文本 .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。