gpt4 book ai didi

python - BeautifulSoup 没有正确解析 数据

转载 作者:行者123 更新时间:2023-11-28 17:10:03 25 4
gpt4 key购买 nike

我正在尝试解析 this page将 BeatifulSoup4 与 Python2.7.5 结合使用。我的代码如下所示:

url = "https://coinmarketcap.com/currencies/CRYPTO/historical-data/?
start=20171124&end=20171130"
url.replace('CRYPTO', crypto['id'])
response = urllib2.urlopen(url)

data = response.read()
soup = BeautifulSoup(data, 'html5lib')

trs = soup.find(id="historical-data").findAll('tr')

其中 CRYPTO 被“比特币”等取代。

查看 PyCharm 中的变量,除了表中的数据外,一切看起来都不错。而不是看到这个:

<tr class="text-right">
<td class="text-left">Nov 30, 2017</td>
<td>9906.79</td>
<td>10801.00</td>
<td>9202.05</td>
<td>10233.60</td>
<td>8,310,690,000</td>
<td>165,537,000,000</td>
</tr>

这是 Google Chrome 浏览器的检查窗口和 curl 向我展示的,BeautifulSoup 向我展示了这个:

<tr class="text-right">
<td class="text-left">Nov 30, 2017</td>
<td>0.009829</td>
<td>0.013792</td>
<td>0.009351</td>
<td>0.013457</td>
<td>152</td>
<td>119,171</td>
</tr>

为什么数字不同?

我已经使用了 urllib2 和请求。我使用了 response.text 和 response.read()。我已经使用 lxml 和 html5lib 进行了解析。我尝试过不同的编码,例如 iso-8859 和 ascii。什么都没用。

如何让正确的数字显示?

最佳答案

您需要改为执行以下操作:

url = "https://coinmarketcap.com/currencies/CRYPTO/historical-data/?
start=20171124&end=20171130"
response = urllib2.urlopen(url.replace('CRYPTO', crypto['id']))

...或者更明确地说明正在发生的事情:

url = "https://coinmarketcap.com/currencies/CRYPTO/historical-data/?
start=20171124&end=20171130"
newurl = url.replace('CRYPTO', crypto['id'])
response = urllib2.urlopen(newurl)

...因为就像您现在的代码一样,您的 url.replace('CRYPTO', crypto['id']) 本身不会改变任何东西;相反,它只是创建一个新字符串,但从不对该新字符串执行任何操作。

您的代码没有更改 url 字符串,因为这不是 string.replace(…) 的方式有效——而不是 Python 字符串的工作方式。

因此,您当前的代码发生的情况是,在您调用 urllib2.urlopen(...) 之前,URL 中的 CRYPTO 子字符串没有被替换。因此,您获得的结果来自此 URL:

https://coinmarketcap.com/currencies/CRYPTO/historical-data/?start=20171124&end=20171130

关于python - BeautifulSoup 没有正确解析 <td> 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48197987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com