爬蟲入門之beautifulsoup(一)

近期需要爬取足彩信息,因爲需求比較特殊,所以準備自己爬數據。

 

一開始學了一個非常簡單的爬蟲例子,主要用到了beautifulsoup和requests

 

from bs4 import BeautifulSoup
import requests
import lxml


url = 'https://movie.douban.com/cinema/later/chengdu/'
response = requests.get(url)

ans = response.content.decode('utf-8')
# print(response.content.decode('utf-8'))

soup = BeautifulSoup(ans,'lxml')
# print(soup)
all_movie = soup.find('div',id = "showing-soon")

for each_movie in all_movie.find_all('div',class_='item'):
    movie_name = each_movie.find_all('a')[1].text
    print(movie_name)

用着幾行代碼先爬了豆瓣的電影數據。

但是,這畢竟是入門,我需要爬取的是多個網頁,一個一個網址輸入是不行的,所以還是準備從基礎的爬蟲開始試着學一下,如果進度太慢,我就直接用for循環加上述的簡單代碼嘗試爬取數據。

 

這裏主要是直接用beautifulsoup這個庫,聽說這個庫對於爬蟲初學者非常友好並且簡潔。官方文檔的網址:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/

是有中文文檔的。

 

文檔開頭介紹對象的內容比較簡單,直接從遍歷文檔樹這個部分開始學習。

 

子節點操作:

1. 由於beautifulsoup的優勢是簡潔,不太需要像其他框架那樣嚴謹的正則化。它自帶了tag以及tag的樹型數據結構。

對於html格式的內容,可以通過.的操作直接獲取,如soup.head即可回去內容的head。

特別地,“.”操作能夠跳級獲取內容。如果在head的tag下還有一個title的tag,完全可以直接soup.title獲取。

 

2. 我們說tag是beautifulsoup的一個對象屬性,但是對於正兒八經的html格式內容,會有真正的“標籤”<a>。這些標籤裏的內容往往是我們真正需要的詳細內容,如果需要獲取真正標籤內的內容,我們需要用到find_all()方法。

soup.find_all('a')    #獲取了所有a標籤內的內容

 

3. contents和.childen操作

這個操作是我比較喜歡的,直接使用.contents可以以list形式輸出內容:

print(soup.head.contentas)

#[XXXXXXX]

而.childen也是我很喜歡的,它能夠直接枚舉出所有的子節點,多用於for循環中。

與之相近的是.descendants,這個屬性不僅能夠枚舉出子節點,還能把子節點的節點都全部枚舉。

 

4. string屬性

我認爲這個屬性比較多餘,他的意思就是如果該節點僅僅只有一個子節點,那麼就輸出這個節點,完全可以用.contents直接取代他。

 

 

——————————————————————————————————————————————————

學到這裏我大致看了一下剩下的官方文檔,其實可以用到的時候直接看,那麼我的問題還是沒有得到解決:

我需要的是多個網頁跳轉爬取信息,這個beautifulsoup說來說去都是在解析html內容的,那麼這個部分可以先擱置,實戰中彌補,那麼回到項目流程,我接下來需要解決的是網頁跳轉。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章