Панды и красивый суп: выведите href вместо значения для столбца - PullRequest
0 голосов
/ 15 октября 2019

Это так похоже на другие посты на SO, например, здесь , я просто не вижу, что я делаю неправильно.

Я хочу очистить поле с надписью "активность"на этой странице, и я хочу, чтобы вывод выглядел следующим образом:

Таким образом, вы можете увидеть две основные функцииинтерес по сравнению с исходной веб-страницей (1) объединение нескольких таблиц в одну таблицу, просто путем создания нового столбца, если столбец еще не виден, и (2) я хочу извлечь фактический href для этого столбца, а не просто имя, например'Jacobsen et al', потому что я должен был в конечном итоге извлечь значение PMID (целое число) из href.

Это две мои цели, я написал этот код:

import requests
import pandas as pd
from bs4 import BeautifulSoup

for i in range(23,24):
#    try:
        res = requests.get("http://www.conoserver.org/index.php?page=card&table=protein&id=" + str(i))
        soup = BeautifulSoup(res.content, 'lxml')
        table = soup.find_all('table',{'class':'activitytable'})
        for each_table in table:

            #this can print references
            print(each_table.a)

            #this can print the data frames
            df = pd.read_html(str(each_table))
            print(df)

            #how to combine the two?

Может кто-тоскажите мне, как правильно печатать href отдельно для каждой строки каждой таблицы (например, по существу, чтобы в каждую таблицу добавлялся дополнительный столбец с фактическим значением href ?; поэтому он должен распечатать три таблицы с дополнительным столбцом href в каждой таблице)

Тогда я не могуЧтобы сосредоточиться на том, как комбинировать таблицы, я только что упомянул здесь конечную цель на случай, если кто-то придумает более питонический способ убить двух зайцев одним выстрелом / на случай, если это поможет, но я думаю, что это разные проблемы.

1 Ответ

1 голос
/ 15 октября 2019

Вы можете инициализировать окончательный кадр данных. Затем, пока вы выполняете итерацию, сохраните href в виде строки переменной, затем добавьте этот столбец в фрейм данных вспомогательной таблицы. Тогда вы просто продолжите добавлять эти фреймы данных в финальный фрейм данных:

import requests
import pandas as pd
from bs4 import BeautifulSoup

# Initalized empty "final" dataframe
final_df = pd.DataFrame()
for i in range(20,24):
#    try:
        res = requests.get("http://www.conoserver.org/index.php?page=card&table=protein&id=" + str(i))
        soup = BeautifulSoup(res.content, 'lxml')
        table = soup.find_all('table',{'class':'activitytable'})
        for each_table in table:

            #Store the href
            href = each_table.a['href']

            #Get the table
            df = pd.read_html(str(each_table))[0]

            #Put that href in the column 'ref'
            df['ref'] = href

            # Append that dataframe into your final dataframe, and repeat
            final_df = final_df.append(df, sort=True).reset_index(drop=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...