网页抓取:请求不返回网页的完整内容



我正在编写一个网站抓取工具,可以从网站内的表格中保存所有加密货币的名称。我编写了一个脚本来获取网页的响应,然后使用BeautifulSoup库将响应解析为 HTML 对象。问题是响应未返回网页的完整内容。它显示来自表某个位置的数据,并跳过表上方的数据。

当我尝试调试代码时,响应对象包含网页中的所有数据,但当我尝试打印数据时,它仅显示页面中某个点的数据。

这是代码:

import requests
from bs4 import BeautifulSoup
response = requests.get("https://coinmarketcap.com/all/views/all", headers={'User-Agent': 'Mozilla/5.0'})
print(response.text)
soup = BeautifulSoup(response.text, 'html.parser')
results = soup.find_all('table', attrs={'id': 'currencies-all'})

如果有人能告诉我我做错了什么,因为我无法找出问题,那将非常有帮助。

是否有可能达到 IDE 控制台的缓冲区限制?

在Spyder上,默认值为500行,因此您只能看到500行源代码。尝试增加此限制,看看是否能解决您的问题。

在Spyder(Windows(上,它是>首选项的工具>IPython控制台>缓冲区(底部(。

我将缓冲区增加到 4000,它仍然不足以容纳整个页面,但它确实显示了更多行。

你在这里错过了一件事。表行嵌套在表标记中。因此,您需要先提取表正文,然后提取表行。 我使用"lxml"解析器。

import requests
from bs4 import BeautifulSoup
response = requests.get("https://coinmarketcap.com/all/views/all", headers={'User-Agent': 'Mozilla/5.0'})
print(response.text)
soup = BeautifulSoup(response.text, 'lxml')
results = soup.find('tbody')
curr_symbols = [x.text for x in results.find_all('td',attrs={'class':'text-left col-symbol'})]
print(curr_symbols)
print(len(curr_symbols)) # 1878

最新更新