1. 程式人生 > >python 爬取糗百

python 爬取糗百

Python爬蟲爬取糗百

1、構造請求,檢視爬取的URL,因為糗百的內容有可能有多頁,並且內容很多,所以在爬取的時候選擇只爬取文正的ID以及內容

2、構造爬取過程中的正則表示式,篩選出所需內容(根據網頁原始碼)

3、對爬取內容進行輸出展示

#!/usr/bin/env python
#coding=utf-8
import  urllib2
import  urllib
import  re
import  timefrom urllib2 import  HTTPError
def getdata(url):
    user_agent =
'Mozilla/5.0(Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/56.0.2924.87 Safari/537.36'
   

headers= {'User-Agent':user_agent}
    request = urllib2.Request(
url=url,headers=headers)
    response = urllib2.urlopen(request)
    content = response.read()
    pattern = re.compile(
'<ahref="/article/(\d+)"\s+target.*?contentHerf.*?<span>(.*?)</span>',re.S)
    result = re.findall(pattern
,content)
   
returnresult
if __name__ == '__main__':
    start_page =
1
   
end_page= 35
   
fori inrange(start_page,end_page):
        url =
'http://www.qiushibaike.com/8hr/page/'+str(i)+'/?s=4969805'
       
res= getdata(url)
       
ifres == None:
           
print'no result return'
       
else:
           
forline inres:
               
print line[0],line[1].replace('<br/>','')
        time.sleep(
1)
 

檢視網頁的原始碼如下

<a href="/article/118806702"target="_blank" class='contentHerf' >

<div class="content">

<span>巨招財的石頭,左下角發發發發</span>

</div>

</a>

根據文字內容構造瞭如下的正則

re.compile('<ahref="/article/(\d+)"\s+target.*?contentHerf.*?<span>(.*?)</span>',re.S)

re.S表示的是在普通的正則中(.)這個符號不能代表換行符,利用這個模式之後,換行符同樣能用(.)來表示單個字元(.符號用括號括起來,防止看不清楚)

之後就可以對文字進行輸出處理了。