Beautifulsoup выбирает тег для Pandas данных - PullRequest
2 голосов
/ 07 апреля 2020

Я сейчас работаю над своим квантовым проектом. Вот что я делаю: мне нужны данные из первых рук для работы, у меня есть способ загрузки исходных csv-файлов, однако это не лучший способ, потому что я не хочу бомбить серверы, скажем, каждые два или три дня с загрузкой 1GB.

У меня есть сборник всех данных за 5 лет. Я хочу написать код, который может обновлять новые записи и pd.concat() со старыми, что является более эффективным способом сделать это.

это URL и код, который у меня есть:

url = 'http://quotes.money.163.com/service/chddata.html?code=1000001&start=20200101&end=20200401'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) '
                  'AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
}
response = requests.get(url, headers=headers).content
soup = bs4.BeautifulSoup(response, 'lxml')
content = soup.select('p')[0]

и он возвращает:

<p>日期,股票代码,名称,...,流通市值,成交笔数
2020-04-01,000001,平安银行,...,2.50142285572e+11,2.50140272863e+11,32484
2020-03-31,000001,平安银行,...,2.48395752934e+11,2.48393754278e+11,32700
2020-03-30,000001,平安银行,...,2.51112581482e+11,2.51110560966e+11,37324
<..>
2020-01-06,000001,平安银行,...,3.3125902364e+11,3.31256358245e+11,48856
2020-01-03,000001,平安银行,...,3.33393674642e+11,3.33390992071e+11,58875
2020-01-02,000001,平安银行,...,3.2737784e+11,3.27375205834e+11,67692
</p>

моя следующая строка кода поражает меня проблемами:

df1 = pd.DataFrame(content.prettify())[0]

или другим подходом:

soup = bs4.BeautifulSoup(response, 'lxml').get_text()
df1 = pd.DataFrame(soup)

возвращает :

ValueError: DataFrame constructor not properly called!

Я не совсем уверен, как решить эту проблему. Не могли бы вы взглянуть на это? Спасибо.


Мой альтернативный способ - загрузить все последние записи на мой жесткий диск, можно их объединить.

1 Ответ

2 голосов
/ 07 апреля 2020

Вы можете считывать данные напрямую из онлайн CSV


import pandas as pd

URI = 'http://quotes.money.163.com/service/chddata.html?code=1000001&start=20200101&end=20200401'

df = pd.read_csv(URI, encoding='euc_kr')

Я не уверен, какая кодировка используется без тестирования, но этот код должен возвращать значения.

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