Python爬取CSDN博客专家系列移动开发
目录
Python爬取CSDN博客专家系列——移动开发
注明:小编亲测,只要把第一部分里面的url修改,即可抓取博客专家里边所有的专家的博客内容和标题,后续小编还会对此代码改进,敬请期待
文章分为两部分: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()
结果如下图:
扫一扫 关注微信公众号!号主 专注于搜索和推荐系统,尝试使用算法去更好的服务于用户,包括但不局限于机器学习,深度学习,强化学习,自然语言理解,知识图谱,还不定时分享技术,资料,思考等文章!
【技术服务】,详情点击查看: