-------------------------------------------
--------------爬蟲的思路-------------------
-------------------------------------------
先判斷網頁是否允許爬蟲
(1)get_html()獲取源碼
1、不允許就加上headers頭部信息,模擬用戶訪問
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36'}
2、請求進入網頁
request = urllib2.Rwquest(url,headers = headers)
3、打開網頁
response = urllib2.urlopen(request)
4、獲取源碼
text = response.read()
(2)get_Url()獲取標題或者內容
1、進入網頁尋找網頁中我們尋找的內容部分
2、找到標題或者內容那一部分,通過正則表達式匹配該部分
pattern = re.compile('<a href="/story/(.*?)"',re.S)# re.S匹配換行符
3、在整個網頁中匹配這個內容
items = re.findall(pattern,html)
4、打印出來
urls = []#多個頁面,把每個頁面的編碼放到list中
for item in items:
urls.append('http://daily.zhihu.com/story/'+item)
#print urls[-1] #切片
return urls
5、調用顯示
(3)多頁的顯示
1、看每頁的網址的區別,一般是在后面加上+str(page)
2、然后分別調用每頁的內容
(4)把獲取的內容寫到文件中保存
items = pattern.compile(patten,html)
with open('test.txt','w') as test:
for item in items:
test.write(item)#往文件中寫內容
test.write("\n")#換行
我們如果想爬取一個網頁,那么就需要打開網頁獲取網頁的源碼,一般使用谷歌和火狐稍微好點,現在教你們怎樣獲取網頁源碼:
1、打開網頁,在網頁空白處右擊選擇查看網頁源代碼;
2、進入源代碼查找你需要用到的信息,復制下來,然后用正則匹配下來,我們有個懶惰匹配(.*?)就是代表你要獲取的內容,不需要可以用.*?代替,很長的數字可以用\d+代替等等,具體的正則表達式看我之前的帖子http://www.cnblogs.com/zhangjiansheng/p/6853729.html,里面有詳細描述。
比如下面這個例子:
<tr><td>1</td><td>989584027708</td><td>(香港地區)National_Bank_Abu_Dhabi</td><td>00852-341343660</td><td>18/F_Nine_Queens_Road_Central</td></tr>
<tr><td>\d+</td><td>\d+</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td></tr>

以上只是爬取沒有反爬機制的網頁。
下面是用正則與urllib編寫的一個爬蟲,用來爬取http://furhr.com/,把所有的銀行名稱,聯系電話,銀行地址爬取下來,並把爬取到的內容放到Excel表格內,具體程序如下所示:
# -*- coding:utf-8 -*- __author__ = 'Demon' import xlwt#excel表格函數 import urllib,re def getdata(): url_list = [] for i in range(1,100): url = 'http://furhr.com/?page={}'.format(i)#多頁調用 #print url try:#錯誤處理 html = urllib.urlopen(url).read()#打開網頁獲取源碼 #print html except Exception as e: print e continue #正則表達式 獲取想要獲取的內容 page_list = re.findall(r"<tr><td>\d+</td><td>\d+</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td></tr>",html) #print page_list url_list.append(page_list)#把匹配到的內容放到list里面 return url_list def excel_write(): newTable = 'test.xls'#新建一個excel表格並命名 wb = xlwt.Workbook(encoding='utf-8')#申明表格編碼格式 ws = wb.add_sheet('test1')#增加表格單元 headData = ['公司名稱','電話','地址']#寫表頭 for colnum in range(0,3): ws.write(0,colnum,headData[colnum],xlwt.easyxf('font: bold on')) #把表頭寫在第0行,0,1,2這三列,並把字體設置為加粗 index = 1 for item in items:#把數據寫到表格里面 for j in range(0,len(item)): for i in range(0,3): # print item[j] print item[j][i] ws.write(index,i,item[j][i]) index +=1 wb.save(newTable) if __name__ == "__main__":#判斷函數入口 items = getdata()#調用網頁源碼獲取函數 excel_write()#調取Excel函數,把數據放在Excel中
爬取的結果如下圖所示:


