Я просмотрел много сообщений, но не нашел решения, которое вполне соответствует тому, что мне нужно. Во-первых, я предваряю, говоря, что я новичок в Python (я использую Python 2).
Я пытаюсь собрать данные с веб-страницы (http://www.tdcj.state.tx.us/death_row/dr_executed_offenders.html). Обратите внимание на красивую HTML-таблицу. Я смог прочитать это в список без особых проблем. Однако также обратите внимание на две колонки со ссылками. Я хотел бы удалить столбец первой ссылки (но я не знаю, как это сделать, поскольку мои данные находятся в списке).
Столбец второй ссылки немного сложнее. Я хочу заменить заголовок «Ссылка» на «Последнее заявление». Затем я хочу посетить каждую предоставленную ссылку, получить последний оператор и поместить его в соответствующую строку исходной таблицы, для которой я создал список.
Наконец, я хочу распечатать этот список в виде файла с разделителями табуляции, который можно прочитать в R как фрейм данных.
Это очень много для нуба. Скажите, правильно ли я подхожу к этой проблеме. Ниже приведен код, который у меня есть до сих пор. Мне не хватает кое-чего из того, что я хочу сделать, потому что я не знаю, с чего начать.
from bs4 import BeautifulSoup
import requests
from lxml import html
import csv
import string
import sys
#obtain the main url with bigger data
main_url = "http://www.tdcj.state.tx.us/death_row/dr_executed_offenders.html"
#convert the html to BeautifulSoup
doc = requests.get(main_url)
soup = BeautifulSoup(doc.text, 'lxml')
#find in html the table
tbl = soup.find("table", attrs = {"class":"os"})
#create labels for list rows by table headers
headings = [th.get_text() for th in tbl.find("tr").find_all("th")]
#convert the unicode to string
headers = []
for i in range(0,len(headings)-1):
headers.append(str(headings[i]))
#access the remaining information
prisoners = []
for row in tbl.find_all("tr")[1:]:
#attach the appropriate header to the appropriate corresponding data
#also, converts unicode to string
info = zip(headers, (str(td.get_text()) for td in row.find_all("td")))
#append each of the newly made rows
prisoners.append(info)
#print each row of the list to a file for R
with open('output.txt', 'a') as output:
for p in prisoners:
output.write(str(p)+'\n')
output.close()
Если вы можете помочь мне разобраться с любой из трех частей, с которыми я борюсь, я был бы очень признателен!