原理就是将贴吧条数中的用户提取出来并在此爬取用户中的图片

  1. #!/usr/bin/env python
  2. #coding:utf-8
  3.  
  4. import requests
  5. import urllib2
  6. import re
  7. import socket
  8. import logging
  9. import os
  10. import threading
  11. import urllib
  12. import sys
  13. import time
  14. import redis
  15. reload(sys)
  16. sys.setdefaultencoding('utf8')
  17. # 设置超时时间
  18. socket.setdefaulttimeout(30)
  19.  
  20. # 设置日志级别、格式和日期时间
  21. logging.basicConfig(level=logging.INFO,
  22. format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
  23. datefmt='%a, %d %b %Y %H:%M:%S',
  24. filename='mz_teacher_spider.log',
  25. filemode='w')
  26. def details(block_count, block_size, total_size):
  27. # 总大小(KB)
  28. total_kb = total_size / 1024
  29. # 已下载(KB)
  30. downloaded_kb = (block_count * block_size) / 1024
  31. par = 100.0 * block_count * block_size/ total_size
  32. if block_count * block_size <= total_size:
  33. print (u'\r进度:%.2f%%, 总大小:%dKB, 已下载:%dKB\r' % ( par,total_kb, downloaded_kb))
  34.  
  35. def get_content(url):
  36. headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'}
  37. try:
  38. request=urllib2.Request(url,headers=headers)
  39. # print r.content
  40. response = urllib2.urlopen(request, timeout=3)
  41. content=response.read()
  42. return content
  43. except urllib2.URLError as e:
  44. # 写异常日志
  45. logging.info('该地址不能访问('+str(e)+'):'+url)
  46. except urllib2.HTTPError as e:
  47. # 写异常日志
  48. logging.info('该地址访问出错('+str(e)+'):'+url)
  49. except socket.timeout:
  50. # 写异常日志
  51. logging.info('该地址访问超时:'+url)
  52.  
  53. def parser(content):
  54. pattern='a data-field=.*? class="frs-author-name j_user_card " href="(.*?)" target="_blank">(.*?)</a>'
  55. user_dict={}
  56. users=[]
  57. regex = re.compile(pattern)
  58. items=re.findall(regex,content)
  59. items=set(items)
  60. for item in items:
  61. #print item[0]+item[1]
  62. user=requests.get('http://tieba.baidu.com'+item[0])
  63. pattern2='<a href="javascript:;" style="" class="userinfo_head"><img src="(.*?)"/></a>'
  64. regex2 = re.compile(pattern2)
  65. imgurl=re.findall(regex2,user.content)
  66. name=item[1]
  67. #判断用户是否存在
  68. if imgurl:
  69. user_dict['name']=name
  70. user_dict['imgurl']=imgurl[0]
  71. users.append(user_dict)
  72. user_dict={}
  73. #print user_dict
  74. else:
  75. print '该用户不存在'
  76.  
  77. # #
  78. #
  79. #
  80. #
  81. #print users
  82. return users
  83.  
  84. def urlretrieve(users,folder,rdb):
  85. if not os.path.isdir(folder):
  86. os.mkdir(folder)
  87.  
  88. for user in users:
  89. path=unicode(folder+'/'+user['name']+'.jpg', 'utf-8')
  90. rdb.hset('tieba_user_info',user['name'],user['imgurl'])
  91. #print path
  92. #print path
  93. print u'线程:%s 正在下载图片: %s \r' %(threading.current_thread(),user['imgurl'])
  94. urllib.urlretrieve(user['imgurl'],path,reporthook=details)
  95. rdb.save()
  96. #
  97. print '下载完成'
  98. def run(users,folder,rdb):
  99. urlretrieve(users=users,folder=folder,rdb=rdb)
  100.  
  101. #def _fname():
  102. #return f
  103. #
  104.  
  105. if __name__ == '__main__':
  106. rdb = redis.Redis(host='localhost',port=6379,db=0,password='test')
  107. r=get_content('http://tieba.baidu.com/f?kw=python&fr=ala0&tpl=5')
  108. users=parser(r)
  109. run(users=users,folder='img',rdb=rdb)

百度贴吧python吧抓取用户名和图片的更多相关文章

  1. python学习-抓取知乎图片

    #!/bin/usr/env python3 __author__ = 'nxz' """ 抓取知乎图片webdriver Chromedriver驱动需要安装,并指定d ...

  2. Python爬虫抓取糗百的图片,并存储在本地文件夹

    思路: 1.观察网页,找到img标签 2.通过requests和BS库来提取网页中的img标签 3.抓取img标签后,再把里面的src给提取出来,接下来就可以下载图片了 4.通过urllib的urll ...

  3. Python 爬虫: 抓取花瓣网图片

    接触Python也好长时间了,一直没什么机会使用,没有机会那就自己创造机会!呐,就先从爬虫开始吧,抓点美女图片下来. 废话不多说了,讲讲我是怎么做的. 1. 分析网站 想要下载图片,只要知道图片的地址 ...

  4. python requests抓取NBA球员数据,pandas进行数据分析,echarts进行可视化 (前言)

    python requests抓取NBA球员数据,pandas进行数据分析,echarts进行可视化 (前言) 感觉要总结总结了,希望这次能写个系列文章分享分享心得,和大神们交流交流,提升提升. 因为 ...

  5. WordPress快速增加百度收录,加快网站内容抓取

    本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 利用百度站长平台提供的链接 ...

  6. python爬虫抓网页的总结

    python爬虫抓网页的总结 更多 python 爬虫   学用python也有3个多月了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本,写过在discuz论坛中自动登录自动发贴的脚本,写过自 ...

  7. python 爬虫抓取心得

    quanwei9958 转自 python 爬虫抓取心得分享 urllib.quote('要编码的字符串') 如果你要在url请求里面放入中文,对相应的中文进行编码的话,可以用: urllib.quo ...

  8. python爬取某个网页的图片-如百度贴吧

    python爬取某个网页的图片-如百度贴吧 作者:vpoet mail:vpoet_sir@163.com 注:随意copy,不用告诉我 #coding:utf-8 import urllib imp ...

  9. python爬虫抓站的一些技巧总结

    使用python爬虫抓站的一些技巧总结:进阶篇 一.gzip/deflate支持现在的网页普遍支持gzip压缩,这往往可以解决大量传输时间,以VeryCD的主页为例,未压缩版本247K,压缩了以后45 ...

随机推荐

  1. VmWare为Fedora虚拟机扩展磁盘

    1.根据步骤为虚拟机扩展磁盘空间. 查看步骤 2.进入Fedora系统 以下步骤为修改扇区,将扩展磁盘划分为分区 运行fdisk -l,命令执行结果的第一行显示了磁盘名称,同时可以看到当前磁盘分区情况 ...

  2. java打包成jar,但不打包配置文件

    有时候我们做java project的时候,都会打包成jar程序,为了方便部署会加个配置文件conf/pro.properties(conf文件夹与src文件夹同级) 但是不想打包进jar.其实用ec ...

  3. IOS--UIAlertView造成屏幕闪烁

    在异步操作中,如果直接Show一个UIAlertView可能会造成屏幕闪烁(目前在iPhone5上发现),解决办法如下: UIAlertView *alert = [[UIAlertView allo ...

  4. unity中三种调用其他脚本函数的方法

    第一种,被调用脚本函数为static类型,调用时直接用  脚本名.函数名()第二种,GameObject.Find("脚本所在的物体的名字").SendMessage(" ...

  5. 如何使用Javascript判断浏览器终端设备

    WEB开发中如何通过Javascript来判断终端为PC.IOS(iphone).Android呢? 可以通过判断浏览器的userAgent,用正则来判断手机是否是ios和Android客户端 var ...

  6. add number

    // io.cpp #include <iostream> int readNumber() { std::cout << "Enter a number: &quo ...

  7. oracle ORA-01427: 单行子查询返回多个行

    ORA-01427: 单行子查询返回多个行 前几天开发的同事反馈一个问题,说前台系统报出了ORA错误,希望我们能看看是什么原因.java.sql.SQLException: ORA-01427: si ...

  8. 循序渐进Python3(十)-- 1 -- pymysql

    使用pymsql 模块操作数据库 #!/usr/bin/env python , ),()]), user='root', passwd='123456', db='test')# 创建游标curso ...

  9. dataguru(炼数成金)大数据培训基地印象

    dataguru访问地址:http://f.dataguru.cn/?fromuid=99611 课程优惠码:C4B6  这段时间一直在dataguru(炼数成金)上学习<hadoop数据分析平 ...

  10. Dalvik指令格式

    一段Dalvik汇编代码由一系列Dalvik指令组成,指令语法由指令的位描述与指令格式 标识来决定.位描述约定如下: 每16位的字采用空格分隔开来每个字母表示四位,每个字母按顺序从高字节开始,排列到低 ...