年前有點忙,沒來的及更博,最近看爬蟲正則的部分 鞏固下html
1.爬取的單頁面:http://blog.csdn.net/column/details/why-bug.htmlpython
2.過程 解析url得到網站源代碼正則表達式
3.找到文章標題列表和文章url(a標籤下’href'屬性)組成列表網站
4.for循環取出url
#解析用到的仍是urlllib urllib2兩個模塊 並加了個header請求表頭.net
代碼及過程以下:htm
#coding:utf-8 import re import urllib import urllib2 rooturl='http://blog.csdn.net/column/details/why-bug.html' #urllib2.Request()方法 請求 req=urllib2.Request(rooturl) req.add_header('User-Agent','Chrome') req=urllib2.urlopen(req) #req變量的read()方法得到源代碼 html=req.read() #分析文章標題和href屬性 #標題和文章url都在a標籤內 url格式爲'http://blog.csdn.net/pleasecallmewhy/article/details/(****)',標題在'target="_blank">(****)</a>' #寫正則表達式 利用()小括號將url和標題分組 rs=r'<a href="(http://blog.csdn.net/pleasecallmewhy/article/details/.*?)" target="_blank">(.*?)</a>' #利用正則findall(正則表達式rs,查找的範圍) 如今及findall(rs,html)找到全部符合條件的元素並返回一個列表titlelist titlelist=re.findall(rs,html) #由於正則表達式是有2個分組 一個是文章url('href='之後括號的內容),一個是文章標題 這兩個內容在titlelist裏面是以元組形式構成的 #列表的長度就是頁面有多少篇博客文章 print '爬取完畢,一共%s篇文章' % len(titlelist) #由於想實現打印出第幾篇文章 文章標題 文章連接的效果 須要對titlelist進行遍歷 用到的是列表list類的enumerate()方法 打印出列表索引和值 #第一個索引值爲0 值爲一個元組(文章url,文章標題) 這個元組又能夠切片 所以取這個元組的第一個元素和第二個元素及實現效果 for i,j in enumerate(titlelist): #i爲titlelist列表的索引 j爲titlelist列表的值 #取j的第一個元素j[0]即文章url 賦值給變量titurl 標題一樣 titleurl=j[0] titlename=j[1] #打印效果 用%格式化輸出 titlelist索引值從0開始所以對i+1 表明第一篇文章 print '第%s篇文章爲:【%s】,連接:%s' %(i+1,titlename,titleurl)