zoukankan      html  css  js  c++  java
  • 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)
    

        

     
  • 相关阅读:
    Matlab/Simulink仿真中如何将Scope转化为Figure?
    圆形Camera预览实现
    [转]自定义Drawable实现灵动的红鲤鱼动画(下篇)
    [转]自定义Drawable实现灵动的红鲤鱼动画(上篇)
    EventBus源码分析
    Camera 预览变形问题解决
    使用javacv录像,同时进行讯飞声纹认证
    Camera2必知必会
    Flutter混合工程改造实践
    讯飞语音唤醒SDK集成流程
  • 原文地址:https://www.cnblogs.com/Mr-Cxy/p/6284698.html
Copyright © 2011-2022 走看看