كيف يمكن أن أتحصل على جدول HTML إلى CSV ؟
-
06-07-2019 - |
سؤال
المشكلة
استعمل الأداة في العمل الذي يتيح لي القيام الاستفسارات و العودة الجداول HTML من المعلومات.ليس لدي أي نوع من الخلفية الوصول إليها.
الكثير من هذه المعلومات سيكون أكثر فائدة إذا كنت يمكن وضعه في جدول بيانات الفرز ، حيث بلغ متوسطها ، إلخ. كيف يمكنني الشاشة تتخلص من هذه البيانات إلى ملف CSV?
فكرتي الأولى
منذ أن عرفت مسج, ظننت أنني قد تستخدم لتجريد من الجدول التنسيق على الشاشة ، إدراج الفواصل فواصل الأسطر ، مجرد نسخ الفوضى في المفكرة ثم حفظ كملف CSV. أي أفكار أفضل ؟
الحل
نعم, الناس, كان حقا سهلة كما النسخ واللصق.لا أشعر سخيفة.
على وجه التحديد عندما لصقها في جدول البيانات ، كان علي أن حدد "لصق خاص" و اختيار تنسيق "النص". وإلا فإنه حاول لصق كل شيء في خلية واحدة ، حتى لو سلطت الضوء على كل جدول.
المحلول
- حدد في جدول HTML في أدوات واجهة المستخدم ونسخها في الحافظة (إذا كان ذلك ممكنا
- لصقه في Excel.
- حفظ ملف CSV
ومع ذلك, هذا هو الحل اليدوي لا الآلي واحدة.
نصائح أخرى
باستخدام بيثون:
على سبيل المثال تخيل أنك تريد أن تتخلص من الفوركس في شكل csv من بعض المواقع مثل:fxquotes
ثم...
from BeautifulSoup import BeautifulSoup
import urllib,string,csv,sys,os
from string import replace
date_s = '&date1=01/01/08'
date_f = '&date=11/10/08'
fx_url = 'http://www.oanda.com/convert/fxhistory?date_fmt=us'
fx_url_end = '&lang=en&margin_fixed=0&format=CSV&redirected=1'
cur1,cur2 = 'USD','AUD'
fx_url = fx_url + date_f + date_s + '&exch=' + cur1 +'&exch2=' + cur1
fx_url = fx_url +'&expr=' + cur2 + '&expr2=' + cur2 + fx_url_end
data = urllib.urlopen(fx_url).read()
soup = BeautifulSoup(data)
data = str(soup.findAll('pre', limit=1))
data = replace(data,'[<pre>','')
data = replace(data,'</pre>]','')
file_location = '/Users/location_edit_this'
file_name = file_location + 'usd_aus.csv'
file = open(file_name,"w")
file.write(data)
file.close()
تحرير:للحصول على القيم من الجدول:على سبيل المثال من: palewire
from mechanize import Browser
from BeautifulSoup import BeautifulSoup
mech = Browser()
url = "http://www.palewire.com/scrape/albums/2007.html"
page = mech.open(url)
html = page.read()
soup = BeautifulSoup(html)
table = soup.find("table", border=1)
for row in table.findAll('tr')[1:]:
col = row.findAll('td')
rank = col[0].string
artist = col[1].string
album = col[2].string
cover_link = col[3].img['src']
record = (rank, artist, album, cover_link)
print "|".join(record)
هذا الثعبان النسخة باستخدام (حاليا) أحدث نسخة من BeautifulSoup التي يمكن الحصول عليها باستخدام ، على سبيل المثال ،
$ sudo easy_install beautifulsoup4
السيناريو يقرأ HTML من مستوى المدخلات والمخرجات النص العثور عليها في كل الجداول في السليم تنسيق CSV.
#!/usr/bin/python
from bs4 import BeautifulSoup
import sys
import re
import csv
def cell_text(cell):
return " ".join(cell.stripped_strings)
soup = BeautifulSoup(sys.stdin.read())
output = csv.writer(sys.stdout)
for table in soup.find_all('table'):
for row in table.find_all('tr'):
col = map(cell_text, row.find_all(re.compile('t[dh]')))
output.writerow(col)
output.writerow([])
أسهل (لأنه يوفر لك في المرة القادمة) ...
في Excel
البيانات/استيراد بيانات خارجية/استعلام ويب جديد
وسوف يأخذك إلى url موجه.أدخل عنوان url الخاص بك ، وأنه سيتم تحديد الجداول المتوفرة على الصفحة لاستيراد.فويلا.
طريقتين يتبادر إلى الذهن (خصوصا بالنسبة لأولئك منا أن لا يكون Excel):
- جوجل جداول البيانات قد ممتازة
importHTML
وظيفة:=importHTML("http://example.com/page/with/table", "table", index
- مؤشر يبدأ في 1
- أوصي
copy
وpaste values
بعد وقت قصير من الاستيراد - ملف -> تحميل -> CSV
- بايثون رائعة الباندا مكتبة مفيد
read_html
وto_csv
وظائف- هنا الأساسية Python3 النصي يطالب URL التي الطاولة في ذلك URL الملف CSV.
سريعة وقذرة:
نسخة من المتصفح إلى Excel حفظ كملف CSV.
أفضل حل (للاستخدام على المدى الطويل):
أكتب قليلا من التعليمات البرمجية في لغة من اختيارك سوف يتم سحب محتويات html أسفل ، وتتخلص من البتات التي تريد.ربما يمكن رمي في جميع عمليات البيانات (الفرز ، حيث بلغ متوسطها ، الخ) على رأس استرجاع البيانات.هكذا, لديك فقط لتشغيل التعليمات البرمجية الخاصة بك وتحصل على التقرير الفعلي الذي تريده.
كل هذا يتوقف على كيفية غالبا ما سوف يكون أداء هذه المهمة بالذات.
يمكن لـ Excel فتح صفحة http.
على سبيل المثال:
انقر فوق ملف مفتوح
تحت اسم الملف ولصق URL أي: كيف يمكن أن أتحصل على جدول HTML إلى CSV ؟
انقر فوق موافق
Excel قصارى جهدها من أجل تحويل html إلى جدول.
ليس الحل الأكثر أناقة ، ولكن لا تعمل!
الأساسية تنفيذ الثعبان باستخدام BeautifulSoup أيضا النظر في كل rowspan و colspan:
from BeautifulSoup import BeautifulSoup
def table2csv(html_txt):
csvs = []
soup = BeautifulSoup(html_txt)
tables = soup.findAll('table')
for table in tables:
csv = ''
rows = table.findAll('tr')
row_spans = []
do_ident = False
for tr in rows:
cols = tr.findAll(['th','td'])
for cell in cols:
colspan = int(cell.get('colspan',1))
rowspan = int(cell.get('rowspan',1))
if do_ident:
do_ident = False
csv += ','*(len(row_spans))
if rowspan > 1: row_spans.append(rowspan)
csv += '"{text}"'.format(text=cell.text) + ','*(colspan)
if row_spans:
for i in xrange(len(row_spans)-1,-1,-1):
row_spans[i] -= 1
if row_spans[i] < 1: row_spans.pop()
do_ident = True if row_spans else False
csv += '\n'
csvs.append(csv)
#print csv
return '\n\n'.join(csvs)
هنا اختبار المثال الذي يجمع بين grequest و الحساء تحميل كميات كبيرة من الصفحات من منظم الموقع:
#!/usr/bin/python
from bs4 import BeautifulSoup
import sys
import re
import csv
import grequests
import time
def cell_text(cell):
return " ".join(cell.stripped_strings)
def parse_table(body_html):
soup = BeautifulSoup(body_html)
for table in soup.find_all('table'):
for row in table.find_all('tr'):
col = map(cell_text, row.find_all(re.compile('t[dh]')))
print(col)
def process_a_page(response, *args, **kwargs):
parse_table(response.content)
def download_a_chunk(k):
chunk_size = 10 #number of html pages
x = "http://www.blahblah....com/inclusiones.php?p="
x2 = "&name=..."
URLS = [x+str(i)+x2 for i in range(k*chunk_size, k*(chunk_size+1)) ]
reqs = [grequests.get(url, hooks={'response': process_a_page}) for url in URLS]
resp = grequests.map(reqs, size=10)
# download slowly so the server does not block you
for k in range(0,500):
print("downloading chunk ",str(k))
download_a_chunk(k)
time.sleep(11)
هل حاولت فتحه مع excel ؟ إذا قمت بحفظ البيانات في excel كـ html سترى تنسيق يستخدم excel.من تطبيق ويب كتبت أنا أبصق تنسيق html بحيث يمكن للمستخدم تصدير إلى excel.
إذا كنت كشط الشاشة و الجدول كنت تحاول تحويل يحتوي على هوية معينة ، يمكنك دائما القيام regex تحليل html جنبا إلى جنب مع بعض البرمجة لتوليد CSV.