【发布时间】:2018-11-18 00:57:02
【问题描述】:
更新: 该代码只能暂时起作用。有 2000 多个加密货币,此时我有 492 个独特的文件及其历史记录。
当我尝试运行一个被自己跳过的 url 时,它可以工作。因此,我认为它已经缩小到与内容的要求有关。
在继续代码之前,是否可以确保我感兴趣的表已完全加载?
更新: 我让它正常工作。我认为您可以在我试图从中抓取的网站上每秒或分钟执行的请求是有限的。 我在每个请求之间延迟了 3 秒,现在它可以工作了!!!! 感谢你们俩的帮助。尽管它没有提供直接的答案,但它让我走上了正确的道路来弄清楚它。
from bs4 import BeautifulSoup
import requests
import pandas as pd
import time
def scraping(url):
global line
content = requests.get(url).content
soup = BeautifulSoup(content,'html.parser')
table = soup.find('table', {'class': 'table'})
if not table:
print(url)
return
data = [[td.text.strip() for td in tr.findChildren('td')] for tr in table.findChildren('tr')]
df = pd.DataFrame(data)
df.drop(df.index[0], inplace=True)
df[0] = pd.to_datetime(df[0])
for i in range(1,7):
df[i] = pd.to_numeric(df[i].str.replace(",","").str.replace("-",""))
df.columns = ['Date','Open','High','Low','Close','Volume','Market Cap']
df.set_index('Date',inplace=True)
df.sort_index(inplace=True)
return df.to_csv(line + '_historical_data.csv')
with open("list_of_urls.txt") as file:
for line in file:
time.sleep(3)
line = line.strip()
start = "https://coinmarketcap.com/currencies/"
end = "/historical-data/?start=20000101&end=21000101"
url = start + line + end
scraping(url)
【问题讨论】:
标签: python-3.x pandas beautifulsoup