抓取网页生成电子书( 具有一定的参考价值,感兴趣们可以参考一下爬虫的起因)

优采云 发布时间: 2021-12-13 07:12

  抓取网页生成电子书(

具有一定的参考价值,感兴趣们可以参考一下爬虫的起因)

  Python抓取网页并将其转换为PDF文件

  更新时间:2018-06-07 15:02:19 作者:moluchase

  本文文章主要详细介绍python爬取网页到PDF文件的转换。有一定的参考价值,感兴趣的朋友可以参考一下。

  爬行动物的成因

  官方文档或手册虽然可以查阅,但如果变成纸质版是不是更容易阅读和记忆。如果你只是简单地复制和粘贴,你不知道什么时候会完成。所以我开始考虑爬下官方的Android手册。

  整篇文章的实现

  分析网页,学习使用BeautifulSoup库抓取导出

  参考资料:

  * 将廖雪峰的教程转成PDF电子书

  * 请求文件

  *美丽的汤文件

  配置

  Ubuntu下使用Pycharm运行成功

  要转换为 PDF,您需要下载 wkhtmltopdf

  具体流程

  网络分析

  对于如下所示的网页,您只需获取网页的正文和标题,以及左侧导航栏中的所有网址

  

  下一个工作是找到这些标签......

  关于Requests的使用

  详见文档,这里只是简单使用Requests获取html并使用代理翻墙(网站不能直接访问,需要VPN)

  

proxies={

"http":"http://vpn的IP:port",

"https":"https://vpn的IP:port",

}

response=requests.get(url,proxies=proxies)

  美汤的使用

  参考资料中有一个 Beautiful Soup 文档。看完就知道讲了两件事:一是找标签,二是修改标签。

  这篇文章需要做的是:

  1. 获取title和所有url,这涉及到找标签

  

#对标签进行判断,一个标签含有href而不含有description,则返回true

#而我希望获取的是含有href属性而不含有description属性的<a>标签,(且只有a标签含有href)

def has_href_but_no_des(tag):

return tag.has_attr('href') and not tag.has_attr('description')

#网页分析,获取网址和标题

def parse_url_to_html(url):

response=requests.get(url,proxies=proxies)

soup=BeautifulSoup(response.content,"html.parser")

s=[]#获取所有的网址

title=[]#获取对应的标题

tag=soup.find(id="nav")#获取第一个id为"nav"的标签,这个里面包含了网址和标题

for i in tag.find_all(has_href_but_no_des):

s.append(i['href'])

title.append(i.text)

#获取的只是标签集,需要加html前缀

htmls = ""

with open("android_training_3.html",'a') as f:

f.write(htmls)

  解析上面得到的URL,获取文本,将图片保存到本地;它涉及查找标签和修改属性

  

#网页操作,获取正文及图片

def get_htmls(urls,title):

for i in range(len(urls)):

response=requests.get(urls[i],proxies=proxies)

soup=BeautifulSoup(response.content,"html.parser")

htmls=""+str(i)+"."+title[i]+""

tag=soup.find(class_='jd-descr')

#为image添加相对路径,并下载图片

for img in tag.find_all('img'):

im = requests.get(img['src'], proxies=proxies)

filename = os.path.split(img['src'])[1]

with open('image/' + filename, 'wb') as f:

f.write(im.content)

img['src']='image/'+filename

htmls=htmls+str(tag)

with open("android_training_3.html",'a') as f:

f.write(htmls)

print(" (%s) [%s] download end"%(i,title[i]))

htmls=""

with open("android_training_3.html",'a') as f:

f.write(htmls)

  2. 转换为 PDF

  这一步需要下载wkhtmltopdf,在windows下执行程序总是报错..ubuntu可以

  

def save_pdf(html):

"""

把所有html文件转换成pdf文件

"""

options = {

'page-size': 'Letter',

'encoding': "UTF-8",

'custom-header': [

('Accept-Encoding', 'gzip')

]

}

pdfkit.from_file(html, "android_training_3.pdf", options=options)

  最终效果图

  

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本屋。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线