Python爬取CSDN博客专家系列——移动开发

news/2024/7/19 9:11:43 标签: 移动开发, python, 爬虫
注明:小编亲测,只要把第一部分里面的url修改,即可抓取博客专家里边所有的专家的博客内容和标题,后续小编还会对此代码改进,敬请期待

文章分为两部分:Python爬虫爬取移动开发专家的姓名和博客首页地址,爬取每个专家的所有博客存放在已该专家名字命名的txt文件中
说明:本爬虫主要是采用BeautifulSoup和少量的正则匹配,在第一部分抓取完毕后需要将文件格式改为ANSI,代码如下:
第一部分:
python">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()

第二部分:
python">#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()

结果如下图:



http://www.niftyadmin.cn/n/1829662.html

相关文章

Windows发展史

Windows 发展史 微软自1985年推出Windows 1.0以来,Windows系统经历了十多年变革。从最初运行在DOS下的Windows 3.0,到现在风靡全球的Windows XP、Windows 7、Windows8和最近发布的Windows 10。Windows代替了DOS曾经担当的位子。 发展历程 1.Windows是由…

PHP MYSQL 获取记录总数

$qid mysql_query(“SELECT count(aid) as total FROM table group by aid “);//你的查询$res mysql_fetch_array($qid);$count $res[‘total’]; //取出统计值 如果你不想加as total,那么$count $res[0];转载于:https://www.cnblogs.com/wzwyc/p/6293714.html…

ASP.NET MVC搭建项目后台UI框架—6、客户管理(添加、修改、查询、分页)

来源://http://www.cnblogs.com/jiekzou/p/4555452.html ASP.NET MVC搭建项目后台UI框架—6、客户管理(添加、修改、查询、分页) 目录 ASP.NET MVC搭建项目后台UI框架—1、后台主框架ASP.NET MVC搭建项目后台UI框架—2、菜单特效ASP.NET MVC搭…

iostat输出详解

2019独角兽企业重金招聘Python工程师标准>>> 序号结果说明1rrqm/s每秒进行merge的读操作数目。即delta(rmerge)/s2wrqm/s每秒进行merge的写操作数目。即delta(wmerge)/s3r/s每秒完成的读I/O设备次数。即delta(rio)/s5w/s每秒完成的写I/O设备次数。即delta(wio)/s5rs…

OpenCV 修改源码详细教程:基于hpp文件,修改SURF算子(支持打断点、调试、debug)

目录 0.前置步骤 1.修改源码的目的 预设目标 修改源码的解决思路 摸索过程 ​踩坑记录 修改宏定义 报错1: 报错2:​ 最终运行结果 补充:尝试增加代码逻辑 总结 参考链接​​​ 0.前置步骤 首先我们需要安装好OpenCV和OpenCV cont…

js 获取服务器当前时间

//获取服务器时间 function getNowDate(){ var xhr null; if(window.XMLHttpRequest){ xhr new window.XMLHttpRequest(); }else{ xhr new ActiveObject("Microsoft") } xhr.open("GET","/",false) xhr.send(null); var date xhr.getRespons…

linux exec函数家族

1.exec家族一共有六个函数,分别是: 1、int execl(const char *path, const char *arg, ......); 2、int execle(const char *path, const char *arg, ...... , char * const envp[]); 3、int execv(const char *path, char *const argv[]); 4、nt execve…

Kubernetes弃用Docker?关于Kubernetes、Docker和containerd的那些事

00 前情提要 作为后端研发工程师,之前的工作中还是涉及到一部分K8S的工作。在当时的工作场景下,我们通过使用Kubernetes(简称k8s)docker编排部署的架构方案来提供云原生的在线服务。工作内容包括:编写k8s的yaml文件&am…