最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python爬取網(wǎng)頁轉(zhuǎn)換為PDF文件

 更新時間:2018年06月07日 15:02:19   作者:moluchase  
這篇文章主要為大家詳細(xì)介紹了python爬取網(wǎng)頁轉(zhuǎn)換為PDF文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下

爬蟲的起因

官方文檔或手冊雖然可以查閱,但是如果變成紙質(zhì)版的豈不是更容易翻閱與記憶。如果簡單的復(fù)制粘貼,不知道何時能夠完成。于是便開始想著將Android的官方手冊爬下來。

全篇的實現(xiàn)思路

  1. 分析網(wǎng)頁
  2. 學(xué)會使用BeautifulSoup庫
  3. 爬取并導(dǎo)出

參考資料:

* 把廖雪峰的教程轉(zhuǎn)換為PDF電子書
* Requests文檔
* Beautiful Soup文檔

配置

在Ubuntu下使用Pycharm運行成功
轉(zhuǎn)PDF需要下載wkhtmltopdf

具體過程

網(wǎng)頁分析

如下所示的一個網(wǎng)頁,要做的是獲取該網(wǎng)頁的正文和標(biāo)題,以及左邊導(dǎo)航條的所有網(wǎng)址

接下來的工作就是找到這些標(biāo)簽嘍…

關(guān)于Requests的使用

詳細(xì)參考文檔

proxies={
 "http":"http://vpn的IP:port",
 "https":"https://vpn的IP:port",
 }

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

Beautiful Soup的使用

參考資料里面有Beautiful Soup文檔,將其看完后,可以知道就講了兩件事:一個是查找標(biāo)簽,一個是修改標(biāo)簽。
本文需要做的是:

1. 獲取標(biāo)題和所有的網(wǎng)址,涉及到的是查找標(biāo)簽

#對標(biāo)簽進(jìn)行判斷,一個標(biāo)簽含有href而不含有description,則返回true
#而我希望獲取的是含有href屬性而不含有description屬性的<a>標(biāo)簽,(且只有a標(biāo)簽含有href)
def has_href_but_no_des(tag):
 return tag.has_attr('href') and not tag.has_attr('description')

#網(wǎng)頁分析,獲取網(wǎng)址和標(biāo)題
def parse_url_to_html(url):

 response=requests.get(url,proxies=proxies)
 soup=BeautifulSoup(response.content,"html.parser")
 s=[]#獲取所有的網(wǎng)址
 title=[]#獲取對應(yīng)的標(biāo)題
 tag=soup.find(id="nav")#獲取第一個id為"nav"的標(biāo)簽,這個里面包含了網(wǎng)址和標(biāo)題
 for i in tag.find_all(has_href_but_no_des):
 s.append(i['href'])
 title.append(i.text)

 #獲取的只是標(biāo)簽集,需要加html前綴
 htmls = "<html><head><meta charset='UTF-8'></head><body>"
 with open("android_training_3.html",'a') as f:
 f.write(htmls)

對上面獲取的網(wǎng)址分析,獲取正文,并將圖片取出存于本地;涉及到的是查找標(biāo)簽和修改屬性

#網(wǎng)頁操作,獲取正文及圖片
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="<div><h1>"+str(i)+"."+title[i]+"</h1></div>"
 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="</body></html>"
 with open("android_training_3.html",'a') as f:
 f.write(htmls)

2.轉(zhuǎn)為PDF

這一步需要下載wkhtmltopdf,在Windows下執(zhí)行程序一直出錯..Ubuntu下可以

def save_pdf(html):
 """
 把所有html文件轉(zhuǎn)換成pdf文件
 """
 options = {
 'page-size': 'Letter',
 'encoding': "UTF-8",
 'custom-header': [
  ('Accept-Encoding', 'gzip')
 ]
 }
 pdfkit.from_file(html, "android_training_3.pdf", options=options)

最后的效果圖

這里寫圖片描述

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Matplotlib實戰(zhàn)之面積圖繪制詳解

    Matplotlib實戰(zhàn)之面積圖繪制詳解

    面積圖,或稱區(qū)域圖,是一種隨有序變量的變化,反映數(shù)值變化的統(tǒng)計圖表,這篇文章主要介紹了如何利用Matplotlib實現(xiàn)面積圖的繪制,需要的可以參考下
    2023-08-08
  • 解決Python中的modf()函數(shù)取小數(shù)部分不準(zhǔn)確問題

    解決Python中的modf()函數(shù)取小數(shù)部分不準(zhǔn)確問題

    這篇文章主要介紹了解決Python中的modf()函數(shù)取小數(shù)部分不準(zhǔn)確問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • django中path函數(shù)使用詳解

    django中path函數(shù)使用詳解

    django.urls.path是Django中用于定義URL映射規(guī)則的函數(shù)之一,本文主要介紹了django中path函數(shù)使用,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • 跟老齊學(xué)Python之字典,你還記得嗎?

    跟老齊學(xué)Python之字典,你還記得嗎?

    在python中,也有一種數(shù)據(jù)與此相近,不僅相近,這種數(shù)據(jù)的名稱就叫做dictionary,翻譯過來是字典,類似于前面的int/str/list,這種類型數(shù)據(jù)名稱是:dict
    2014-09-09
  • Python使用pyecharts控件繪制圖表

    Python使用pyecharts控件繪制圖表

    這篇文章介紹了Python使用pyecharts控件繪制圖表的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • python實現(xiàn)的B站直播錄制工具

    python實現(xiàn)的B站直播錄制工具

    這篇文章主要介紹了python實現(xiàn)的B站直播錄播工具,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • Python 代碼中的 yield 關(guān)鍵字到底是什么

    Python 代碼中的 yield 關(guān)鍵字到底是什么

    yield是Python中一個強大的工具,它可以幫助你以一種高效的方式處理大量數(shù)據(jù),理解yield的工作原理對于掌握Python編程至關(guān)重要,這篇文章主要介紹了Python 代碼中的 yield 到底是什么,需要的朋友可以參考下
    2024-07-07
  • Python簡單爬蟲導(dǎo)出CSV文件的實例講解

    Python簡單爬蟲導(dǎo)出CSV文件的實例講解

    今天小編就為大家分享一篇Python簡單爬蟲導(dǎo)出CSV文件的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python的函數(shù)使用介紹

    Python的函數(shù)使用介紹

    這篇文章主要介紹了Python的函數(shù)使用,在兩種python循環(huán)語句的使用中,不僅僅是循環(huán)條件達(dá)到才能跳出循環(huán)體。所以,在對python函數(shù)進(jìn)行闡述之前,先對跳出循環(huán)的簡單語句塊進(jìn)行介紹,需要的朋友可以參考一下
    2021-12-12
  • Python基于pygame實現(xiàn)的彈力球效果(附源碼)

    Python基于pygame實現(xiàn)的彈力球效果(附源碼)

    這篇文章主要介紹了Python基于pygame實現(xiàn)的彈力球效果,涉及pygame圖形動態(tài)操作的相關(guān)的技巧,并附帶了完整的源碼供讀者下載參考,需要的朋友可以參考下
    2015-11-11

最新評論

五常市| 信丰县| 长沙市| 罗甸县| 类乌齐县| 油尖旺区| 三原县| 定远县| 集贤县| 景泰县| 新乐市| 密云县| 汉源县| 北票市| 九寨沟县| 榆中县| 凤庆县| 罗城| 东源县| 贞丰县| 邵阳县| 太白县| 阳朔县| 乐亭县| 泌阳县| 商南县| 德庆县| 新化县| 临潭县| 巨鹿县| 吉木萨尔县| 东安县| 乌鲁木齐市| 梁平县| 东丽区| 廉江市| 桦川县| 陆川县| 丰台区| 望江县| 西城区|