感觉javaeye还不错,很喜欢他能制作电子书的功能。以前在新浪写过一阵博客,不过是技术无关的东西,就想转到这里来,找了找,有些程序,发现也有python的,那么自己肯定也能写点代码导出来。
本来用的正则,这两天调试了几次,发现可以了。中间试验了下,发现新浪的博客有两种,一种是旧版的,一种可能是升级过的,所以改了改,改成可以导出新版的博客。另外大家建议用beautiful soap来弄,就改成用soap来弄的了。
最后试验的时候抓取的是新浪里面的徐静蕾的博客,所有的博客都保存了起来。
下面给出代码,示例当然以老徐的博客为例。
第一步找到博客的uid
#! /usr/bin/env python
#coding=utf-8
import urllib2
import sqlite3 as sqlite
import time
import re
from BeautifulSoup import BeautifulSoup
#socket.setdefaulttimeout(30)
blog="http://blog.sina.com.cn/xujinglei"
req = urllib2.Request(blog)
f = urllib2.urlopen(req)
#print f.msg
#blog1=f.read()
soup1 = BeautifulSoup(f)
uid=soup1.find("link",{"id":"uid_link_css"})
raw_input("Press ENTER to exit")
print uid
print uid
print len(uid)
a=str(uid)
uida=re.findall(re.compile(r'(\d+).css'),a)
len(uida)
print uida
print uida[0]
后续文章的链接都与这个id有关
下面就是生成页面的链接,现在新版的博客都是js的分页按钮,弄个httpfox直接可以看到链接,链接生成的样式如下。
def urlexit1(a):
urllist={}
for i in range(1,77):
url="http://blog.sina.com.cn/s/article_sort_"+str(a)+"_10001_"+str(i)+".html"
#print url
urllist[i]=url
return urllist
aa=urlexit1(uida[0])
因为我还没有仔细看分页的函数在那里,所以就简单的数下,看看他的主页上分了多少个分页,她的是76,这里填上77就可以了。
最初我的代码针对我自己的博客,文章不是很多,没有考虑出错、超时等问题,后来去抓老徐的博客的时候文章比较多,超时情况出现的很多,所以就先生成了每篇文章的链接。
cx = sqlite.connect('sina.sqlite')
cu = cx.cursor()
cu.execute('''create table if not exists sina(
url text primary key,
title text,
content text,
time text
)''')
cu.execute('''create table if not exists urls(
url text primary key,
mainurl text
)''')
cu.execute('''create table if not exists signal(
id text primary key
)''')
for i in aa.keys():
print aa[i]
#raw_input("Press ENTER to exit")
req = urllib2.Request(aa[i])
#print i
pp = urllib2.urlopen(req)
if pp.code==200:
#print entry
#raw_input("Press ENTER to exitsoup2")#urltitle=re.findall(re.compile(r'href="(.*)" target="_blank" >点击此处查看全文'),entry)
soup2=BeautifulSoup(pp)
urlt=soup2.findAll("span",{"class":"SG_more"})
print pp.msg
#print "ok"
#len(str(urlt))
#print urlt
#for k in urlt:
# urlt1=re.find()
print "-------------------"
for ii in urlt:
urlt1=re.findall(re.compile(r'href="(.+?)">'),str(ii))
len(urlt1)
j=urlt1[0]
a1=str(j)
ru='replace into urls values("'+a1+'","'+aa[i]+'")'
print ru
cu.execute(ru)
cx.commit()
rs='replace into signal values("'+str(i)+'")'
cu.execute(rs)
cx.commit()
time.sleep(1)
剩下的事情就简单了,根据每篇文章的地址去抓标题、时间以及文章内容。下面需要考虑的是超时问题,因为文章太多,所以超时停掉重新开始工作太费时间,而且抓的时候还需要设置延时,否则服务器会断开连接。这东西再考虑把
想了想,建了3个sqlite的表,sina存储文章标题、时间、文章内容,urls是每篇文章的地址,signal是用来判断是否完成的。最后写出来的代码,首先进行循环,从第一个分页到第76个分页,循环抓取没分页里面具体每篇文章的地址,然后存储到urls里面,分页全部抓取完后,写入signal一个数字标示。如果中间超时,重启程序,读取signal里面最大值,在rang的地方进行修改,直到全部urls写入完毕后,开始抓取文章,首先select地址库,然后比对,如果已经抓去过的话跳过,没有的话进行抓取,这样即使超时或者拒绝连接,重启程序就可以了,仍然可以继续抓取直到完毕。
折腾了半天,总算把老徐的博客全抓下来了,一共是754篇,可真不少,现在问题是连接图片还没有抓下来,博客里面的链接还是新浪的,而且文章、标题都在数据库里面,导出成什么样的格式,还需要再考虑考虑。
分享到:
相关推荐
在本教程中,我们将深入探讨如何利用Beautiful Soup进行网络爬虫开发。 ### 解析器的选择 Beautiful Soup支持多种解析器,包括Python标准库的`html.parser`,以及第三方库如`lxml`和`html5lib`。以下是对这些解析...
《Beautiful Code》是一本探讨编程艺术的书籍,由Andy Oram和Greg Wilson编写,由O'Reilly出版社于2007年出版。本书集合了多位顶尖程序员的智慧,试图揭示出他们认为编写优雅、高效代码的最佳实践和理念。 书中包含...
【标题】"Web ASP网站Beautiful"揭示了这个项目的核心,即使用ASP(Active Server Pages)技术构建的一个美观的Web应用程序。ASP是微软开发的一种服务器端脚本环境,它允许开发者创建动态、交互式的网页。 【描述】...
Beautiful Soup 4.4.0 文档 Beautiful Soup 4.4.0 文档 Beautiful Soup 4.4.0 文档
本文将深入探讨Beautiful Transitions v2.3的新特性及其在Unity项目中的实际应用。 Beautiful Transitions v2.3是该插件的最新版本,它在前一版本的基础上进行了优化和增强。官网商店标价12刀,这表明其价值在于...
7. **Webpack**:一个模块打包工具,将项目的各种资源(如JS、CSS、图片等)打包成浏览器可执行的格式。Vue CLI 自带了Webpack配置,帮助管理和优化项目资源。 8. **ES6+语法**:项目很可能使用了ECMAScript的最新...
Beautiful Code 英文无水印原版pdf pdf所有页面使用FoxitReader、PDF-XChangeViewer、SumatraPDF和Firefox测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊...
这个"vue-admin-beautiful-master"项目为我们提供了一个很好的学习和实践Vue.js及Element UI的平台,通过实际操作,可以深入理解这两个工具的使用和项目架构设计。无论是初学者还是有经验的开发者,都能从中获益匪浅...
Beautiful Jekyll是一个现成的模板,可以帮助您快速创建一个很棒的网站。 非常适合个人网站,博客或简单的项目网站。 只需两分钟,就可以。 您也可以在上查看它的使用情况,或查看其他人使用此主题创建的网站的示例...
对于Python2.x,推荐使用Beautiful Soup 4.x版本。 - 在Debian或Ubuntu系统中,可以通过包管理器安装,但可能不是最新版本。要安装最新版,需要下载安装包并使用`python setup.py install`命令进行安装。 - 安装...
天气插件 beautiful widget 天气插件
《Beautiful Testing》是一本由Tim Riley和Adam Goucher编辑的书籍,汇集了23位顶尖测试专家和开发者的27篇论文,旨在展示测试的艺术性和技术性。这本书通过个人经历和故事,揭示了如何将测试转化为一种优雅而有效的...
本教程将详细介绍如何利用Python的Requests库和BeautifulSoup库来爬取豆瓣电影Top250的数据,以便进行数据分析或者建立自己的电影推荐系统。 首先,我们需要了解Requests库。Requests是一个用Python编写的HTTP...
在《Beautiful Evidence》一书中,Tufte认为,数据可视化的核心在于将复杂的数据和信息转化为直观、易于理解的形式,从而更好地揭示数据背后隐藏的规律和趋势。他强调,优秀的数据可视化应该以数据的真实性为基础,...
需要注意的是,爬虫应该在遵守新浪微博平台的使用协议和法律法规的前提下进行,以确保合法合规的数据采集。 请注意,尊重新浪微博平台的规定,不要滥用爬虫程序,避免对平台正常运营造成干扰。同时,确保你的爬虫...
使用"Flutter_beautiful_popup"时,开发者需要在Flutter项目中引入这个库,然后通过调用相应的API创建和显示弹出窗口。例如,可以设置弹出窗口的大小、背景颜色、边框样式、动画类型等属性,还可以自定义弹出窗口的...
使用有意义的变量名、注释以及良好的缩进和空格布局,都能提高代码的可读性。 2. **简洁性**:避免冗余和复杂的结构,通过提炼和重构,让代码尽可能简洁。这不仅可以减少错误的可能性,还能使代码更易于理解和维护...
《美丽的计算:Beautiful Calculator 3.26深度解析》 在我们的日常生活中,计算器无处不在,无论是简单的加减乘除还是复杂的科学计算,都离不开它的帮助。而今天我们要探讨的是一款名为“Beautiful Calculator 3.26...
描述中提到的链接指向了一篇CSDN博客文章,虽然具体内容未给出,但通常这类文章会包含如何使用Beautiful Soup进行HTML解析、安装指南、基础用法示例以及可能的高级技巧。根据一般教程内容,我们可以预期会涵盖以下几...