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

#!/usr/bin/env python
#coding:utf-8 import requests
import urllib2
import re
import socket
import logging
import os
import threading
import urllib
import sys
import time
import redis
reload(sys)
sys.setdefaultencoding('utf8')
# 设置超时时间
socket.setdefaulttimeout(30) # 设置日志级别、格式和日期时间
logging.basicConfig(level=logging.INFO,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename='mz_teacher_spider.log',
filemode='w')
def details(block_count, block_size, total_size):
# 总大小(KB)
total_kb = total_size / 1024
# 已下载(KB)
downloaded_kb = (block_count * block_size) / 1024
par = 100.0 * block_count * block_size/ total_size
if block_count * block_size <= total_size:
print (u'\r进度:%.2f%%, 总大小:%dKB, 已下载:%dKB\r' % ( par,total_kb, downloaded_kb)) def get_content(url):
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'}
try:
request=urllib2.Request(url,headers=headers)
# print r.content
response = urllib2.urlopen(request, timeout=3)
content=response.read()
return content
except urllib2.URLError as e:
# 写异常日志
logging.info('该地址不能访问('+str(e)+'):'+url)
except urllib2.HTTPError as e:
# 写异常日志
logging.info('该地址访问出错('+str(e)+'):'+url)
except socket.timeout:
# 写异常日志
logging.info('该地址访问超时:'+url) def parser(content):
pattern='a data-field=.*? class="frs-author-name j_user_card " href="(.*?)" target="_blank">(.*?)</a>'
user_dict={}
users=[]
regex = re.compile(pattern)
items=re.findall(regex,content)
items=set(items)
for item in items:
#print item[0]+item[1]
user=requests.get('http://tieba.baidu.com'+item[0])
pattern2='<a href="javascript:;" style="" class="userinfo_head"><img src="(.*?)"/></a>'
regex2 = re.compile(pattern2)
imgurl=re.findall(regex2,user.content)
name=item[1]
#判断用户是否存在
if imgurl:
user_dict['name']=name
user_dict['imgurl']=imgurl[0]
users.append(user_dict)
user_dict={}
#print user_dict
else:
print '该用户不存在' # #
#
#
#
#print users
return users def urlretrieve(users,folder,rdb):
if not os.path.isdir(folder):
os.mkdir(folder) for user in users:
path=unicode(folder+'/'+user['name']+'.jpg', 'utf-8')
rdb.hset('tieba_user_info',user['name'],user['imgurl'])
#print path
#print path
print u'线程:%s 正在下载图片: %s \r' %(threading.current_thread(),user['imgurl'])
urllib.urlretrieve(user['imgurl'],path,reporthook=details)
rdb.save()
#
print '下载完成'
def run(users,folder,rdb):
urlretrieve(users=users,folder=folder,rdb=rdb) #def _fname():
#return f
# if __name__ == '__main__':
rdb = redis.Redis(host='localhost',port=6379,db=0,password='test')
r=get_content('http://tieba.baidu.com/f?kw=python&fr=ala0&tpl=5')
users=parser(r)
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. sql server之数据库语句优化

    三.只返回需要的数据 返回数据到客户端至少需要数据库提取数据.网络传输数据.客户端接收数据以及客户端处理数据等环节,如果返回不需要的数据,就会增加服务器.网络和客户端的无效劳动,其害处是显而易见的,避 ...

  2. VC++ GDI 总结 一一 CBitmap类

    class CBitmap : public CGdiObject { DECLARE_DYNAMIC(CBitmap) public: static CBitmap* PASCAL FromHand ...

  3. 一步一步了解Cocos2dx 3.0 正式版本开发环境搭建(Win32/Android)

    cocos2d-x 3.0发布有一段时间了,作为一个初学者,我一直觉得cocos2d-x很坑.每个比较大的版本变动,都会有不一样的项目创建方式,每次的跨度都挺大…… 但是凭心而论,3.0RC版本开始 ...

  4. Vue.JS入门学习随笔

    PS:先说说学习Vue的缘由吧,学习完了React之后,突然发现又出了一款叫做vue的框架,而且据说可以引领又一波新框架的潮流,我容易吗我!!!   Vue.js(读音 /vjuː/, 类似于view ...

  5. [lucene系列笔记1]lucene6的安装与配置(Windows系统)

    lucene是一个java开源的高效全文检索工具包,最近做项目要用到,把学习的过程记录一下. 第一步:下载安装jdk 1.首先从官网下载jdk(下载之前先查看你的电脑是多少位操作系统,如果是32就下载 ...

  6. form表单reset表格并执行搜索

    其中reset() 不需要定义 search():是你执行的搜索的函数 <html> <head> <title>sf</title></head ...

  7. python Day01

    Python Day01 Python 简介 介绍 Python 是一种面向对象.直译式的计算机程序设计语言,也是一种功能强大的通用型语言,已经有将近二十年的发展历史,成熟稳定.包含了一组完善而且容易 ...

  8. C#中关于异步的三种写法

    1 投票 IAsyncResult ar = d1.BeginInvoke(1, 3000, null, null); while (!ar.IsCompleted) class Program { ...

  9. linux命令(5):rm 命令

    linux中删除文件和目录的命令: rm命令.rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除.对于链接文件,只是删除了链接,原有 ...

  10. Xcode LaunchImage 载入界面大小设置

    iPhone Portrait iOS 8-Retina HD 5.5 (1242×2208) @3xiPhone Portrait iOS 8-Retina HD 4.7 (750×1334) @2 ...