Mr_Cxy

导航

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

上次用的是正则匹配文章title 和文章url,因为最近在看Scrapy框架爬虫 需要了解xpath语法 学习了下拿这个例子练手

1、爬取的单页面还是这个rooturl:http://blog.csdn.net/column/details/why-bug.html

2、用requests的 get方法添加一个header 请求rooturl获得网站源代码  不添加header源代码里面是抓不到内容的

3、用lxml下的etree.HTML()方法 将requests请求的html源码(html变量)返回给seletor这个对象

4、分析网页结构 找到能够包含文章url和标题内容的区域 调用返回的selector.xpath()方法 返回一个Element类型对象的列表infos

5、定义一个空列表titlelists,这个大列表用来保存 第6步取出的 titleurls列表和文章titlenames列表 用zip函数整理成titlelist列表 元素为(titleurl,titlename)元组的一个列表 进而添加进大列表titlelists

6、大列表titlelists 此时的数据类型是列表 每一个元素为一个小列表 小列表元素为元组 进行遍历切片 之前用的是enumerate 方法取索引和内容 现在用titlelists.index(i)方法取索引

代码如下:

#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])

 

  

posted on 2017-01-18 21:15  Mr_Cxy  阅读(252)  评论(0编辑  收藏  举报