日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python beautiful soup 标签完全相同_Python爬取Python教程并制作成pdf

發(fā)布時(shí)間:2023/12/10 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python beautiful soup 标签完全相同_Python爬取Python教程并制作成pdf 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

歡迎點(diǎn)擊右上角關(guān)注小編,除了分享技術(shù)文章之外還有很多福利,私信學(xué)習(xí)資料可以領(lǐng)取包括不限于Python實(shí)戰(zhàn)演練、PDF電子文檔、面試集錦、學(xué)習(xí)資料等。

想要把教程變成PDF有三步:

1、先生成空html,爬取每一篇教程放進(jìn)一個(gè)新生成的div,這樣就生成了包含所有教程的html文件(BeautifulSoup)

2、將html轉(zhuǎn)換成pdf(wkhtmltopdf)

3、由于反爬做的比較好,在爬取的過程中還需要代理ip(免費(fèi) or 付費(fèi))

開始使用

將一段文檔傳入 BeautifulSoup 的構(gòu)造方法,就能得到一個(gè)文檔的對象, 可以傳入一段字符串或一個(gè)文件句柄.

如下所示:

首先,文檔被轉(zhuǎn)換成Unicode,并且HTML的實(shí)例都被轉(zhuǎn)換成Unicode編碼.

然后,Beautiful Soup選擇最合適的解析器來解析這段文檔,如果手動指定解析器那么Beautiful Soup會選擇指定的解析器來解析文檔.

對象的種類

Beautiful Soup 將復(fù)雜 HTML 文檔轉(zhuǎn)換成一個(gè)復(fù)雜的樹形結(jié)構(gòu),每個(gè)節(jié)點(diǎn)都是 Python 對象,所有對象可以歸納為 4 種: Tag , NavigableString , BeautifulSoup , Comment .

Tag:通俗點(diǎn)講就是 HTML 中的一個(gè)個(gè)標(biāo)簽,類似 div,p。

NavigableString:獲取標(biāo)簽內(nèi)部的文字,如,soup.p.string。

BeautifulSoup:表示一個(gè)文檔的全部內(nèi)容。

Comment:Comment 對象是一個(gè)特殊類型的 NavigableString 對象,其輸出的內(nèi)容不包括注釋符號.

Tag

Tag就是html中的一個(gè)標(biāo)簽,用BeautifulSoup就能解析出來Tag的具體內(nèi)容,具體的格式為soup.name,其中name是html下的標(biāo)簽,具體實(shí)例如下:

print soup.title輸出title標(biāo)簽下的內(nèi)容,包括此標(biāo)簽,這個(gè)將會輸出

print soup.head輸出head標(biāo)簽下的內(nèi)容

如果 Tag 對象要獲取的標(biāo)簽有多個(gè)的話,它只會返回所以內(nèi)容中第一個(gè)符合要求的標(biāo)簽

Tag 屬性

每個(gè) Tag 有兩個(gè)重要的屬性 name 和 attrs:

name:對于Tag,它的name就是其本身,如soup.p.name就是p

attrs是一個(gè)字典類型的,對應(yīng)的是屬性-值,如print soup.p.attrs,輸出的就是{'class': ['title'], 'name': 'dromouse'},當(dāng)然你也可以得到具體的值,如print soup.p.attrs['class'],輸出的就是[title]是一個(gè)列表的類型,因?yàn)橐粋€(gè)屬性可能對應(yīng)多個(gè)值,當(dāng)然你也可以通過get方法得到屬性的,如:print soup.p.get('class')。還可以直接使用print soup.p['class']

get

get方法用于得到標(biāo)簽下的屬性值,注意這是一個(gè)重要的方法,在許多場合都能用到,比如你要得到標(biāo)簽下的圖像url,那么就可以用soup.img.get('src'),具體解析如下:

# 得到第一個(gè)p標(biāo)簽下的src屬性printsoup.p.get("class")

string

得到標(biāo)簽下的文本內(nèi)容,只有在此標(biāo)簽下沒有子標(biāo)簽,或者只有一個(gè)子標(biāo)簽的情況下才能返回其中的內(nèi)容,否則返回的是None具體實(shí)例如下:

# 在上面的一段文本中p標(biāo)簽沒有子標(biāo)簽,因此能夠正確返回文本的內(nèi)容printsoup.p.string# 這里得到的就是None,因?yàn)檫@里的html中有很多的子標(biāo)簽printsoup.html.string

get_text()

可以獲得一個(gè)標(biāo)簽中的所有文本內(nèi)容,包括子孫節(jié)點(diǎn)的內(nèi)容,這是最常用的方法

搜索文檔樹

BeautifulSoup 主要用來遍歷子節(jié)點(diǎn)及子節(jié)點(diǎn)的屬性,通過Tag取屬性的方式只能獲得當(dāng)前文檔中的第一個(gè) tag,例如,soup.p。如果想要得到所有的

標(biāo)簽,或是通過名字得到比一個(gè) tag 更多的內(nèi)容的時(shí)候,就需要用到 find_all()

find_all(name, attrs, recursive, text, **kwargs )

find_all是用于搜索節(jié)點(diǎn)中所有符合過濾條件的節(jié)點(diǎn)。

name參數(shù):是Tag的名字,如p,div,title

# 1. 節(jié)點(diǎn)名print(soup.find_all('p'))# 2. 正則表達(dá)式print(soup.find_all(re.compile('^p')))# 3. 列表 print(soup.find_all(['p','a']))

另外 attrs 參數(shù)可以也作為過濾條件來獲取內(nèi)容,而 limit 參數(shù)是限制返回的條數(shù)。

CSS 選擇器

以 CSS 語法為匹配標(biāo)準(zhǔn)找到 Tag。同樣也是使用到一個(gè)函數(shù),該函數(shù)為select(),返回類型是 list。它的具體用法如下:

# 1. 通過 tag 標(biāo)簽查找print(soup.select(head))# 2. 通過 id 查找print(soup.select('#link1'))# 3. 通過 class 查找print(soup.select('.sister'))# 4. 通過屬性查找print(soup.select('p[name=dromouse]'))# 5. 組合查找print(soup.select("body p"))

wkhtmltopdf

wkhtmltopdf主要用于HTML生成PDF。

pdfkit是基于wkhtmltopdf的python封裝,支持URL,本地文件,文本內(nèi)容到PDF的轉(zhuǎn)換,其最終還是調(diào)用wkhtmltopdf命令。

安裝

先安裝wkhtmltopdf,再安裝pdfkit。

https://wkhtmltopdf.org/downloads.html

pdfkit

shell pip3 install pdfkit

轉(zhuǎn)換url/file/string

importpdfkitpdfkit.from_url('http://google.com','out.pdf')pdfkit.from_file('index.html','out.pdf')pdfkit.from_string('Hello!','out.pdf')

轉(zhuǎn)換url或者文件名列表

pdfkit.from_url(['google.com','baidu.com'],'out.pdf')pdfkit.from_file(['file1.html','file2.html'],'out.pdf')

轉(zhuǎn)換打開文件

withopen('file.html')asf: pdfkit.from_file(f,'out.pdf')

自定義設(shè)置

使用代理ip

爬取十幾篇教程之后觸發(fā)了這個(gè)錯誤:

看來廖大的反爬蟲做的很好,于是只好使用代理ip了,嘗試了免費(fèi)的西刺免費(fèi)代理后,最后選擇了付費(fèi)的 阿布云 ,感覺響應(yīng)速度和穩(wěn)定性還OK。

運(yùn)行結(jié)果

運(yùn)行過程截圖:

運(yùn)行過程

生成的效果圖:

效果圖

代碼如下:

總結(jié)

以上是生活随笔為你收集整理的python beautiful soup 标签完全相同_Python爬取Python教程并制作成pdf的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。