Pythonでスクレイピングした結果をPDF出力する際、自動で改行させたい
解決したいこと
GoogleColab 上でPythonを使用し,Yahooニュース各記事のタイトルと本文を
スクレイピングするコードを書きました。スクレイピング自体はうまく出来ているようです。
ただし、それをreportlabでPDFファイルとして出力する際、長文だと改行されないため、
一行だけしか出力できませんでした。
自動で改行させ、全文PDFに出力したいと思います。
解決方法を教えて下さい。
(当方、Python歴1か月の初心者なので、できるだけ平易な表現をして頂ければ幸いです)
発生している問題・エラー
下記は出力したPDFです。
改行されないため、一行だけで終わり、全文出力されません。
該当するソースコード
!pip install reportlab
import requests
from bs4 import BeautifulSoup
import re
from google.colab import files
import datetime as dt
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.units import inch, mm, cm
from reportlab.platypus import Table, TableStyle,Paragraph
from reportlab.lib import colors
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.styles import getSampleStyleSheet
ttf_file = '/content/drive/MyDrive/ipaexg.ttf' #フォントのパスを指定する
pdfmetrics.registerFont(TTFont('IPAexGothic', ttf_file))#フォントを登録する
now = dt.datetime.now(dt.timezone(dt.timedelta(hours=9))) # 日本時刻
pdf = canvas.Canvas(now.strftime('%Y%m%d_%H%M')+'News.pdf', pagesize=(210 * mm, 297 * mm)) # A4縦のCanvasを作成
url = 'https://news.yahoo.co.jp/topics'
res = requests.get(url)
soup = BeautifulSoup(res.text,"html.parser")
elems = soup.find_all(href=re.compile("news.yahoo.co.jp/pickup"))
pickup_links = [elem.attrs['href']for elem in elems]
for pickup_link in pickup_links: #一覧のリンクを順に処理
pickup_res = requests.get(pickup_link)
pickup_soup = BeautifulSoup(pickup_res.text, "html.parser")
pickup_elem = pickup_soup.find("p", class_="sc-fZNsvg drNWzQ")
news_link = pickup_elem.contents[0].attrs['href']
news_res = requests.get(news_link)
news_soup = BeautifulSoup(news_res.text, "html.parser")
Name=news_soup.title.text
URL=news_link
detail_text = news_soup.find(class_=re.compile("Directlink"))
if hasattr(detail_text, "text"):
Text=detail_text.text
else:
Text=''
styles = getSampleStyleSheet()
Text1 = Paragraph(Text,style=styles["Normal"])
font_size = 10
pdf.setFont('IPAexGothic', font_size)
pdf.drawString(10 * mm, (297 - 10) * mm, Name)
pdf.drawString(10 * mm, (297 - 20) * mm, URL)
pdf.drawString(10 * mm, (297 - 30) * mm, Text1.text)
pdf.showPage()
pdf.save()
自分で試したこと
*ParagraphStyleを使えば上手くできると思い、他の方のホームページを参考に
試行してみたのですが、やり方が悪いのか上手くいきませんでした。