【Python實例二】BeautifulSoup爬蟲簡單實踐


前言

前面安裝了BeautifulSoup庫,現在就來實現一下吧。

 

目錄

一、Urllib庫的使用

二、BeautifulSoup的使用

三、 一個示例

------------------------------------------------------------------------------------------------------------

正文

一、Urllib庫的使用

看了一些簡單爬蟲的資料,都用到了Urllib庫,想必這也是與web爬取數據的基礎,因此先去看了看Urllib庫的相關內容。

按我自己的理解,爬取網頁的內容其實就是先把頁面的信息先通過Urllib庫抓取到本地,然后再通過BeautifulSoup庫來精細划分抓取得到的頁面內容數據。

使用Urllib庫的最基本方法其實就三行代碼(如下):

# -*- coding: utf-8 -*-
import urllib

res = urllib.urlopen("http://www.baidu.com")
print res.read()

具體解釋:

  • urllib庫一般安裝完Python后就自帶在其安裝包里面了,所以直接使用"import urllib"語句就能直接使用了;
  • urllib.urlopen(url[, data[, proxies]]) :創建一個表示遠程url的類文件對象,然后像本地文件一樣操作這個類文件對象來獲取遠程數據。

      (參數url表示遠程數據的路徑,一般是網址;參數data表示以post方式提交到url的數據)

  • urlopen()返回 一個類文件對象(此處用res來獲取該對象),它提供了如下方法:read() , readline() , readlines() , fileno() , close()
  • res.read()返回獲取到的網頁內容

最后輸出的內容如下所示(相當於查看網頁源碼看到的內容)

 

二、BeautifulSoup的使用

 在用Urllib庫從網頁上得到了網頁數據后,就要開始使用BeautifulSoup了。

1. 首先創構造一個BeautifulSoup對象

下面有一些最簡單的例子:

(1)通過字符串創建BeautifulSoup對象

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
helloworld = '<p>Hello World</p>'
soup_string = BeautifulSoup(helloworld, "html.parser")
print soup_string 

結果:

(2)通過類文件對象創建BeautifulSoup對象

# -*- coding: utf-8 -*-
import urllib
from bs4 import BeautifulSoup

url = "http://www.baidu.com"
page = urllib.urlopen(url)
soup = BeautifulSoup(page,"html.parser")
print soup

因為前面說的Urllib庫用urlopen()返回的就是一個類文件對象,所以這里的結果和之前Urllib中對象調用read()得到的結果是一樣的。

(3)通過本地文件對象創建BeautifulSoup對象

# -*- coding: utf-8 -*-
import urllib
from bs4 import BeautifulSoup

with open('index.html','r') as foo_file :
    soup_foo = BeautifulSoup(foo_file, "html.parser")
print soup_foo

【注意】以上的三種方法創建BeautifulSoup對象使用的語句是:BeautifulSoup(urllib庫對象名, "html.parser"),其中標紅的部分"html.parser"是我時間之后發現要加的,很多教程里面是直接使用 BeautifulSoup(urllib庫對象名)來創建,但是我運行的時候會有一個warning:

於是就按照提示上說的,加上了"html.parser",運行之后果然正常了,所以如果你也遇到一樣的問題,就還是加上它吧:)


2.使用BeautifulSoup庫的 find()和findAll()函數

在構造好BeautifulSoup對象后,借助find()和findAll()這兩個函數,可以通過標簽的不同屬性輕松地把繁多的html內容過濾為你所想要的。

這兩個函數的使用很靈活,可以: 通過tag的id屬性搜索標簽、通過tag的class屬性搜索標簽、通過字典的形式搜索標簽內容返回的為一個列表、通過正則表達式匹配搜索等等

基本使用格式:

pid = soup.find(attrs={"id":"aa"})
pid = soup.findAll('a',{'class':'sister'})

 

三. 一個示例

這個示例是我在查找資料的時候看到的,按照代碼運行得出來,理解起來也簡單,因此就借鑒一下

(原文地址:http://www.cnblogs.com/hearzeus/p/5151449.html

下面是代碼和效果:

# -*- coding: utf-8 -*-
import urllib
from bs4 import BeautifulSoup

res = urllib.urlopen("http://www.douban.com/tag/%E5%B0%8F%E8%AF%B4/?focus=book")
soup = BeautifulSoup(res,"html.parser")
book_div = soup.find(attrs={"id":"book"})
book_a = book_div.findAll(attrs={"class":"title"})
for book in book_a:
    print book.string

 


免責聲明!

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



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