【新手】python爬虫遍历贴吧用户
当前blog已不再更新,请移步新家:moozik.cn
想法是遍历学校贴吧的用户,获取用户的数据用来分析,因为是初学python,就一点一点的写,变量命名也不规范,见谅
系统:windows
版本:python 3.5
#获取河北大学工商学院吧1000页以内的用户 import urllib.request
import re
url='http://tieba.baidu.com/f/like/furank?kw=%BA%D3%B1%B1%B4%F3%D1%A7%B9%A4%C9%CC%D1%A7%D4%BA&pn=' webfile=open('tieba.txt','w') for each in range(1000):
url2=url+str(each+1) webdata=urllib.request.urlopen(url2).read() webdata = webdata.decode('gbk') userdata=re.findall('<table(.*?)</table>',webdata,re.S) webfile.write(userdata[1]+'\n')
print(str(each+1)+'page done!') webfile.close()
上面的代码遍历了贴吧排名页面的前1000页,截取了网页中需要分析的段落,并存储在文件中
import re #打开tieba.txt用于读取
tiebadata=open('tieba.txt','r')
userlist=open('user.txt','w')
tmp=tiebadata.readline()
i=1
while not tmp=='':
print(i)
list=re.findall('<a.*?>(.*?)</a>.*?<td class="drl_item_title"><div class="bg_lv(\d+)"><span>.*?<td class="drl_item_exp"><span>(\d+)</span>',tmp)
for each in list:
userlist.write(each[0]+','+each[1]+','+each[2]+'\n')
tmp=tiebadata.readline()
i=i+1 userlist.close()
tiebadata.close()
上面读取了tieba.txt文件,每次读取一行,使用正则表达式截取了用户名,等级,经验值三个数据,保存在了user.txt
#获取所有用户的详细信息 import re
import urllib.request
import urllib.parse userlist=open('user.txt','r')
userlist2=open('usermore.txt','w') text=userlist.read()
userlist.close()
alluser=text.split('\n')
i=1
for each in alluser:
user2=each.split(',')
api='http://tieba.baidu.com/home/get/panel?ie=utf-8&un='
web=urllib.request.urlopen(api+urllib.parse.quote(user2[0])).read()
#使用web.decode('unicode_escape')解码unicode编码的汉字
web=web.decode('unicode_escape') usertmp=re.findall('"id":(\d+).*?"sex":"(.*?)","tb_age":(.*?),"post_num":(.*?),',web) userlist2.write(each+','+str(','.join(usertmp[0]))+'\n') print(str(i)+user2[0])
i=i+1
userlist2.close()
上面这段代码是有问题的,总是爆出一个错误,IndexError: list index out of range,显示写文件那一行出错,在pychrm中执行了几行就报错,在命令行中还执行的多一些,现在还是很费解,希望有了解的前辈解答一下。
上面这一段是读取user.txt,直接使用\n分割文本,制造了一个大列表,然后使用for循环,我觉得这里是不是按行读取会更好一些。
循环中,使用用户id组合url获取更多的用户数据,因为百度的接口获取的数据的文本不是明文,所以这里使用decode解码,之后依然是使用正则获取了用户的数字id,性别,吧龄,发帖数。之后print变量i用户在命令行中查看进度。
因为不是多线程的,程序的效率真的非常的低。
希望下次可以做得更好。
【新手】python爬虫遍历贴吧用户的更多相关文章
- python爬虫(3)——用户和IP代理池、抓包分析、异步请求数据、腾讯视频评论爬虫
用户代理池 用户代理池就是将不同的用户代理组建成为一个池子,随后随机调用. 作用:每次访问代表使用的浏览器不一样 import urllib.request import re import rand ...
- 使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解(新手必学)
为大家介绍下Python爬虫库BeautifulSoup遍历文档树并对标签进行操作的详细方法与函数下面就是使用Python爬虫库BeautifulSoup对文档树进行遍历并对标签进行操作的实例,都是最 ...
- [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)
转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...
- python爬虫之User-Agent用户信息
python爬虫之User-Agent用户信息 爬虫是自动的爬取网站信息,实质上我们也只是一段代码,并不是真正的浏览器用户,加上User-Agent(用户代理,简称UA)信息,只是让我们伪装成一个浏览 ...
- Python爬虫笔记【一】模拟用户访问之设置请求头 (1)
学习的课本为<python网络数据采集>,大部分代码来此此书. 网络爬虫爬取数据首先就是要有爬取的权限,没有爬取的权限再好的代码也不能运行.所以首先要伪装自己的爬虫,让爬虫不像爬虫而是像人 ...
- 适合新手练习的Python项目有哪些?Python爬虫用什么框架比较好?
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. Python爬虫一般用什么框架比较好?一般来讲,只有在遇到比较大型的需求时 ...
- python爬虫基础要学什么,有哪些适合新手的书籍与教程?
一,爬虫基础: 首先我们应该了解爬虫是个什么东西,而不是直接去学习带有代码的内容,新手小白应该花一个小时去了解爬虫是什么,再去学习带有代码的知识,这样所带来的收获是一定比你直接去学习代码内容要多很多很 ...
- python 爬虫新手入门教程
python 爬虫新手教程 一.什么是爬虫 爬虫就是把一个网站里的内容读取下来 这里我们就要学习一个知识 我们看到的网页是有一种叫HTML的语言编写的 他可以给文字显示不同的样式 如:<p> ...
- Python爬虫beautifulsoup4常用的解析方法总结(新手必看)
今天小编就为大家分享一篇关于Python爬虫beautifulsoup4常用的解析方法总结,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧摘要 如何用beau ...
随机推荐
- 关于JQuery简单介绍
jQuery是一个兼容多浏览器的javascript库,核心理念是写得更少,做得更多.如今,jQuery已经成为最流行的javascript库,在世界前10000个访问最多的网站中,有超过55%在使用 ...
- 安装mysql sever 向导失败,最后一步无响应
在配置apache+php+mysql环境的时候,apache和php都可以运行,这里提供两个安装教程(window环境) http://apps.hi.baidu.com/share/detail/ ...
- Linux下PHP的完全卸载
如果想把PHP彻底的卸载干净,直接用yum的remove命令是不行的,而需要查看有多少rpm包,然后按照依赖顺序逐一卸载,在网上查了好多,都是通过 "rpm -qa | grep php& ...
- 结构及其使用 struct (C#)
首先结构是值类型. 结构是使用 struct 关键字定义的,结构如下: struct 结构名{} 结构概述 结构具有以下特点: 结构是值类型,而类是引用类型. (结构不能包含显式的无参数构造函数) 与 ...
- 使用easeui dialog弹出框中使用CKeditor多次加载后无法编辑问题
问题呈现:弹出框页面 <tr class="addtr"> <th>内容</th> <td> <!-- <textare ...
- java集合类的学习(二)
ArrayList,LinkedList,Vector都是List的实现类,前两都没有实现同步机制,Vector实现了同步机制.他们代码类似. ArrayList代表大小可变的数组,允许对元素进行快速 ...
- POM
代码的第一行是xml头,指定了该xml文档的版本和编码方式 project是所有pom.xml的根元素,还声明了一些POM相关的命名空间及xsd元素. modelVersion指定了当前POM模型的版 ...
- 关于javascript自定义对象(来自网络)(最近几天不会的)
javascript定义对象的几种简单方法 1.构造函数方式,全部属性及对象的方法都放在构造方法里面定义 优点:动态的传递参数 缺点:每创建一个对象就会创建相同的方法函数对象,占用大量内存 funct ...
- ArcGIS图层介绍
什么是图层 图层是用来在 ArcGIS 产品套件中显示地理数据集的机制.每个图层代表一种数据集(可以是地图服务.图形或是矢量数据),并指定该数据集是如何描绘使用一组属性的. 包含一个地图控件的每个应用 ...
- Favorite Setting
1. You Tube download Opera plugin:Video Downloader Pro Website:http://en.savefrom.net 2.