网页搜罗:请求不返回网页的完整内容

时间:2018-08-22 23:03:27

标签: python python-3.x web-scraping beautifulsoup python-requests

我正在写一个网站抓取工具,该抓取工具保存了网站内表格中所有加密货币的名称。我编写了一个脚本来获取网页的响应,然后使用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'})

如果有人可以告诉我我在做什么错,因为我无法找出问题,这将非常有帮助。

2 个答案:

答案 0 :(得分:2)

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

在Spyder上,默认值为500行,结果您将仅看到500行的源代码。尝试增加此限制以查看是否可以解决您的问题。

在Spyder(窗口)上,依次是工具>首选项> IPython控制台>缓冲区(在底部)。

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

答案 1 :(得分:0)

您在这里错过了一件事。表行嵌套在表标记内。因此,您需要首先提取表主体,然后提取表行。 我使用“ 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