在BS4中获取`list`对象没有属性错误
Getting `list` object no attribute error in BS4
我是 bs4
的新手,我正在尝试通过为加密货币构建价格机器人来进行试验。这是我到目前为止的代码:
import requests
import bs4
import csv
from datetime import datetime
def remove_all_whitespace(x):
try:
x = x.replace(" ", "")
except:
pass
return x
def trim_the_ends(x):
try:
x = x.strip(' \t\n\r')
except:
pass
return x
def remove_unneeded_chars(x):
try:
x = x.replace("$", "").replace("RRP", "")
except:
pass
return x
URL = ("https://coinmarketcap.com/assets/golem-network-tokens/")
response = requests.get(URL)
soup = bs4.BeautifulSoup(response.text)
price = soup.select("span#quote_price.text-large").get_text()
print (price)
但是我收到这个错误:
AttributeError: 'list' object has no attribute 'get_text'
我做错了什么?据我了解 .select
不适用于 list
项目,但我如何拉 list
?
是的,soup.select()
returns 一个 list 匹配项;选择器可以匹配 0 次或多次。
如果您只想检索 一个 匹配项,请使用 soup.select_one()
方法,即 returns 第一个匹配项,或者 None
如果没有匹配项:
price = soup.select_one("span#quote_price.text-large").get_text()
但是,您加载的页面不包含该信息。该页面改为使用 Javascript 通过 AJAX 加载数据。 requests
不是浏览器,不会加载外部资源或执行 Javascript 代码。
页面从 https://graphs.coinmarketcap.com/currencies/golem-network-tokens/ 加载价格,改为加载:
>>> import requests
>>> r = requests.get('https://graphs.coinmarketcap.com/currencies/golem-network-tokens/')
>>> data = r.json()
>>> data['price_usd'][-1][1]
0.309104
该列表中每个条目的第一个元素是以微秒为单位的时间戳:
>>> from datetime import datetime
>>> datetime.fromtimestamp(data['price_usd'][-1][0] / 1000)
datetime.datetime(2017, 8, 29, 18, 34, 46)
不过您可能应该使用他们的 published API:
https://api.coinmarketcap.com/v1/ticker/golem-network-tokens/
我是 bs4
的新手,我正在尝试通过为加密货币构建价格机器人来进行试验。这是我到目前为止的代码:
import requests
import bs4
import csv
from datetime import datetime
def remove_all_whitespace(x):
try:
x = x.replace(" ", "")
except:
pass
return x
def trim_the_ends(x):
try:
x = x.strip(' \t\n\r')
except:
pass
return x
def remove_unneeded_chars(x):
try:
x = x.replace("$", "").replace("RRP", "")
except:
pass
return x
URL = ("https://coinmarketcap.com/assets/golem-network-tokens/")
response = requests.get(URL)
soup = bs4.BeautifulSoup(response.text)
price = soup.select("span#quote_price.text-large").get_text()
print (price)
但是我收到这个错误:
AttributeError: 'list' object has no attribute 'get_text'
我做错了什么?据我了解 .select
不适用于 list
项目,但我如何拉 list
?
是的,soup.select()
returns 一个 list 匹配项;选择器可以匹配 0 次或多次。
如果您只想检索 一个 匹配项,请使用 soup.select_one()
方法,即 returns 第一个匹配项,或者 None
如果没有匹配项:
price = soup.select_one("span#quote_price.text-large").get_text()
但是,您加载的页面不包含该信息。该页面改为使用 Javascript 通过 AJAX 加载数据。 requests
不是浏览器,不会加载外部资源或执行 Javascript 代码。
页面从 https://graphs.coinmarketcap.com/currencies/golem-network-tokens/ 加载价格,改为加载:
>>> import requests
>>> r = requests.get('https://graphs.coinmarketcap.com/currencies/golem-network-tokens/')
>>> data = r.json()
>>> data['price_usd'][-1][1]
0.309104
该列表中每个条目的第一个元素是以微秒为单位的时间戳:
>>> from datetime import datetime
>>> datetime.fromtimestamp(data['price_usd'][-1][0] / 1000)
datetime.datetime(2017, 8, 29, 18, 34, 46)
不过您可能应该使用他们的 published API:
https://api.coinmarketcap.com/v1/ticker/golem-network-tokens/