注明:小编亲测,只要把第一部分里面的url修改,即可抓取博客专家里边所有的专家的博客内容和标题,后续小编还会对此代码改进,敬请期待
文章分为两部分:Python爬虫爬取移动开发专家的姓名和博客首页地址,爬取每个专家的所有博客存放在已该专家名字命名的txt文件中
说明:本爬虫主要是采用BeautifulSoup和少量的正则匹配,在第一部分抓取完毕后需要将文件格式改为ANSI,代码如下:
第一部分:
第二部分:
结果如下图:
![](http://img.blog.csdn.net/20150811204110114?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center&x-oss-process=image/resize,w_1400/format,webp)
![](http://img.blog.csdn.net/20150811204219427?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center&x-oss-process=image/resize,w_1400/format,webp)
文章分为两部分:Python爬虫爬取移动开发专家的姓名和博客首页地址,爬取每个专家的所有博客存放在已该专家名字命名的txt文件中
说明:本爬虫主要是采用BeautifulSoup和少量的正则匹配,在第一部分抓取完毕后需要将文件格式改为ANSI,代码如下:
第一部分:
import urllib2 from bs4 import BeautifulSoup import sys reload(sys) sys.setdefaultencoding("utf-8") def getPage(href): #伪装成浏览器登陆,获取网页源代码 headers = { 'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6' } req = urllib2.Request( url = href , headers = headers ) content = urllib2.urlopen(req).read() return content def getAll(): #得到所有移动开发专家的姓名和博客首页地址 url = 'http://blog.csdn.net/mobile/experts.html' page=BeautifulSoup(getPage(url)) #得到移动专家首页源代码,并beautifulsoup化 div = page.find('div',class_='list_3',id='experts') for li in div.find_all('li'): fp = open('nameAndurl.txt','a') fp.write(li.get_text() + '\t' + li.a.get('href') + '\n') fp.close() if __name__=="__main__": getAll()
第二部分:
#coding:utf-8 import urllib2 from bs4 import BeautifulSoup import os import re def getPage(href): #伪装成浏览器登陆,获取网页源代码 headers = { 'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6' } req = urllib2.Request( url = href , headers = headers ) content = urllib2.urlopen(req).read() return content def getOneAllBlog(): fp=open('nameAndurl.txt','r') while True: line = fp.readline().strip() if line: name = line.split('\t')[0] #拆分读出的一行第一个为name href = line.split('\t')[1] #拆分读出的一行第二个为href getBlog(name,href) else: break def getPageNum(href): num =0 page = getPage(href) soup = BeautifulSoup(page) div = soup.find('div',class_='pagelist') result = div.span.get_text().split(' ') list_num = re.findall("[0-9]{1}",result[3]) for i in range(len(list_num)): num = num*10 + int(list_num[i]) #计算总的页数 return num def getText(name,url): page = BeautifulSoup(getPage(url)) span_list = page.find_all('span',class_='link_title') div_list = page.find_all('div',class_='article_description') k =0 str1 = 'none' fp = open("%s.txt" % name,"a") # 获取文章内容和内容 for div in div_list: title = span_list[k].a.get_text().strip() text = div.get_text() title = title.encode('utf-8') #转换成utf-8编码,否则后文写不到文件里 text = text.encode('utf-8') print title k+=1 fp.write(str(title) + '\n' + str(text) + '\n') fp.write('===========================================' + '\n') fp.close() def getBlog(name,href): i =1 for i in range(1,(getPageNum(href)+1)): url = href + '/article/list/' + str(i) print url getText(name,url) i+=1 print url,'======================================OK' if __name__=='__main__': getOneAllBlog()