URLのHTMLソースを取得して解析し、その結果をPDFとして出力しようとしています。Python - URLを取得し、PDFを解析して印刷する
私はBeautifulSoup、urllib2、およびreportlabに依存したいと思っていましたが、私はそれらを適切に組み合わせる方法がありません。
エラーとして私は'module' object is not callable
を取得します。これは、django 1.3.1 devサーバーを実行してビューにアクセスするときです。
これは私のコードです:ここでは
from reportlab.pdfgen import canvas
from cStringIO import StringIO
from django.http import HttpResponse
from django.shortcuts import render_to_response
from django.template import RequestContext
# Fetching the URL
import urllib2
# Parsing the HTML
from BeautifulSoup import BeautifulSoup
# The ConverterForm
from django import forms
class ConverterForm(forms.Form):
# Use textarea instead the default TextInput.
html_files = forms.CharField(widget=forms.Textarea)
filename = forms.CharField()
# Create your views here.
def create_pdf(request):
# If the form has been submitted
if request.method == 'POST':
# A form bound to the POST data
form = ConverterForm(request.POST)
# All validation rules pass
if form.is_valid():
# PDF creation process
# Assign variables
html_files = form.cleaned_data['html_files']
filename = form.cleaned_data['filename']
# Create the HttpResponse object with the appropriate PDF headers.
response = HttpResponse(mimetype='application/pdf')
# The use of attachment forces the Save as dialog to open.
response['Content-Disposition'] = 'attachment; filename=%s.pdf' % filename
buffer = StringIO()
# Get the page source
page = urllib2.urlopen(html_files)
html = page.read()
# Parse the page source
soup = BeautifulSoup(html)
# Create the PDF object, using the StringIO() object as its "file".
p = canvas.Canvas(buffer)
# Draw things on the PDF and generate the PDF.
# See ReportLab documentation for full list of functions.
p.drawString(100, 100, soup)
# Close the PDF object cleanly.
p.showPage()
p.save()
# Get the value of the StringIO buffer and write it to the response.
pdf = buffer.getvalue()
buffer.close()
response.write(pdf)
return response
else:
# An unbound form
form = ConverterForm()
# For RequestContext in relation to csrf see more here:
# https://docs.djangoproject.com/en/1.3/intro/tutorial04/
return render_to_response('converter/index.html', {
'form': form,
}, context_instance=RequestContext(request))
どこでエラーが発生しますか?完全に表示してください。あなたはあなたのコード全体を表示していません。 – Marcin
コードを編集しました。申し訳ありませんが、最初は残りの部分が関連性がないかもしれないと思いました。 Regards – orschiro
あなたの正確なエラーは 'buffer = StringIO()'です。これは 'buffer = StringIO.StringIO()'でなければなりませんが、私は答えとしてより簡単な解決法を提供しています。 –