Python 2.7_爬取CSDN單頁面博客文章及url(二)_xpath提取_20170118

上次用的是正則匹配文章title 和文章url,由於最近在看Scrapy框架爬蟲 須要瞭解xpath語法 學習了下拿這個例子練手html

一、爬取的單頁面仍是這個rooturl:http://blog.csdn.net/column/details/why-bug.htmlpython

二、用requests的 get方法添加一個header 請求rooturl得到網站源代碼  不添加header源代碼裏面是抓不到內容的app

三、用lxml下的etree.HTML()方法 將requests請求的html源碼(html變量)返回給seletor這個對象框架

四、分析網頁結構 找到可以包含文章url和標題內容的區域 調用返回的selector.xpath()方法 返回一個Element類型對象的列表infos函數

五、定義一個空列表titlelists,這個大列表用來保存 第6步取出的 titleurls列表和文章titlenames列表 用zip函數整理成titlelist列表 元素爲(titleurl,titlename)元組的一個列表 進而添加進大列表titlelists學習

六、大列表titlelists 此時的數據類型是列表 每個元素爲一個小列表 小列表元素爲元組 進行遍歷切片 以前用的是enumerate 方法取索引和內容 如今用titlelists.index(i)方法取索引網站

代碼以下:url

#coding:utf-8
from lxml import etree
import requests
import sys
reload(sys)
sys.setdefaultencoding('utf8')

rooturl='http://blog.csdn.net/column/details/why-bug.html'
headers={'User-Agent':'Chrome'}
req=requests.get(rooturl,headers=headers)
req.encoding='utf-8'
html=req.text
selector=etree.HTML(html)
infos=selector.xpath('//ul[@class="detail_list"]/li')
titlelists=[]
for info in infos:
    titleurls=info.xpath('h4/a/@href')
    titlenames=info.xpath('h4/a/text()')
    titlelist=zip(titleurls,titlenames)
    titlelists.append(titlelist)
print  '爬取完畢,一共爬取了%s篇文章' % len(titlelists)
for i in titlelists:
    print '第%s篇文章爲:【%s】,連接:%s' % (titlelists.index(i)+1,i[0][1],i[0][0])

 

相關文章
相關標籤/搜索