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)
    

        

     
  • 相关阅读:
    mysql备份
    Linux 配置参考
    oracle补丁安装
    多智能体城市交通计算综合应用
    基于纳什均衡的多智能体强化学习交通信号控制
    多智能体强化学习在城市交通信号控制中的研究与应用- 笔记
    Sarsa与Q-learning
    Pandas笔记
    Python学习笔记
    Game Theory and Multi-agent Reinforcement Learning笔记 下
  • 原文地址:https://www.cnblogs.com/Mr-Cxy/p/6284698.html
Copyright © 2011-2022 走看看