下载徐小明新浪博客全部博文链接

2023-10-29

利用爬虫把徐小明新浪博客里的所有博文链接爬下来,保存到脚本所在路径的csv文件中(python2.7代码)

把起始博文目录链接换成其他的也是完全可以的

详细内容请关注微信公众号:岛城窝窝,


代码如下

#! /usr/bin/env python
#coding=utf-8
# by huangle63
'''
此代码功能为把徐小明新浪博客的所有博文链接下载保存到本地csv文件中
运行本程序,会在脚本所在路径生成一个 xuxiaoming_blog_catalog.csv 文件
20150419 huangle63
'''
import sys
import re
import csv
import urllib2
from bs4 import BeautifulSoup

#获取页面代码,返回对象是 BeautifulSoup 格式
def get_http_content(url):
    try:
        user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
        headers = { 'User-Agent' : user_agent }
        html = urllib2.Request(url, headers = headers)
        myResponse = urllib2.urlopen(html)
        myPage = myResponse.read()
        bsObj = BeautifulSoup(myPage,'html5lib')
        return bsObj
    except urllib2.URLError as e:
        return None

#每个页面链接里有n个博文目录链接
def spider_catalog(spider_href):
    no_spider_hrefs.remove(spider_href)
    #获取当前页面链接里的博文目录链接
    url_content = get_http_content(spider_href)
    if url_content == None:
        print('ERROR1: Page could not be found')
    else:
        #获取页面目录信息,格式:日期    标题名   链接
        #把获取的信息保存到csv文件中
        csvFile = open(sys.path[0] + r'\xuxiaoming_blog_catalog.csv','ab')
        try:
            for link in url_content.findAll('div',{'class':'articleCell SG_j_linedot1'}):
                link_title = link.find('a', href = re.compile("^(http://blog.sina.com.cn/s)")).get_text().replace(u'\u200b','').replace(u'\xa0','')
                link_href = link.find('a', href = re.compile("^(http://blog.sina.com.cn/s)")).attrs['href']
                link_date = link.find('span',{'class':'atc_tm SG_txtc'}).get_text()
                print(link_date + '   ' + link_title + '    ' + link_href)
                writer = csv.writer(csvFile)
                writer.writerow((link_date,link_title.encode("gbk"),link_href))
        except AttributeError as e:#当调用BeautifulSoup对象不存在时,会返回一个NONE对象,如果再调用这个NONE对象下面的子标签,就会发生AttributeError错误
            print('ERROR2: BeautifulSoup get the none tag')
        finally:
            csvFile.close()

        #获取当前页面里的其它页面链接(第一页,第二页......)
        try:
            for link in url_content.find('ul',{'class':'SG_pages'}).findAll('li'):
                all_li = link.find('a',href = re.compile("^(http://blog.sina.com.cn/s)"))
                if all_li != None:
                    link_page_href = all_li.attrs['href']
                    if link_page_href not in page_hrefs:
                        page_hrefs.add(link_page_href)
                        no_spider_hrefs.add(link_page_href)
                        link_page_title = all_li.get_text().replace(u'\u200b','').replace(u'\xa0','')
                        print(link_page_title + '    ' + link_page_href)
                        spider_catalog(link_page_href)  #递归查询所有页面链接
        except AttributeError as e:#当调用BeautifulSoup对象不存在时,会返回一个NONE对象,如果再调用这个NONE对象下面的子标签,就会发生AttributeError错误
            print('ERROR2: BeautifulSoup get the none tag')
        except Exception as e:
            print('ERROR3: ',e)

page_hrefs = set() #pages_href用于去重,把所有链接都存储在pages_hrefs
no_spider_hrefs = set() #用于存储还没有爬虫的页面链接
start_page_html = 'http://blog.sina.com.cn/s/articlelist_1300871220_0_1.html' #起始博文的网页链接
page_hrefs.add(start_page_html)
no_spider_hrefs.add(start_page_html)
spider_catalog(start_page_html)



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

下载徐小明新浪博客全部博文链接 的相关文章

随机推荐

  • Winform各控件详解(笔记)

    DataGridView简称DGV http www cnblogs com 08shiyan archive 2010 08 10 1796768 html
  • iOS项目技巧+封装过程

    前言 接手一个外包项目 发现问题颇多 下面是对整个项目封装过程的记录 当前项目存在的问题 1 接口前缀太多 切换环境不方便 2 通用方法没有进行封装 gt 支付方法哪里用到写哪里 3 扩展性和容错率太低 许多数组取值是直接根据数组下标来取的
  • Java IO 学习总结(四)BufferedReader 缓冲字符流

    Java IO 学习总结 一 输入流 输出流 Java IO 学习总结 二 File 类 Java IO 学习总结 三 BufferedInputStream Java IO 学习总结 四 BufferedReader 缓冲字符流 Java
  • CSS常用函数补充(var、clac、blur、gradient)

    文章目录 一 var 1 1 简介 1 2 使用 1 3 规则 二 calc 2 1 简介 2 2 使用 三 blur 3 1 简介 3 2 使用 3 2 1 filter 3 2 2 backdrop filter 四 gradient
  • [深入研究4G/5G/6G专题-55]: L3信令控制-4-软件功能与流程的切分-CU网元的信令

    目录 第1章 软件架构 1 1 总体架构 1 2 微服务架构 1 3 基本模型 第2章 5G CP IF 控制面对外的公共接口
  • 收藏一些很炫的html特效

    文字颜色变换
  • get;get属性器

    get set是用来扩展域的 也就是C里的变量 只是用起来更加灵活而己 看以下代码 using System public class cls private int book 定义一个域 也可以叫变量 只是面向对像里都这么叫 使用起来也更
  • 人工智能(AI)产生影响

    人工智能 AI 的快速发展已经开始对各个行业产生了深远的影响 作为一种人工智能技术的应用 自然语言处理模型也将对文章创作产生影响 以下是人工智能对文章创作行业可能产生的影响 1 帮助提高文章的质量和效率 自然语言处理模型已经可以模仿人类创作
  • DM JDBC 使用 Hikaricp连接池框架开发示例

    一 DM JDBC 配置指南 达梦数据库提供的JDBC驱动windows放置路径 D dmdbms drivers jdbc 具体数据库安装路径以实际为准 JDK1 5版本 使用 DmJdbcDriver15 jar JDK1 6版本 使用
  • Vue 3.0 全家桶 + Vite 从零配置开发环境、生产环境

    上篇文章我们对比了 Vite 与 Webpack 的差异 接下来 准备将项目中用到的 Webpack 5 0 替换为 Vite 2 0 我们先着手从零配置开发 生产环境 文章目录 一 初始化 1 初始化 package json 2 安装
  • 对抗验证概述

    了解如何实施对抗性验证 以建立分类器来确定您的数据是来自训练还是测试集 如果可以这样做 则您的数据有问题 并且对抗验证模型可以帮助您诊断问题 如果您要在Kaggle上研究一些获胜的解决方案 则可能会注意到对 对抗性验证 的引用 像这样 它是
  • QT5无法输入中文,如何解决???

    环境 UBUNTU 12 04 LTS 最近在Ubuntu下安装了QT5 0 2版本 在尝试完跑实例程序后 自己想做一个Socket的TCP IP通信例子 但是悲剧的发现QT5中竟然不能切换输入法到中文 所做尝试包括 1 换输入法fctix
  • 分页组件封装

    scss 分页 el pagination text align right margin top 20px span el pagination total position absolute left 0 is background e
  • 白盒测试基本方法

    白盒测试的概述 由于逻辑错误和不正确假设与一条程序路径被运行的可能性成反比 由于我们经常相信某逻辑路径不可能被执行 而事实上 它可能在正常的情况下被执行 由于代码中的笔误是随机且无法杜绝的 因此我们要进行白盒测试 白盒测试又称结构测试 透明
  • Maven : has broken classes path unknown

    1 美图 2 背景 windows下 因为要整理Maven 的pom文件 我加入了一个
  • Java提高篇——equals()方法和“==”运算符

    equals 超类Object中有这个equals 方法 该方法主要用于比较两个对象是否相等 该方法的源码如下 public boolean equals Object obj return this obj 我们知道所有的对象都拥有标识
  • wsl子系统Ubuntu18.04,cuDNN安装

    如果觉得本篇文章对您的学习起到帮助作用 请 点赞 关注 评论 留下您的足迹 本文主要wls子系统Ubuntu18 04安装cuDNN 安装cudnn坑巨多 因此记录以备日后查看 同时 如果能够帮助到更多人 也不胜荣幸 文章目录 一 下载安装
  • Xcopy 复制文件和目录,包括子目录

    Xcopy 复制文件和目录 包括子目录 语法 xcopy Source Destination w p c v q f l g d mm dd yyyy u i s e t k r h a m n o x exclude file1 fil
  • Spring FeignClient 遇到的参数问题(RequestParam.value() was empty on parameter 0)

    报错 Caused by java lang IllegalStateException RequestParam value was empty on parameter 0 代码 PostMapping value org getOrg
  • 下载徐小明新浪博客全部博文链接

    利用爬虫把徐小明新浪博客里的所有博文链接爬下来 保存到脚本所在路径的csv文件中 python2 7代码 把起始博文目录链接换成其他的也是完全可以的 详细内容请关注微信公众号 岛城窝窝 代码如下 usr bin env python cod