簡體   English   中英

Python的“ BeautiulSoup()”函數實際上是做什么的?

[英]Python 'BeautiulSoup()' function what does it actually do?

Python nube在這里。 我知道兩種將URL解析為BeautifulSoup來打開URL的方法。

方法#1使用請求

from bs4 import BeautifulSoup
import requests   
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
print soup.prettify()

方法2:使用URLLIB / URLLIB2

from bs4 import BeautifulSoup
import urllib2
f = urllib2.urlopen(url)
page = f.read() #Some people skip this step.
soup = BeautifulSoup(page)
print soup.prettify()

我有以下問題:

  1. BeautifulSoup()函數的作用是什么? 在某個地方需要page.contenthtml.parser ,在某個地方僅需要urllib2.urlopen(url).readurllib2.urlopen(url).read (如第二個示例中所述)。 這很簡單,但是很難理解這里發生了什么。 我檢查了官方文檔,不是很有幫助。 (請同時評論html.parserpage.content ,為什么不像第二個示例那樣只使用html和page呢?)

  2. 在如上所述的方法2中,如果我跳過f.read()命令,會有什么區別?

對於專家來說,這些問題可能非常簡單,但是我非常感謝您的幫助。 我已經用谷歌搜索了很多,但仍然沒有得到答案。 謝謝 !

BeautifulSoup無法打開URL。 它采用HTML,並且使您能夠美化輸出(如您所做的那樣)。

在方法1和方法2中,您都是使用另一個庫(請求或urllib)獲取HTML,然后將生成的HTML呈現給漂亮的湯。

這就是為什么您需要閱讀方法2中的內容的原因。

因此,我認為您在尋找文檔的地方錯誤。 您應該搜索如何使用請求或urllib(我建議自己使用請求)。

BeautifulSoup是一個Python軟件包,可幫助您解析html。

它需要的第一個參數只是原始的html響應,或者它可以解析的任何原始的html或xml文本,因此,只要包以有效的html格式傳遞內容,就無關緊要。

在第一個示例html.parser ,第二個參數告訴BeautifulSoup使用哪個包實際解析數據。 據我所知只有html.parserlxml 2個選項。 它們基本相同,但具有不同的性能優勢,據我所知,這是唯一的區別。

如果省略第二個參數,那么BeautifulSoup軟件包將僅使用默認值,在大多數情況下為lxml

對於您的最后一個問題,我並不完全確定,但是我認為先調用f.read()或讓BeautifulSoup隱式執行此操作之間沒有根本區別,但這並不總是有效的,並且是不好的做法。

就像@Klaus在給您的評論中說的那樣,您應該在這里真正閱讀文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM