利用Python和Beautiful Soup抓取網頁內容


      Python 3中提供了url打開模塊urllib.request和HTML的解析模塊html.parser模塊。但是html.parser模塊的功能比較簡單,很難滿足現今解析網頁內容的需求。Beautiful Soup 4是一個功能非常強大的HTML和XML文件解析Python庫。而且它提供了非常完善的文檔(http://www.crummy.com/software/BeautifulSoup/bs4/doc/)。

 

Beautiful Soup 4的安裝及相關問題

      Beautiful Soup的最新版本是4.1.1可以在此獲取(http://www.crummy.com/software/BeautifulSoup/bs4/download/)。我使用的是Mac OSX,在這個平台上安裝Beautiful Soup,只需解壓安裝包並運行setup.py文件即可:

$ python3 setup.py install

      安裝過程中如果得到SyntaxError “Invalid syntax” on the line ROOT_TAG_NAME = u'[document]',需要將Python 2的代碼轉化成Python 3:

$ 2to3-3.2 -w bs4

 

URL中的中文編碼問題

      在URL中經常會見到包含中文的情況,如下面這個在去哪兒網上搜索2012-08-09日從北京到麗江的機票的URL:

http://flight.qunar.com/site/oneway_list.htm?searchDepartureAirport=北京&searchArrivalAirport=麗江&searchDepartureTime=2012-08-09

      如果直接將這個URL傳給urllib.request.urlopen會導致TypeError。解決方法是構造一個參數名和參數值的元組,並利用urllib.parse.urlencode方法對其編碼。示例代碼如下:

1 url ='http://flight.qunar.com/site/oneway_list.htm'
2 values ={'searchDepartureAirport':'北京','searchArrivalAirport':'麗江','searchDepartureTime':'2012-07-25'}
3 encoded_param = urllib.parse.urlencode(values)
4 full_url = url +'?'+ encoded_param

 

網頁內容抓取:下面的示例代碼展示了如何抓取百度搜索關鍵字“網球”時的網頁內容。

 1 import urllib.parse
 2 import urllib.request
 3 from bs4 import BeautifulSoup
 4 
 5 url ='http://www.baidu.com/s'
 6 values ={'wd':'網球'}
 7 encoded_param = urllib.parse.urlencode(values)
 8 full_url = url +'?'+ encoded_param
 9 response = urllib.request.urlopen(full_url)
10 soup =BeautifulSoup(response)
11 soup.find_all('a')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM