beautifulsoup_BeautifulSoup爬虫了解一下
[導語]悠哉悠哉得過完了一個寒假,是時候調整一下回歸求知之路了.這期講一下利用BeautifulSoup庫來爬蟲.[封面via:花瓣網]
01
—
初識BeautifulSoup
[1]scrapy學會了,這里理解起來很容易,大同小異罷了.將返回的response.read用解析器進行解析,學習一下beautifulsoup庫如何篩選數據,也就是如何找到標簽,標簽的屬性,文本這些.下面圖中列出了常用的幾個用法,之后實例中再補充.
[2]:find_all()的結果以列表的形式輸出,所以可以遍歷(循環).
可以看到,第一個li標簽就是啥也沒有,列表的每一個元素都以逗號隔開,之所以print換行是因為\n的緣故.
[3]:提取文本和屬性值
提取屬性值:直接在標簽后面加上['屬性名']就可以了,點取標簽(直接就是soup.a這樣形式)或者find()都可以.這里不能使用find_all(),因為它的輸出是列表,后面加[]會被當成索引處理,報錯.
分隔符只是為了證明兩種寫法都可以提取出href的屬性值
提取文本:get_text() 和string
看一眼這個get_text()的說明,也就知道我后面bug產生的原因了(因為返回的是unicode字符串~)
調用這個方法,當前標簽里的所有子孫tag的文本內容也提取出來了
可以看出,string的條件更為苛刻,最好是定位到當前標簽,才能提取到文本.這里只需要知道一個概念就是在bs4中,文本也是一種節點,叫做NavigableString節點.
解釋地明明白白!
關于bs4的用法有很多,像parents,siblings等等,還是慢慢探索吧~
[reference]BeautifulSoup的中文說明文檔
https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
02
—
爬蟲腳本詳解
目前還不太熟悉在多個函數中游走,所以只簡單的用了一個類,而且這個例子很簡單,也沒翻頁,也沒加headers和代理ip,只需要把結果寫入文件就可以了.
03
—
學習過程中的bug
[1]:運行過程中出現了這個問題,這個問題的解決方法網上可以直接查到,當然,這個一看就是編碼方式出的問題,可以通過修改sys的setdefaultencoding('utf8')解決這個問題,但是一般我們python文件開頭就已經指明了-*-conding:utf-8 -*-,為什么不是按照utf8編碼,而又成了默認的ascii編碼了呢?后來我發現這個問題是因為寫入文件導致的.(python都是將字符串解碼為unicode再編碼的,意思是只有當unicode對象是中文時寫入才會報錯)
前面加u就代表后面內容是一個unicode對象.
以上例子說明,終端的中文輸出沒有問題的,但是寫入文件時的中文就會報這個錯誤,此時需要我們再次指定編碼方式.你可以修改sys,也可以直接在輸出的變量后面加上.encode('utf8')就可以了.
[結束語]總的來說,以scrapy入門還是不錯的,上手bs會很好理解,我自己還是比較喜歡用bs4一點,翻頁和代理以及實戰依舊會提上日程的.不過最近想get一下python和R做圖的知識點,說不定下次會插播一期畫圖心得~
總結
以上是生活随笔為你收集整理的beautifulsoup_BeautifulSoup爬虫了解一下的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wow工程修理机器人图纸_工程的修理机器
- 下一篇: 正则表达式加参数匹配