#html #python #парсер #beautiful_soup
Не подскажете, как спарсить колонку Bitcoinprice таблицы с сайта MYIP.MS? Спарсить всю страницу могу, а вот как конкретную колонку таблицы не понимаю. from bs4 import BeautifulSoup from urllib.request import Request, urlopen site= "https://ru.myip.ms/browse/market_bitcoin/%D0%91%D0%B8%D1%82%D0%BA%D0%BE%D0%B8%D0%BD_%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D1%86%D0%B5%D0%BD.html#a" hdr = {'User-Agent': 'Mozilla/5.0'} req = Request(site,headers=hdr) page = urlopen(req) soup = BeautifulSoup(page, "lxml") print(soup) UPD. Разобрался с таблицей, но как можно спарсить остальные страницы таблицы, а не только 1ую?
Ответы
Ответ 1
Это возможно сделать через BeautifulSoup, но гораздо проще будет сделать это через pandas и .read_html() метод, парся таблицу напрямую в DataFrame: import pandas as pd from urllib.request import Request, urlopen site = "https://ru.myip.ms/browse/market_bitcoin/%D0%91%D0%B8%D1%82%D0%BA%D0%BE%D0%B8%D0%BD_%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D1%86%D0%B5%D0%BD.html#a" hdr = {'User-Agent': 'Mozilla/5.0'} req = Request(site, headers=hdr) page = urlopen(req) df = pd.read_html(page.read(), attrs={"id": "market_bitcoin_tbl"})[0] df = df.rename(columns=lambda x: x.strip()) # remove extra newlines from the column names print(df['Bitcoin Price'])Ответ 2
Что касается Вашей второй проблемы, следовать пагинации мы можем эмулируя XHR POST запросы, попутно сохраняя данные в датафрейм. Что-то вроде вот такого: from time import sleep import pandas as pd import requests host = 'ru.myip.ms' index_url = 'https://ru.myip.ms' home_url = "https://ru.myip.ms/browse/market_bitcoin/%D0%91%D0%B8%D1%82%D0%BA%D0%BE%D0%B8%D0%BD_%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D1%86%D0%B5%D0%BD.html#a" base_ajax_url = "https://ru.myip.ms/ajax_table/market_bitcoin/{page}" with requests.Session() as session: session.headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36', 'Host': host } # visit home page and parse the initial dataframe response = session.get(home_url) df = pd.read_html(response.text, attrs={"id": "market_bitcoin_tbl"})[0] df = df.rename(columns=lambda x: x.strip()) # remove extra newlines from the column names sleep(2) # start paginating with page=2 page = 2 while True: url = base_ajax_url.format(page=page) print("Processing {url}...".format(url=url)) response = session.post(url, data={'getpage': 'yes', 'lang': 'ru'}, headers={ 'X-Requested-With': 'XMLHttpRequest', 'Origin': index_url, 'Referer': home_url }) # add data to the existing dataframe try: new_df = pd.read_html("
Комментариев нет:
Отправить комментарий