Python 2.7_爬取CSDN單頁面利用正則提取博客文章及url_20170114

年前有點忙,沒來的及更博,最近看爬蟲正則的部分 鞏固下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)

    

相關文章
相關標籤/搜索