Извлечь таблицу из HTML-текста - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь извлечь текст со страницы и сохранить его в формате данных.Страница не отформатирована как тег, и поэтому панды не могут читать ее напрямую.Я пытался использовать bs4, но не смог извлечь точный URL.

from bs4 import BeautifulSoup

html = requests.get('https://s3.amazonaws.com/todel162/veryimp/claps-0001.html')
soup = BeautifulSoup(html.text, "lxml") 


links = soup.find_all('li')

import pandas as pd
df = pd.DataFrame(links)

Я ожидаю фрейм данных из 4 столбцов, что-то вроде этого ...

vote title date url
1 How a TV Sitcom Triggered the Downfall of Western Civilization 2016-03-23 12:23 https://medium.com/p/how-a-tv-sitcom-triggered-the-downfall-of-western-civilization-336e8ccf7dd0

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Вам нужно разобрать html.find_all('li') просто найдите все li в hmtl, которые вам нужны, чтобы узнать больше.

Это весь код:

html = requests.get('https://s3.amazonaws.com/todel162/veryimp/claps-0001.html')
soup = BeautifulSoup(html.text, "html.parser")
import pandas as pd

links = soup.find_all('li')

all = []
for elements in links:
    find_a = elements.find('a')
    vote = find_a.previous_sibling
    vote =int(re.search(r'\d+', vote).group()) #remove the + and - Just get int
    title = find_a.text
    date = elements.find('time',attrs={'class' : 'dt-published'}).text
    url = find_a['href']
    all.append([vote,title,date,url])

dataf = pd.DataFrame(all,columns=['vote', 'title', 'date','url'])

print(dataf)
0 голосов
/ 24 февраля 2019

soup.find_all('li') просто возвращает все теги li со страницы.Что вам нужно сделать, это получить соответствующую информацию из каждого тега li, например, «Голоса», «Название», «Дата» и «URL», а затем сохранить ее, возможно, в списке списков.Затем вы можете преобразовать это в фрейм данных.Вы можете получить URL с помощью BeautifulSoup, используя атрибут 'href' тега 'a'.

from bs4 import BeautifulSoup
import requests
import pandas as pd
html = requests.get('https://s3.amazonaws.com/todel162/veryimp/claps-0001.html')
soup = BeautifulSoup(html.text, "lxml")
links = soup.find_all('li')
final_list=[]
for li in links:
    votes=li.contents[0].split(' ')[0]
    title=li.find('a').text
    date=li.find('time').text
    url=li.find('a')['href']
    final_list.append([votes,title,date,url])
df = pd.DataFrame(final_list,columns=['Votes', 'title', 'Date','Url'])
print(df)
#just df if in Jupyter notebook

Пример вывода из блокнота Jupyter

enter image description here

...