Skip to content

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,以失败告终,但毕竟试一次尝试,伟大的第一步。
嗯,我已心满意足。

Published inPython

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注