我正在尝试为此网站抓取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)答案 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或可能是无意的。
查看图像中标记文本的第一行和最后一行,两个标签,从而使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模式匹配器从“行”(请参见您的代码)中找到所需的元素。