百度贴吧python吧抓取用户名和图片
原理就是将贴吧条数中的用户提取出来并在此爬取用户中的图片
- #!/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吧抓取用户名和图片的更多相关文章
- python学习-抓取知乎图片
#!/bin/usr/env python3 __author__ = 'nxz' """ 抓取知乎图片webdriver Chromedriver驱动需要安装,并指定d ...
- Python爬虫抓取糗百的图片,并存储在本地文件夹
思路: 1.观察网页,找到img标签 2.通过requests和BS库来提取网页中的img标签 3.抓取img标签后,再把里面的src给提取出来,接下来就可以下载图片了 4.通过urllib的urll ...
- Python 爬虫: 抓取花瓣网图片
接触Python也好长时间了,一直没什么机会使用,没有机会那就自己创造机会!呐,就先从爬虫开始吧,抓点美女图片下来. 废话不多说了,讲讲我是怎么做的. 1. 分析网站 想要下载图片,只要知道图片的地址 ...
- python requests抓取NBA球员数据,pandas进行数据分析,echarts进行可视化 (前言)
python requests抓取NBA球员数据,pandas进行数据分析,echarts进行可视化 (前言) 感觉要总结总结了,希望这次能写个系列文章分享分享心得,和大神们交流交流,提升提升. 因为 ...
- WordPress快速增加百度收录,加快网站内容抓取
本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 利用百度站长平台提供的链接 ...
- python爬虫抓网页的总结
python爬虫抓网页的总结 更多 python 爬虫 学用python也有3个多月了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本,写过在discuz论坛中自动登录自动发贴的脚本,写过自 ...
- python 爬虫抓取心得
quanwei9958 转自 python 爬虫抓取心得分享 urllib.quote('要编码的字符串') 如果你要在url请求里面放入中文,对相应的中文进行编码的话,可以用: urllib.quo ...
- python爬取某个网页的图片-如百度贴吧
python爬取某个网页的图片-如百度贴吧 作者:vpoet mail:vpoet_sir@163.com 注:随意copy,不用告诉我 #coding:utf-8 import urllib imp ...
- python爬虫抓站的一些技巧总结
使用python爬虫抓站的一些技巧总结:进阶篇 一.gzip/deflate支持现在的网页普遍支持gzip压缩,这往往可以解决大量传输时间,以VeryCD的主页为例,未压缩版本247K,压缩了以后45 ...
随机推荐
- VmWare为Fedora虚拟机扩展磁盘
1.根据步骤为虚拟机扩展磁盘空间. 查看步骤 2.进入Fedora系统 以下步骤为修改扇区,将扩展磁盘划分为分区 运行fdisk -l,命令执行结果的第一行显示了磁盘名称,同时可以看到当前磁盘分区情况 ...
- java打包成jar,但不打包配置文件
有时候我们做java project的时候,都会打包成jar程序,为了方便部署会加个配置文件conf/pro.properties(conf文件夹与src文件夹同级) 但是不想打包进jar.其实用ec ...
- IOS--UIAlertView造成屏幕闪烁
在异步操作中,如果直接Show一个UIAlertView可能会造成屏幕闪烁(目前在iPhone5上发现),解决办法如下: UIAlertView *alert = [[UIAlertView allo ...
- unity中三种调用其他脚本函数的方法
第一种,被调用脚本函数为static类型,调用时直接用 脚本名.函数名()第二种,GameObject.Find("脚本所在的物体的名字").SendMessage(" ...
- 如何使用Javascript判断浏览器终端设备
WEB开发中如何通过Javascript来判断终端为PC.IOS(iphone).Android呢? 可以通过判断浏览器的userAgent,用正则来判断手机是否是ios和Android客户端 var ...
- add number
// io.cpp #include <iostream> int readNumber() { std::cout << "Enter a number: &quo ...
- oracle ORA-01427: 单行子查询返回多个行
ORA-01427: 单行子查询返回多个行 前几天开发的同事反馈一个问题,说前台系统报出了ORA错误,希望我们能看看是什么原因.java.sql.SQLException: ORA-01427: si ...
- 循序渐进Python3(十)-- 1 -- pymysql
使用pymsql 模块操作数据库 #!/usr/bin/env python , ),()]), user='root', passwd='123456', db='test')# 创建游标curso ...
- dataguru(炼数成金)大数据培训基地印象
dataguru访问地址:http://f.dataguru.cn/?fromuid=99611 课程优惠码:C4B6 这段时间一直在dataguru(炼数成金)上学习<hadoop数据分析平 ...
- Dalvik指令格式
一段Dalvik汇编代码由一系列Dalvik指令组成,指令语法由指令的位描述与指令格式 标识来决定.位描述约定如下: 每16位的字采用空格分隔开来每个字母表示四位,每个字母按顺序从高字节开始,排列到低 ...