中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python爬取網頁轉換為PDF文件

發布時間:2020-09-11 14:21:30 來源:腳本之家 閱讀:244 作者:moluchase 欄目:開發技術

爬蟲的起因

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

全篇的實現思路

  1. 分析網頁
  2. 學會使用BeautifulSoup庫
  3. 爬取并導出

參考資料:

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

配置

在Ubuntu下使用Pycharm運行成功
轉PDF需要下載wkhtmltopdf

具體過程

網頁分析

如下所示的一個網頁,要做的是獲取該網頁的正文和標題,以及左邊導航條的所有網址

python爬取網頁轉換為PDF文件

接下來的工作就是找到這些標簽嘍…

關于Requests的使用

詳細參考文檔,這里只是簡單的使用Requests獲取html以及使用代理翻墻(網站無法直接訪問,需要VPN)

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

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

Beautiful Soup的使用

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

1. 獲取標題和所有的網址,涉及到的是查找標簽

#對標簽進行判斷,一個標簽含有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 = "<html><head><meta charset='UTF-8'></head><body>"
 with open("android_training_3.html",'a') as f:
 f.write(htmls)

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

#網頁操作,獲取正文及圖片
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><h2>"+str(i)+"."+title[i]+"</h2></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.轉為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文件

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

卓资县| 三原县| 溧水县| 眉山市| 丹江口市| 吴旗县| 玛沁县| 三亚市| 阿拉善右旗| 新丰县| 塘沽区| 东莞市| 皮山县| 连城县| 宜宾县| 石嘴山市| 都昌县| 屏东县| 土默特右旗| 兴山县| 台江县| 乌鲁木齐市| 焦作市| 洛宁县| 泰宁县| 青岛市| 闸北区| 巴林左旗| 黔南| 广河县| 保康县| 汾西县| 安康市| 五指山市| 开平市| 正镶白旗| 博客| 民权县| 密山市| 渭南市| 汾阳市|