python爬取csdn排名积分等信息
生活随笔
收集整理的這篇文章主要介紹了
python爬取csdn排名积分等信息
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
初次寫爬蟲,拿很簡單的自己的csdn主頁來練習一下:
打開自己的主頁查看源碼,發現此部分信息在標簽<divclass="result"></div>
很簡單的程序出了點錯,發現是編碼問題,記錄一下
(1)出現urllib2.HTTPError: HTTP Error 403: Forbidden錯誤
由于網站禁止爬蟲,可以在請求加上頭信息,偽裝成瀏覽器訪問
(2)統一編碼,匹配的字符和要查找的字符編碼要統一,尤其是中文要轉換為unicode
Python中的字符串有兩種數據類型:str類型和unicode類型。str類型采用的ASCII編碼,也就是說它無法表示中文。unicode類型采用unicode編碼,能夠表示任意的字符,包括中文、日文、韓文等。在python中字符串默認采用的ASCII編碼,如果要顯示聲明為unicode類型的話,需要在字符串前面加上'u'或者'U'。
如果用中文去查找,字符串前面要加ur
(3)注意不管是search還是findall來進行匹配時,后面添加re.S,可以匹配換行符,要不然查詢不到結果
?其他的備選
- ??? re.I(全拼:IGNORECASE): 忽略大小寫
- ??? re.M(全拼:MULTILINE): 多行模式,改變'^'和'$'的行為
- ??? re.S(全拼:DOTALL): 點任意匹配模式,改變'.'的行為
- ??? re.L(全拼:LOCALE): 使預定字符類 \w \W \b \B \s \S 取決于當前區域設定
- ??? re.U(全拼:UNICODE): 使預定字符類 \w \W \b \B \s \S \d \D 取決于unicode定義的字符屬性
- ??? re.X(全拼:VERBOSE): 詳細模式。這個模式下正則表達式可以是多行,忽略空白字符,并可以加入注釋。
此外注意查看python手冊,如果預編譯用再進行查詢,flag 在compile參數中
pattern = re.compile(xxx,re.S)
pattern.search() //此處的search沒有flag
?
# <!-*- coding:utf-8 -*-> import urllib2 import urllib import re from time import ctime'''需要從<div class="result"></div>中取出下列信息積分:<span>560</span> 排名:第<span>24195</span>名 訪問:<span>5995</span>次 '''headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'} myCsdnUrl = u'http://my.csdn.net/kuaile123' try :myRequest = urllib2.Request(url=myCsdnUrl,headers=headers)myResponse = urllib2.urlopen(myRequest)myPage = myResponse.read()unicodePage = myPage.decode("utf-8")myInfo = re.search(r'<div class="result">.*?</div>',unicodePage,re.S)if myInfo is not None:strInfo = myInfo.group()rankInfo = re.search(ur'積分:<span>(\d+?)</span> 排名:第<span>(\d+?)</span>名 訪問:<span>(\d+?)</span>次',strInfo)if rankInfo is not None:print u'時間: ', ctime()print u'積分: ' , rankInfo.group(1)print u'排名: ' , rankInfo.group(2)print u'訪問量: ' , rankInfo.group(3)except Exception,e:print e運行結果如下:
總結
以上是生活随笔為你收集整理的python爬取csdn排名积分等信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 糗事百科的网络爬虫(v0.2)源码及解析
- 下一篇: Hough 检测直线