python抓取网页数据(Python字符串操作技巧汇总及《Python入门与进阶经典教程》)
优采云 发布时间: 2021-09-16 09:04python抓取网页数据(Python字符串操作技巧汇总及《Python入门与进阶经典教程》)
本文文章主要介绍Python捕获HTML网页并将其保存为PDF文件的方法。结合实例,分析了pypdf2模块的安装以及Python基于pypdf2模块捕获HTML页面和生成PDF文件的相关操作技巧。有需要的朋友可以参考
本例描述了用Python捕获HTML网页并将其保存为PDF文件的方法。与您分享,供您参考,如下所示:
一、序言
今天的介绍是捕获HTML网页并将其保存为PDF格式。没有太多废话,你可以直接进入教程
今天的示例以廖雪峰老师的Python教程网站为例:
二、制备
1.pypdf2的安装和使用(用于合并PDF):
Pypdf2版本:1.2 5.1
或
安装:
pip install PyPDF2
使用示例:
from PyPDF2 import PdfFileMerger
merger=PdfFileMerger()
input1=open("hql_1_20.pdf", "rb")
input2=open("hql_21_40.pdf", "rb")
merger.append(input1)
merger.append(input2)
# Write to an output PDF document
output=open("hql_all.pdf", "wb")
merger.write(output)
2.requests和beatifulsoup是爬虫程序的两个构件。Reuqests用于网络请求,beatifusoup用于操作HTML数据。有了这两个航天飞机,你可以快速工作。我们不需要像scratch这样的爬虫框架。这有点像用牛刀杀鸡这么小的程序。此外,由于它是将HTML文件转换为PDF,因此还需要相应的库支持。Wkhtmltopdf是一个非常有用的工具。它可以为多个平台将HTML转换为PDF。Pdfkit是wkhtmltopdf的python包。首先,安装以下依赖项包
pip install requests
pip install beautifulsoup4
pip install pdfkit
3.install wkhtmltopdf
windows平台直接下载稳定版本的wkhtmltopdf进行安装。安装后,将程序的执行路径添加到系统环境的$path变量中。否则,如果pdfkit找不到wkhtmltopdf,则会出现错误“找不到wkhtmltopdf可执行文件”。Ubuntu和CentOS可以直接从命令行安装
$ sudo apt-get install wkhtmltopdf # ubuntu
$ sudo yum intsall wkhtmltopdf # centos
三、数据准备
1.获取每个文章的URL@
def get_url_list():
"""
获取所有URL目录列表
:return:
"""
response=requests.get("")
soup=BeautifulSoup(response.content, "html.parser")
menu_tag=soup.find_all(class_="uk-nav uk-nav-side")[1]
urls=[]
for li in menu_tag.find_all("li"):
url="" + li.a.get('href')
urls.append(url)
return urls
2.pass文章url使用模板保存每个文章HTML文件
HTML模板:
html_template="""
{content}
"""
保存:
<p>
def parse_url_to_html(url, name):
"""
解析URL,返回HTML内容
:param url:解析的url
:param name: 保存的html文件名
:return: html
"""
try:
response=requests.get(url)
soup=BeautifulSoup(response.content, 'html.parser')
# 正文
body=soup.find_all(class_="x-wiki-content")[0]
# 标题
title=soup.find('h4').get_text()
# 标题加入到正文的最前面,居中显示
center_tag=soup.new_tag("center")
title_tag=soup.new_tag('h1')
title_tag.string=title
center_tag.insert(1, title_tag)
body.insert(1, center_tag)
html=str(body)
# body中的img标签的src相对路径的改成绝对路径
pattern="(