【声明:此文非技术文,代码不完整,仅仅记录一次简单的尝试,学习技术的请绕行】
大数据时代,大家都想搞点大数据,我也不例外。比如说爬取一些人际关系信息,或许还能做个图,是多么有意思的事情。
随便百度一下,大多用python写爬虫,正好对python早有耳闻,借此机会了解一下。之前有篇文章谈了我对python的了解,这里就不说了,但还忍不住吐槽python3和python2的天壤之别,加上网上都是python2的代码,时间全用语法上了。
直接爬虫走起。我只列出部分代码,给个思路,切勿复制粘贴。
就这么简单,简单到令人发指,content变量里就是整个网页的信息(暂未处理编码问题)
之后就是找个目标了,本来想通过查看好友列表来爬取人际关系,发现各大社交网站都对查看用户的好友做了数量限制,根本无法获得全面准确的数据。
游荡几天后发现贴吧可以查看关注某一贴吧的所有用户,虽然不是什么人际关系,但能得到全面准确的数据也不容易,那就从这下手吧。
url很简单http://tieba.baidu.com/bawu2/platform/listMemberInfo?word=贴吧名称&pn=页数
!贴吧名称要用url编码转换
!页数如果超出总页数,或不是数字(如pn=asd),那么会显示第一页。
之后写到文件中。
再添加写枝叶,一棵大树长成了。
然后运行起来,一段时间后就爬完了,users.txt文件里也有了不少用户名,每行一个。不过打开之后发现最后部分全是重复的,难道语法有错误,我检查了半天。也没发现问题,仔细看了看,发现从10993行开始重复网页上第一页的24个ID。
我若有所思打开计算器10992/24=458.也就是说,第459页之前都爬的好好的,从第459之后就显示第一页了。之前提到pn的参数传递有问题时会显示第一页。但459没有超出总页数,而且也是数字,怎么就会出问题呢。
随手百度一下,立刻释怀了。
大数据时代,大家都想搞点大数据,我也不例外。比如说爬取一些人际关系信息,或许还能做个图,是多么有意思的事情。
随便百度一下,大多用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,以失败告终,但毕竟试一次尝试,伟大的第一步。
嗯,我已心满意足。