感觉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篇,可真不少,现在问题是连接图片还没有抓下来,博客里面的链接还是新浪的,而且文章、标题都在数据库里面,导出成什么样的格式,还需要再考虑考虑。
分享到:
相关推荐
Python 使用Beautiful Soup 爬虫教程 Beautiful Soup是一个可以从HTML或XML中提取数据的Python库。它可以通过你喜欢的转换器快速帮你解析并查找整个HTML文档。 Beautiful Soup自动将输入文档转为Unicode编码,输出...
Beautiful Testing offers 23 essays from 27 leading testers and developers that illustrate the qualities and techniques that make testing an art. Through personal anecdotes, you'll learn how each of ...
web web asp网站beautiful
Beautiful Soup 4.4.0 文档 Beautiful Soup 4.4.0 文档 Beautiful Soup 4.4.0 文档
Beautiful Soup 4.4.0 文档
Beautiful architecture
Beautiful Code 英文无水印原版pdf pdf所有页面使用FoxitReader、PDF-XChangeViewer、SumatraPDF和Firefox测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊...
Beautiful Code英文版哦 Beautiful Code英文版哦
Beautiful Soup 4使用方法,解压可见详细的20篇使用技巧文档。
Beautiful Jekyll是一个现成的模板,可以帮助您快速创建一个很棒的网站。 非常适合个人网站,博客或简单的项目网站。 只需两分钟,就可以。 您也可以在上查看它的使用情况,或查看其他人使用此主题创建的网站的示例...
vue-admin-beautiful
代码之美Beautiful Code,讲述代码过程中应该注意的问题
这是一本关于如何优雅的开发的指导文档。从开发到测试本书无所不包。
天气插件 beautiful widget 天气插件
Flutter_beautiful_popup,美化你的应用弹出窗口,博客附件,效果请查看博客相对应项目。
需要注意的是,爬虫应该在遵守新浪微博平台的使用协议和法律法规的前提下进行,以确保合法合规的数据采集。 请注意,尊重新浪微博平台的规定,不要滥用爬虫程序,避免对平台正常运营造成干扰。同时,确保你的爬虫...
Beautiful Visualization,新出来的英文版,还不错。
Beautiful Architecture, 1st Edition by Diomidis Spinellis; Georgios Gousios O'Reilly 09年出品,浏览了一下,内容组织还可以
GTP1Blunt, James - You're Beautiful.gp5.rar1Blunt, James - You're Beautiful.gp5.rar1Blunt, James - You're Beautiful.gp5.rar
Publication Date: July 3, 2007 | ISBN-10: 0596510047 | ISBN... Beautiful Code is an opportunity for master coders to tell their story. All author royalties will be donated to Amnesty International. tion.