python写个小爬虫

【声明:此文非技术文,代码不完整,仅仅记录一次简单的尝试,学习技术的请绕行】


大数据时代,大家都想搞点大数据,我也不例外。比如说爬取一些人际关系信息,或许还能做个图,是多么有意思的事情。
随便百度一下,大多用python写爬虫,正好对python早有耳闻,借此机会了解一下。之前有篇文章谈了我对python的了解,这里就不说了,但还忍不住吐槽python3和python2的天壤之别,加上网上都是python2的代码,时间全用语法上了。
直接爬虫走起。我只列出部分代码,给个思路,切勿复制粘贴。

	import urllib.request

	url = 'http://www.baidu.com'
	content = urllib.request.urlopen(url).read()
	print(content)

就这么简单,简单到令人发指,content变量里就是整个网页的信息(暂未处理编码问题)
之后就是找个目标了,本来想通过查看好友列表来爬取人际关系,发现各大社交网站都对查看用户的好友做了数量限制,根本无法获得全面准确的数据。
游荡几天后发现贴吧可以查看关注某一贴吧的所有用户,虽然不是什么人际关系,但能得到全面准确的数据也不容易,那就从这下手吧。
url很简单http://tieba.baidu.com/bawu2/platform/listMemberInfo?word=贴吧名称&pn=页数
!贴吧名称要用url编码转换
!页数如果超出总页数,或不是数字(如pn=asd),那么会显示第一页。

写个循环一页一页的爬 

	 while start_number < end_number:#设置页数 
		url = 'http://tieba.baidu.com/bawu2/platform/listMemberInfo?word=贴吧名称&pn='+str(start_number)	
		full_url = urllib.request.Request(url,headers=headers)
		content = urllib.request.urlopen(full_url).read()
		#网页内容全部在content里

然后就看一看需要爬取的标签了。这里就要我们的强大的BeautifulSoup登场了,BeautifulSoup的详细用法我就不过多介绍。


我们可以看到<a class="user_name">标签里的title属性的值是ID。

	#注意这是在循环里
	file_text = ''
	soup = BeautifulSoup(content)
	namelist = soup.find_all("a",class_="user_name")
	for name in namelist:
		file_text = file_text + name.get('title') + '\n'
	#把每一页的全部ID存在namelist里

之后写到文件中。
	file = open('users.txt','a')
	file.write(file_text)
	file.close()

再添加写枝叶,一棵大树长成了。

然后运行起来,一段时间后就爬完了,users.txt文件里也有了不少用户名,每行一个。不过打开之后发现最后部分全是重复的,难道语法有错误,我检查了半天。也没发现问题,仔细看了看,发现从10993行开始重复网页上第一页的24个ID。
我若有所思打开计算器10992/24=458.也就是说,第459页之前都爬的好好的,从第459之后就显示第一页了。之前提到pn的参数传递有问题时会显示第一页。但459没有超出总页数,而且也是数字,怎么就会出问题呢。
随手百度一下,立刻释怀了。


真尼玛坑!怎么会有这么莫名其妙的BUG!
虽然这次爬取因一个让人无语的bug,以失败告终,但毕竟试一次尝试,伟大的第一步。
嗯,我已心满意足。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值