无法通过网络抓取所有数据,未获取所有值

时间:2018-08-14 07:51:55

标签: python web-scraping

我正在尝试为此网站抓取html表,但无法获取chhange(24h)列

from requests import get
from urllib.request import urlopen
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt

content = urlopen("https://coinmarketcap.com/")
soup = BeautifulSoup(content, 'html.parser')
rows = soup.find_all('tr')
for row in rows:
    row.find('td', {'data-timespan': '24h'}).text)

当我们尝试调试包含该标记的

时,无法获取用于更改的标记(24h)

2 个答案:

答案 0 :(得分:0)

嘿,您可以使用我制作的包装... https://github.com/sarthaknegi/easy_scrape

简单

from easy_scrape.scrape_table import scrape_table

scrape_obj =scrape_table(#give your path to the chrome driver)
data = scrape_obj.table(url = 'https://coinmarketcap.com/' , class_name='dataTable')

注意:不要忘记

  

pip安装硒和   点安装easy_scrape

注意:另外,请根据需要编辑结果

PS:请检查其robots.txt

答案 1 :(得分:0)

源页面显示,它们关闭了一个额外的锚标记,就在您需要的元素附近。因此,bsoup无法获得它。可能是有意的,以便引入一些复杂性,供人们淘汰。 :P或可能是无意的。

enter image description here

查看图像中标记文本的第一行和最后一行,两个标签,从而使bSoup的DOM解析器混乱。

解决方案是,直接查找那些元素,而不是遍历每个元素的子元素,原因是存在该罪魁祸首的标记。

from requests import get
from urllib.request import urlopen
from bs4 import BeautifulSoup


content = urlopen("https://coinmarketcap.com/")
soup = BeautifulSoup(content, 'html.parser')

rows = soup.find_all('td', {'data-timespan': '24h'})

for row in rows:
    print(row)

这给出了您想要的。 另一种方法是通过循环中的RegExp模式匹配器从“行”(请参见您的代码)中找到所需的元素。