最近简单的学了一下Python爬虫,决定来爬一下csdn受欢迎的博客对应的博主的头像。其部分受欢迎的博客截图如下:

  基本思路是:先爬取http://blog.csdn.net/ranking.html对应的网页的代码,该网页上包含了文章周排行,博客周排行,受欢迎的博客内容。然后从爬取的页面中,用正则表达式找到受欢迎的博客对应的div代码,接着从该div中用正则表达式过滤出博文对应的博主的头像链接,最后根据图片链接将图片下载到本地。

  其实现代码如下所示:

#author = liuwei  date = 2017-08-15
#抓取csdn博客中受欢迎的博客的信息列表,链接为http://blog.csdn.net/ranking.htmlfrom urllib import request
import re#params:
#   url:网页的链接
#return:
#   html:网页的html代码
def getPage(url):'''通过网页的url地址,获取网页代码'''req = request.Request(url)response = request.urlopen(req)html = response.read().decode("utf-8")return html#params:
#   content:div的内容
#return:
#   divName:该div的内容
def getDivName(content):'''获取div中的<h3>标签中的中文内容'''regex = re.compile("(?<=<h3 class=\"rank_t\">).+?(?=</h3>)")divName = regex.findall(content)return divName#params:
#   html:网页的html代码
#return:
#   div:受欢迎的博客对应的div的代码
def getPopular(html):'''通过获取每个div中的<h3>标签的内容来匹配受欢迎的博客,挑选出该div'''#抓取所有class="ranking ranking_min"的div内容regex = re.compile("<div class=\"ranking ranking_min\">.+?<\/div>", re.S)        allDiv = regex.findall(html)                            #得到所有div#然后筛选出<h3>标签为受欢迎的博客的divfor div in allDiv:divName = getDivName(div)if ''.join(divName) == "受欢迎的博客":return div#params:
#   div:div的代码
#return:
#   allImage:所有图片的链接
def getAllImageUrl(div):'''获取最受欢迎div中所有的图片链接地址'''regex = re.compile("(?<=<img src=\").+?(?=\")")                     #截取所有的图片链接地址allImage = regex.findall(div)return allImage#params:
#   imgUrl:图片的链接地址
def downloadImg(imgUrl):'''通过图片的链接地址下载图片'''#先为request添加上浏览器代理(本人使用的是Chrome浏览器),需要为每一张图片添加refer头参数,如果在header中添加referer属性,#则会出现403错误,拒绝访问查看网页的F12工作台中的NetWork信息可以发现,referer的值就是你需要访问的图片的链接地址#浏览器代理的信息agent = ('User-Agent', 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36')header = []header.append(agent)x = 1for url in imgUrl:                                                  #遍历每一张图片链接opener = request.build_opener()refer = ('Referer', url)                                        #为opener头部添加referer属性信息header.append(refer)opener.addheaders = header                                      #添加头部信息,避免被反爬虫request.install_opener(opener)request.urlretrieve(url, "G:\\csdn\\" + str(x) + ".jpg")        #下载图片,并保存到本地x = x + 1if __name__ == '__main__':url = "http://blog.csdn.net/ranking.html"html = getPage(url)                                     #获得整个网页divRes = getPopular(html)                               #获取受欢迎的博客对应的divallImgUrl = getAllImageUrl(divRes)                      #过滤该div中的博主头像链接downloadImg(allImgUrl)                                  #将博主头像下载到本地

  本人刚开始只是在request头部添加了代理信息,即User-Agent属性值,在爬取图片的时候被服务器给拒绝访问了,即触发了HTTP Error 403: Forbidden错误。本人直接用浏览器打开相应的图片链接,发现可以打开图片,于是便去查看request header部分,发现在header中需要referer属性值(这个是本人试了之后才知道需要添加上referer属性),这样才不会被拒绝。

request header截图如下:

代码运行效果图如下:

python爬取csdn用户头像相关推荐

  1. Python:爬取FaceBook用户头像

    博客迁移 个人博客站点,欢迎访问,www.jiingfengji.tech 本文地址 Python爬取源码 本文介绍的爬取方法是基于已经有一些用户的sns_id了,然后通过头像链接进行头像下载. 以下 ...

  2. python爬取微博用户信息(六)—— 完整代码

    本节为爬取微博用户信息的完整代码,以及项目结构. 感兴趣的小伙伴可以收藏哦! 另外,关于本代码的效果展示,以及教程,点击以下链接即可. python爬取微博用户信息(一)-- 效果展示 python爬 ...

  3. python爬取微博用户信息(四)—— 爬取用户信息的功能函数

    这一节,将会将 MicroBlog.py 文件中的函数介绍一下. 感兴趣的小伙伴可以收藏哦! 另外,关于本代码的效果展示,以及教程,点击以下链接即可. python爬取微博用户信息(一)-- 效果展示 ...

  4. python爬取微博用户信息(三)—— 创建MicroBlog类实例

    这一节,主要讲述 main.py文件,该文件创建了一个MicroBlog类,MicroBlog类中包含一些爬取微博内容的函数. 以及简单介绍traceback的用法. 感兴趣的小伙伴可以收藏哦! 另外 ...

  5. python爬取微博用户信息(一)—— 效果展示

    有时,我们想要了解一个人,一般会通过ta的微博.朋友圈以及朋友的看法去了解. 特别是面对自己喜欢的明星,我们常常会浏览ta的微博,了解ta的动态. 那么,在大数据时代,数据已经成为了不可缺少的一部分, ...

  6. 使用Python爬取CSDN历史博客文章列表,并生成目录

    使用Python爬取CSDN历史博客文章列表,并生成目录 这篇博客将介绍如何使用Python爬取CSDN历史博客文章列表,并生成目录. 2020年 2020年04月 cv2.threshold() 阈 ...

  7. python爬取csdn上的包含整人关键词的阅读量并且存入表格里。完整代码

    请注意,爬取他人网站的数据可能违反网站的条款和条件.在进行爬虫操作之前,请确保获得网站的授权. 下面是一个使用 Python 爬取 CSDN 上所有包含 "整人" 关键词文章的阅读 ...

  8. copy outerHTML、python爬取csdn文章、一键打包个人csdn文章保存到本地

    文章目录 1copy outerHTML复制网站源码法 1.1复制源码 1.2 遇到的问题 2 python爬取CSDN博客文章(保存为html,txt,md) 2.1 安装依赖 2.2 完整代码 3 ...

  9. 【爬虫+数据可视化】Python爬取CSDN博客访问量数据并绘制成柱状图

    以下内容为本人原创,欢迎大家观看学习,禁止用于商业及非法用途,谢谢合作! ·作者:@Yhen ·原文网站:CSDN ·原文链接:https://blog.csdn.net/Yhen1/article/ ...

最新文章

  1. 形象生动的SpringBoot和SpringMVC的区别
  2. 内核参数 linux dd,内核模块指定参数方式
  3. mysql的还原_MySQL 还原
  4. hbase映射为hive表(转载+整理+自己验证)
  5. 创建基于webpack打包的vue项目
  6. jetbrick-template 和其他模板的性能测试比较
  7. 今天聊:做好前端的 10 个习惯
  8. 关于latex的网站推荐
  9. R语言预测初步(R语言预测实战-节选)
  10. “空天地”一体化的遥感农业保险简介
  11. php统计页面访问量_PHP 统计 网页 总访问次数 附代码
  12. 【无标题】计统大作业-hello
  13. nodejs+Koa2实现小程序的微信支付请求(一)
  14. 距离度量(Distance Metric)方法
  15. 长沙博物馆 乐在其中,思在其中
  16. canvas简单实现纯色背景图片抠图
  17. 阿里品牌数据银行分析师复习资料库——基础标签
  18. Python数据类型—数值型
  19. GALIL运动控制卡维修控制器维修DMC-1840
  20. AWS VPC Peering Azure VNET Peering

热门文章

  1. Windows下资源泄漏检测
  2. Linux系统双机热备的方案
  3. Hello Android
  4. Office2010翻译无处不在
  5. 350个特性看透ES6
  6. CentOS系统Tomcat 8.5/9部署SSL证书
  7. excel html 查询,index.html
  8. svg mysql_!!!常用SVG代码
  9. 在线考试系统需求分析
  10. 洛谷P5661 公交换乘(CSP-J 2019 T2)