我想把采集到的数据保存到pdf中该怎么做


"""
http://www.ccgp-hunan.gov.cn/page/notice/more.jsp

https://hunan.zcygov.cn/luban/announcement/list?utm=a0017.b0064.3.5.f7fcb4c03c7411ed84984b6678c33275
需求
1.招投标网站爬虫软件
2.需要有软件界面
3.可以选择下载保存公告文件
4.文件格式pdf
"""

import csv
import os
import PyPDF2
import requests
from lxml import etree
import json
from bs4 import BeautifulSoup
from pprint import pprint
url = 'http://www.ccgp-hunan.gov.cn/mvc/getNoticeList4Web.do'
headers = {
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Connection': 'keep-alive',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    # 'Cookie': 'JSESSIONID=BD97B12D61360D93BEC5912F62B0F8BC',
    'Origin': 'http://www.ccgp-hunan.gov.cn',
    'Referer': 'http://www.ccgp-hunan.gov.cn/page/notice/more.jsp',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest',
}
data = {
    'pType': '',
    'prcmPrjName': '',
    'prcmItemCode': '',
    'prcmOrgName': '',
    'startDate': '2023-01-01',
    'endDate': '2023-03-11',
    'prcmPlanNo': '',
    'page': '1',
    'pageSize': '18',
}
cookies = {
    'JSESSIONID': 'BD97B12D61360D93BEC5912F62B0F8BC',
}
resp = requests.post(url,headers=headers,data=data,cookies=cookies)
r = resp.text
response = json.loads(resp.text)
lis = response["rows"]
# soup = BeautifulSoup(r,'lxml')
# list = soup.find_all('tr')

print(lis)
data = []
for i in lis:
    # item = {}
    # # print(i)
    # item['名字'] = i['ORG_NAME']
    # item['公告'] = i['NOTICE_TITLE']
    # item['时间'] = i['NEWWORK_DATE']
    # # item['链接'] = i['href']
    # data.append(item)
    title = i['ORG_NAME']
    announcement = i['NOTICE_TITLE']
    time = i['NEWWORK_DATE']

# with open('kaohe.csv','w',encoding='utf-8-sig',newline='') as f:
# #     writer = csv.DictWriter(f,fieldnames=['名字','公告','时间'])
# #     writer.writeheader()
# #     writer.writerows(data)

安装PyPDF2库,可以在终端中使用以下命令:


pip install pypdf2

在代码中添加以下内容,将每条数据保存为一个PDF文件:

# 创建PDF文件对象
pdf = PyPDF2.PdfFileWriter()

# 遍历数据列表
for i in lis:
    # 获取数据项
    title = i['ORG_NAME']
    announcement = i['NOTICE_TITLE']
    time = i['NEWWORK_DATE']
    
    # 创建PDF页面对象
    page = PyPDF2.pdf.PageObject.createBlankPage(None, 72*11, 72*8.5)
    
    # 在页面上添加数据
    page.mergePage(PyPDF2.pdf.PageObject.createTextObject(None, title))
    page.mergePage(PyPDF2.pdf.PageObject.createTextObject(None, announcement))
    page.mergePage(PyPDF2.pdf.PageObject.createTextObject(None, time))
    
    # 将页面添加到PDF文件中
    pdf.addPage(page)
    
    # 保存PDF文件
    with open('data.pdf', 'wb') as f:
        pdf.write(f)


答案来自 https://www.wodianping.com/


# 导入模块
import requests # 数据请求模块 第三方模块 pip install requests 在CMD里面即可安装
import parsel # 数据解析模块 第三方模块 pip install parsel
import os # 文件操作模块 内置模块
import pdfkit

# 1. 发送请求, 对于文章列表页面发送请求
# 请求url地址
url = 'https://www.chinawenwang.com/zlist-55-1.html'
# 携带请求头参数 headers 请求头是字典类型 键值对形式 一个关键字对应值 中间是用:隔开的
# User-Agent 浏览器的基本信息
# 请求头是为了把python代码伪装成浏览器对于服务器发送请求 (披着羊皮狼)
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36'
}
# 请求方式: 常见 get请求 post请求
response = requests.get(url=url, headers=headers)
# <Response [200]> response响应对象 <> 200 状态码 表示请求成功
# 获取的是响应体的文本数据 (乱码) 转码

# 2. 获取数据, 获取网页源代码 response.text (html字符串数据内容)
print(response.text)

# 3. 解析数据, 提取文章url地址或者文章标题
# 解析数据方法: re正则表达式[可以直接匹配字符串数据内容] css选择器 xpath (对于html字符串数据进行数据转换)
# 如果你是想要从事相关工作 招聘需求有一个要求 re css xpath 都要会
selector = parsel.Selector(response.text) # 把html字符串数据进行数据转换 selector 对象
# attr(href) 属性选择器 获取a标签里面的href属性 css语法 在VIP课程都一节课内容 (2.5小时内容)
# getall() 获取所有 返回列表  匹配多个数据 都是返回列表
href = selector.css('.d-flex h2 a::attr(href)').getall()[:-2]

# 4. 发送请求, 对于文章详情页url地址发送请求
for index in href:
    response_1 = requests.get(url=index, headers=headers)
    
# 5. 获取数据, 获取网页源代码
print(response_1.text)

# 6. 解析数据, 提取文章内容
selector_1 = parsel.Selector(response_1.text)

# 获取文章标题 get() 获取一个 返回的字符串数据
title = selector_1.css('.content-page-header-div h1::text').get()
content = selector_1.css('.content-page-main-content-div').get()
html_content = html_str.format(article=content)

# 7. 保存数据, 保存成html文件内容
# 文件路径以及文件名后缀
html_path = html_filename + title + '.html'
pdf_path = pdf_filename + title + '.pdf'
with open(html_path, mode='w', encoding='utf-8') as  f:
    f.write(html_content)

# 8. 保存PDF, 需要把html文件转成PDF文件内容
# 配置软件 指定软件位置
config = pdfkit.configuration(wkhtmltopdf=r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe')
# 把html文件里面的内容 转成pdf 保存到 pdf文件夹
pdfkit.from_file(html_path, pdf_path, configuration=config)
print('正在保存: ', title)

原文链接:https://www.jianshu.com/p/ffc7fbb96f7f