Python 3 爬蟲的自我探索(三)

Step 1 : 獲取HTML文件的內容

# encoding: UTF-8
# 爬蟲獲取:南方電網招標採購信息
import requests

# 定義主入口網址
main_url = "http://www.bidding.csg.cn/zbcg/index.jhtml"

# 請求網址
r = requests.get(main_url)

# 打印:返回結果的類型,狀態碼,編碼方式,Cookies
print(type(r))
print(r.status_code)
print(r.encoding)
print(r.cookies)

# 打印返回的內容
print(r.text)

Step 2 : 創建BeautifulSoup對象

from bs4 import BeautifulSoup

requests

1. 基本Get

支持get, put, delete, head, options

r = request.get('http://www.baidu.com')

加參數的Get(Params)

url = 'http://.......'
payload = {'key1':'value1', 'key2':'value2'}
r = request.get(url, params=payload)

BeautifulSoup

四大對象種類

Beautiful Soup將複雜HTML文檔轉換成一個複雜的樹形結構,每個節點都是Python對象,所有對象可以歸納爲4種:
- Tag
- NavigableString
- BeautifulSoup
- Comment

1. Tag

  1. Tag通常來說就是HTMl中的一個標籤。可以用來查找一個標籤的內容,比如此處獲取 title 標籤:
print soup.title
  1. 對於Tag,有兩個重要的屬性
    • name
    • print soup.title.name
    • 輸出對象的名稱
    • attrs
    • print soup.a.attrs
    • 輸出對象的屬性,類型是一個字典
    • 獲取單獨某個屬性
    • print soup.a[href]
    • `print soup.a.get('href')

2. NavigableString

獲取標籤內部的文字

print soup.a.string

3. BeautifulSoup對象

BeautifulSoup 對象表示的是一個文檔的全部內容.大部分時候,可以把它當作 Tag 對象,是一個特殊的 Tag,我們可以分別獲取它的類型,名稱,以及屬性

4. Comment

Comment 對象是一個特殊類型的 NavigableString 對象,其實輸出的內容仍然不包括註釋符號,但是如果不好好處理它,可能會對我們的文本處理造成意想不到的麻煩。

遍歷文檔樹

1. 直接子節點

  • .contents
    • tag 的 .content 屬性可以將tag的子節點以列表的方式輸出
    • print soup.head.contents
    • print soup.head.contents[0]
  • .children
    • print soup.head.children
    • for child in soup.body.children:print child

2. 所有子孫節點

  • .descendants
    • for child in soup.descendants:print child

3. 節點內容

如果一個標籤裏面沒有標籤了,那麼 .string 就會返回標籤裏面的內容。如果標籤裏面只有唯一的一個標籤了,那麼 .string 也會返回最裏面的內容

4.多個內容

1. .strings

獲取多個內容,不過需要遍歷

2. .stripped_strings

輸出的字符串中可能包含了很多空格或空行,使用 .stripped_strings 可以去除多餘空白內容

父節點(加s表示全部)

Tag的父節點:Tag.parent
- .parent

兄弟節點(加s表示全部)

Tag的兄弟節點:Tag.next-sibling
- .next_sibling
- .previous_sibling

搜索文檔樹

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

搜索當前tag的所有tag子節點,並判斷是否符合過濾器的條件

  • name

    • 可以查找所有名字爲name的tag,字符串對象會被忽略
    • A. 傳字符串
      • print soup.find_all('a')
      • 查找文檔中所有的標籤
    • B. 傳正則表達式
      • soup.find_all(re.compile("^b"))
      • 查找文檔中以b開頭的標籤
    • C. 傳列表
      • soup.find_all(['a','b')
      • 查找文檔中全部a和b標籤
    • D. 傳True
      • 查找全部Tag,但是不會返回字符串節點
    • E. 傳方法
      • 還可以定義一個方法,方法只接受一個元素參數 [4] ,如果這個方法返回 True 表示當前元素匹配並且被找到,如果不是則反回 False
  • KeyWord

    • 如果傳入 href 參數,Beautiful Soup會搜索每個tag的”href”屬性
      • soup.find_all(href=re.compile("elsie"))
    • 使用多個指定名字的參數可以同時過濾tag的多個屬性
      • soup.find_all(href=re.compile("elsie"), id='link1')
  • text
    • 搜索字符串內容
    • 同樣可以像name的可選參數一樣
發佈了34 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章