Python 2.7_爬取CSDN单页面利用正则提取博客文章及url_20170114
年前有点忙,没来的及更博,最近看爬虫正则的部分 巩固下
1.爬取的单页面:http://blog.csdn.net/column/details/why-bug.html
2.过程 解析url获得网站源代码
3.找到文章标题列表和文章url(a标签下’href'属性)组成列表
4.for循环取出
#解析用到的还是urlllib urllib2两个模块 并加了个header请求表头
代码及过程如下:
#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)