如何用python爬取兩個span之間的內容

Python用作數據處理仍是至關不錯的,若是你想要作爬蟲,Python是很好的選擇,它有不少已經寫好的類包,只要調用,便可完成不少複雜的功能,此文中全部的功能都是基於BeautifulSoup這個包。html

1 Pyhton獲取網頁的內容(也就是源代碼)python

 

 
page = urllib2.urlopen(url)   
contents = page.read()   
#得到了整個網頁的內容也就是源代碼  
print(contents)  

 

url表明網址,contents表明網址所對應的源代碼,urllib2是須要用到的包,以上三句代碼就能得到網頁的整個源代碼學習

2 獲取網頁中想要的內容(先要得到網頁源代碼,再分析網頁源代碼,找所對應的標籤,而後提取出標籤中的內容)url

2.1 以豆瓣電影排名爲例子spa

網址是http://movie.douban.com/top250?format=text,進入網址後就出現以下的圖.net

                 

如今我須要得到當前頁面的全部電影的名字,評分,評價人數,連接code

由上圖畫紅色圓圈的是我想獲得的內容,畫藍色橫線的爲所對應的標籤,這樣就分析完了,如今就是寫代碼實現,Python提供了不少種方法去得到想要的內容,在此我使用BeautifulSoup來實現,很是的簡單orm

 

 
#coding:utf-8  
''''' 
@author: jsjxy 
'''  
import urllib2   
import re   
from bs4 import BeautifulSoup  
from distutils.filelist import findall  
  
  
  
page = urllib2.urlopen('http://movie.douban.com/top250?format=text')   
contents = page.read()   
 #print(contents)  
soup = BeautifulSoup(contents,"html.parser")  
print("豆瓣電影TOP250" + "\n" +" 影片名              評分       評價人數     連接 ")    
for tag in soup.find_all('div', class_='info'):    
   # print tag  
    m_name = tag.find('span', class_='title').get_text()        
    m_rating_score = float(tag.find('span',class_='rating_num').get_text())          
    m_people = tag.find('div',class_="star")  
    m_span = m_people.findAll('span')  
    m_peoplecount = m_span[3].contents[0]  
    m_url=tag.find('a').get('href')  
    print( m_name+"        "  +  str(m_rating_score)   + "           " + m_peoplecount + "    " + m_url )   

 

  

控制檯輸出,你也能夠寫入文件中htm


前三行代碼得到整個網頁的源代碼,以後開始使用BeautifulSoup進行標籤分析,find_all方法是找到全部此標籤的內容,而後在在此標籤中繼續尋找,若是標籤有特殊的屬性聲明則一步就能找出來,若是沒有特殊的屬性聲明就像此圖中的評價人數前面的標籤只有一個‘span’那麼就找到全部的span標籤,按順序從中選相對應的,在此圖中是第三個,因此這種方法能夠找特定行或列的內容。代碼比較簡單,很容易就實現了,若是有什麼地方不對,還請你們指出,你們共同窗習。blog

源代碼地址:http://download.csdn.net/detail/danielntz/9577390

 

 

轉自:https://blog.csdn.net/danielntz/article/details/51861168

相關文章
相關標籤/搜索