利用python 爬取網頁上特定的內容


import urllib    #python中用於獲取網站的模塊

import urllib2, cookielib 

有些網站訪問時需要cookie的,python處理cookie代碼如下:

cj = cookielib.CookieJar ( )

opener =  urllib2.build_opener( urllib2.HttpCookieProcessor(cj) )

urllib2.install_opener (opener) 

通常我們需要在網站中搜索得到我們需要的信息,這里分為二種情況: 

1. 第一種,直接改變網址就可以得到你想要搜索的頁面: 

def GetWebPage( x ):  #我們定義一個獲取頁面的函數,x 是用於呈遞你在頁面中搜索的內容的參數

      url = 'http://xxxxx/xxx.cgi?&' + ‘你想要搜索的參數’   # 結合自己頁面情況適當修改

      page = urllib2.urlopen(url)

      pageContent = page.read( )

      return pageContent                #返回的是HTML格式的頁面信息

2.第二種,你需要用到post方法,將你搜索的內容放在postdata里面,然后返回你需要的頁面  

def GetWebPage( x ):  #我們定義一個獲取頁面的函數,x 是用於呈遞你在頁面中搜索的內容的參數

     url =  'http://xxxxx/xxx'    #這個網址是你進入搜索界面的網址

     postData = urllib.urlencode( {  各種‘post’參數輸入 } )   #這里面的post參數輸入需要自己去查

     req= urllib2.Request (url, postData)

     pageContent = urllib2.urlopen (req). read( )

     return pageContent                #返回的是HTML格式的頁面信息

 在獲取了我們需要的網頁信息之后,我們需要從獲得的網頁中進一步獲取我們需要的信息,這里我推薦使用 BeautifulSoup 這個模塊, python自帶的沒有,可以自行百度谷歌下載安裝。 BeautifulSoup 翻譯就是‘美味的湯’,你需要做的是從一鍋湯里面找到你喜歡吃的東西。 

import re  # 正則表達式,用於匹配字符

from bs4 import BeautifulSoup  # 導入BeautifulSoup 模塊 

soup =  BeautifulSoup(pageContent)  #pageContent就是上面我們搜索得到的頁面 

soup就是 HTML 中所有的標簽(tag)BeautifulSoup處理格式化后的字符串,一個標准的tag形式為: 

hwkobe24 

通過一些過濾方法,我們可以從soup中獲取我們需要的信息: 

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

  這里面,我們通過添加對標簽的約束來獲取需要的標簽列表, 比如 soup.find_all ('p') 就是尋找名字為‘p’的 標簽,而soup.find_all (class = "tittle") 就是找到所有class屬性為"tittle" 的標簽,以及soup.find_all ( class = re.compile('lass')) 表示 class屬性中包含‘lass’的所有標簽,這里用到了正則表達式(可以自己學習一下,非常有用滴) 

當我們獲取了所有想要標簽的列表之后,遍歷這個列表,再獲取標簽中你需要的內容,通常我們需要標簽中的文字部分,也就是網頁中顯示出來的文字,代碼如下: 

   tagList = soup.find_all (class="tittle")   #如果標簽比較復雜,可以用多個過濾條件使過濾更加嚴格 

   for tag in tagList:

         print tag.text

         f.write ( str(tag.text) )  #將這些信息寫入本地文件中以后使用 

(2)find( name , attrs , recursive , text , **kwargs ) 

       它與 find_all( ) 方法唯一的區別是 find_all() 方法的返回結果是值包含一個元素的列表,而 find() 方法直接返回結果 

(3)find_parents( )  find_parent( ) 

    find_all() 和 find() 只搜索當前節點的所有子節點,孫子節點等. 

find_parents() 和 find_parent() 用來搜索當前節點的父輩節點,搜索方法與普通tag的搜索方法相同,搜索文檔搜索文檔包含的內容 

(4)find_next_siblings()  find_next_sibling() 

      這2個方法通過 .next_siblings 屬性對當 tag 的所有后面解析的兄弟 tag 節點進代, find_next_siblings() 方法返回所有符合條件的后面的兄弟節點,find_next_sibling() 只返回符合條件的后面的第一個tag節點 

(5)find_previous_siblings()  find_previous_sibling() 

     這2個方法通過 .previous_siblings 屬性對當前 tag 的前面解析的兄弟 tag 節點進行迭代, find_previous_siblings()方法返回所有符合條件的前面的兄弟節點, find_previous_sibling() 方法返回第一個符合條件的前面的兄弟節點 

(6)find_all_next()  find_next() 

     這2個方法通過 .next_elements 屬性對當前 tag 的之后的 tag 和字符串進行迭代, find_all_next() 方法返回所有符合條件的節點, find_next() 方法返回第一個符合條件的節點 

(7)find_all_previous() 和 find_previous()     

      這2個方法通過 .previous_elements 屬性對當前節點前面的 tag 和字符串進行迭代, find_all_previous() 方法返回所有符合條件的節點, find_previous()方法返回第一個符合條件的節點。

 

實際代碼示例:(爬取網頁下的指定鏈接)

from bs4 imp
#html文本
html_text=""

soup=BeautifulSoup(html_text,'html.parser')
a=soup.select('a')
for i in a:
if i.string=="關鍵詞":
findb_ur=i['href']
#輸出通過搜索a標簽中的字符串獲得網頁鏈接
# print(findb_url)
#findb_url="https:"+finburl
alist=soup.find_all('a)
for a in alist:
1.通過下標操作的方式
href=a['href']
print(htref)
2.通過attrs屬性的方式
href=a.attrs['href']
print(href)


免責聲明!

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



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