代码之家  ›  专栏  ›  技术社区  ›  Ebad Ali

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

  •  2
  • Ebad Ali  · 技术社区  · 6 年前

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

    当我尝试调试代码时,response对象拥有来自网页的所有数据,但是当我尝试打印数据时,它只显示来自页面中某个点的数据。

    代码如下:

    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 回复  |  直到 6 年前
        1
  •  2
  •   Austin Mackillop    6 年前

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

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

    在Spyder(windows)上,它是“工具”>“首选项”>“IPython控制台”>“缓冲区”(位于底部)。

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

        2
  •  0
  •   bigbounty    6 年前

    我使用'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