本想着在双十一买点专业相关的书籍呢,但是被当当和淘宝的红包给套路了一下,所以就只能去一些网站来看博客教程来了……我主要选择了廖雪峰老师的博客和菜鸟教程的博客,这两个相对来说还是比较简单易懂的。但是……问题又来了,网页观看考虑到联网问题就有点不太方便了,所以我就想着利用以前的一点python知识来写个爬虫爬取下来保存到本地不就可以长久的观看了么。
下面是具体实现代码:运行环境:win10 64位、python3.x
需要用到的包:requests(进行网络请求)、BeautifulSoup(用来解析html文档)、codecs(用来打开文件)、time(用来延时)、pdfkit(用来生成pdf文档)
import requests
from bs4 import BeautifulSoup
import codecs
import time
import pdfkit
def getURLS(url):
# 获取目录地址列表
URLS = []
# 获取协议头,进行伪装。PS:这个网站反爬虫较弱,可以尽情的爬取
header = getHeader()
# 获取网页信息并取出所需信息
r = requests.get(url,headers = header)
r.encoding = 'utf-8'
soup = BeautifulSoup(r.text,"html.parser")
_tops = soup.find_all('a',target='_top')
for _top in _tops:
URLS.append("http://www.runoob.com" + _top['href'])
return URLS
def getPageHtml(url):
# 获取具体代码段
header = getHeader()
try:
# 这里由于取出来的地址有些地方不规则,需要判断一下
r = requests.get(url,headers = header)
except:
print("打开链接失败!链接地址" + url)
return "<h1>打开链接失败!链接地址" + url + "</h1>"
r.encoding = 'utf-8'
soup = BeautifulSoup(r.text,"html.parser")
content = soup.find('div',id='content')
return str(content)
def getHeader():
# 构建协议头
op = codecs.open('header.txt','r','utf-8')
strings = op.read()
strings = strings.split('\n')
header = {}
for string in strings:
i = string.split(":")
header[i[0].strip()]=i[1].strip()
return header
if __name__ == '__main__':
# 在这里修改生成的文件的名字
file_name = '菜鸟教程Servlet.pdf'
# 在这里修改要爬取的链接地址
URL = "http://www.runoob.com/servlet/servlet-tutorial.html"
# 开始获取目录链接地址列表
urls = getURLS(URL)
# 获取网页文件模板
op = codecs.open('formwork.html','r','utf-8')
html = op.read()
# 用来存储代码段
segment = ''
for url in urls:
# 获取目录列表代码段
print("正在获取:" + url)
segment = segment + '\n' + getPageHtml(url)
time.sleep(5)
# 把代码段添加到模板并保存到本地
html = html = html.replace("formwork",segment)
op = codecs.open('provisional.html','w','utf-8')
op.write(html)
# 生成pdf文件
pdfkit.from_file('provisional.html',file_name)
浙公网安备 33010602011771号