抓取网页生成电子书(全篇的实现思路分析网页学会使用BeautifulSoup库爬取并导出参考资料)
优采云 发布时间: 2021-11-07 14:07抓取网页生成电子书(全篇的实现思路分析网页学会使用BeautifulSoup库爬取并导出参考资料)
本文文章主要详细介绍了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)
最终效果图
以上是python爬取网页转换为PDF文件的详细内容,请关注其他相关html中文网站文章!