python 爬虫 博客园_我的第一次Python爬虫——获取自己博客园的所有文章

最近在学 python 爬虫,所以拿自己的博客开刀,作为一次简单的 Python 爬虫实践。

Python 爬虫脚本的功能:

1、获得所有的文章标题和地址;

2、获得右侧公告栏里的个人信息。

运行的结果

先打印公告中的个人信息和文章的总数,接着列出所有的文章。截图只是开头的一部分。

这个脚本有什么用呢?

备份。以前我使用网上的软件备份自己QQ空间的日志,需要在软件上登录自己的账号,风险很大。

源码[get_articles_from_cnblogs.py]:

1 #!/usr/bin/env python3.5

2 #-*- coding:utf-8 -*-

3

4 from bs4 importBeautifulSoup5 importrequests6 importre7

8 name = 'artech'

9 my_cnbolgs = 'http://www.cnblogs.com/' +name10

11 #文章列表,每个元素都是字典,格式:{'title':aaa, 'url':bbb}

12 article_list =[]13

14

15 defget_articles(name):16 page = get_total_pages_v2(name) #获得总页数

17 for i in range(1, page+1):18 url = 'http://www.cnblogs.com/{}/default.html?page={}'.format(name,i)19 get_one_page_articles(url)20

21

22 defget_one_page_articles(url):23 wb_data =requests.get(url)24 soup = BeautifulSoup(wb_data.text,'lxml')25 articles = soup.select('a.postTitle2')26

27 for article inarticles:28 data ={29 'title':article.get_text(),30 'url':article.get('href')31 }32 article_list.append(data)33 returnarticle_list34

35

36 #get_total_pages方法只是截取一个字符,文章页数不能超过9页

37 defget_total_pages(name):38 url = 'http://www.cnblogs.com/{}/default.html?page=2'.format(name)39 web =requests.get(url)40 soup = BeautifulSoup(web.text,'lxml')41 page = soup.select('div.pager')42 num = page[1].get_text()[4:5] #总页数,是个字符

43 returnint(num)44

45

46 defget_total_pages_v2(name):47 url = 'http://www.cnblogs.com/{}/default.html?page=2'.format(name)48 web =requests.get(url)49 soup = BeautifulSoup(web.text,'lxml')50 page = soup.select('div.pager')51 num = page[1].get_text()[4:5]52

53 ## print(page[1].get_text())

54 SEARCH_PAT = re.compile(r'\d+')55 pat_search = SEARCH_PAT.search(page[1].get_text())56 if pat_search !=None:57 ## print(pat_search.group())

58 num =pat_search.group()59 returnint(num)60

61

62 defget_info(name):63 url = 'http://www.cnblogs.com/mvc/blog/news.aspx?blogApp=' +name64 web =requests.get(url)65 soup = BeautifulSoup(web.text,'lxml')66 info = soup.select('div > a')67 ## nick = info[0].get_text()

68 ## age = info[1].get_text()

69 ## followers = info[2].get_text()

70 ## follwees = info[3].get_text()

71 data = [info[i].get_text() for i in range(0,4)]72 ## nick,age,followers,follwees = data

73 returndata74

75

76 if __name__ == '__main__':77 nick,age,followers,follwees = get_info(name) #获取个人信息

78 get_articles(name) #获取文章列表

79 print('昵称:' + nick, '园龄:' + age,'粉丝:' +followers,\80 '关注:' + follwees, '文章:' +str(len(article_list)))81 print()82 for i inarticle_list:83 print(i['title'], i['url'], sep='\n')84 print()

一些说明

1、获取公告中的信息(获取异步加载的数据)

学了爬虫对于网页有更多的认识:发现博客地址 http://www.cnblogs.com/luoxu34 只是正文部分(文章列表),侧边的所有信息都是 js 异步加载出来的。

2、统计文章总数

第一个版本的 get_total_pages 方法:

#get_total_pages方法只是截取一个字符,文章页数不能超过9页

defget_total_pages(name):

url= 'http://www.cnblogs.com/{}/default.html?page=2'.format(name)

web=requests.get(url)

soup= BeautifulSoup(web.text,'lxml')

page= soup.select('div.pager')

num= page[1].get_text()[4:5] #总页数,是个字符

return int(num)

自己使用的博客模版上是没有显示博文总数的,所以脚本是用 len 方法计算 article_list 列表的长度,作为文章的数量。

为了获得所有的文章,就要知道一共有多少页。

get_total_pages 方法就是截取了其中的一个字符,但是超过 9页的文章就有问题。

3、get_total_pages_v2(name) 方法

下图先把

标签下的文字打印出来,用 正则匹配出了页数。

这样就正确统计出了文章的总数。

defget_total_pages_v2(name):

url= 'http://www.cnblogs.com/{}/default.html?page=2'.format(name)

web=requests.get(url)

soup= BeautifulSoup(web.text,'lxml')

page= soup.select('div.pager')

num= page[1].get_text()[4:5]## print(page[1].get_text())

SEARCH_PAT = re.compile(r'\d+')

pat_search= SEARCH_PAT.search(page[1].get_text())if pat_search !=None:## print(pat_search.group())

num =pat_search.group()return int(num)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值