Очистка: проблемы с получением данных таблицы при зацикливании запроса - PullRequest
0 голосов
/ 18 ноября 2018

ОБНОВЛЕНИЕ: код работает только на мгновение.Существует более 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)

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

это может быть URL не найден 404 или на странице нет таблицы. Для отладки нормализуйте ваш цикл и распечатайте текущую обработку Crypto name

table = soup.find('table', {'class': 'table'})
if not table:
    print('no table')
    return
0 голосов
/ 18 ноября 2018

Вы можете выполнить findChildren() только из возвращенных table и tr объектов, отличных от NoneType, следующим образом:

data = [[td.text.strip() for td in tr.findChildren('td') if td] for tr in table.findChildren('tr') if tr] if table else []
if len(data) > 0:
    # process your data here

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...