《Python网络数据采集》读后总结--第3章开始爬取数据及天善用户关系分析实例

浏览: 4428

这次介绍一下《Python网络数据采集》这本书的第3章内容(Chpt03.开始爬取数据的内容),

使用了天善用户关系分析的示例来介绍一下具体实践。


1.第3章内容简介

示例(https://github.com/REMitchell/python-scraping/tree/master/chapter3)

1-getWikiLinks.py

2-crawlWikipedia.py

3-crawlSite.py

4-getExternalLinks.py

5-getAllExternalLinks.py

主要介绍了如何使用深度遍历的方法,访问所有链接到的页面。

实现的代码类似如下:

allIntLinks = set()
def getAllExternalLinks(siteUrl):
    try:
        html = urlopen(siteUrl)
        domain = urlparse(siteUrl).scheme+"://"+urlparse(siteUrl).netloc
        bsObj = BeautifulSoup(html,"html.parser")
        internalLinks = getInternalLinks(bsObj,domain)
        for link in internalLinks:
            if link not in allIntLinks :
                allIntLinks.add(link)
                getAllExternalLinks(link)  #递归实现深度遍历
    except:
        #print(e)
        return None

这种只是一个功能实现的演示啊,实际情况递归是有大小限制的。

具体的代码大家可以看sample.

2.总结的一些有用的功能

#有用的函数

#1.urlparse

#2.unquote

#3.urljoin


3.天善用户关系的数据抓取

目的:获取和某个用户有关联的有多些用户

原理:

http://www.flybi.net/people;列出了所有用户。

http://www.flybi.net/people/用户名,可以查询前26个有关注的用户,不是全部用户,这是个问题,不过由于关注和被关注有2份数据,可以部分弥补,不过和结果还是有偏差。

具体实现(具体看附件的ipynb):

#1.从起始页开始读取所有人员列表页 (使用深度遍历方法)  

getallPeopleCatlog('http://www.flybi.net/people/page-1','\/people\/page-*')

#2.根据所有人员列表页,读出所有人员

for link in allPeopleCatlogLists:
    getallPeople(link,'\/people/*')

#3.遍历所有人,读出对应关系

for link in allPeopleLists:
    try:
        csvFile = open("/pythontest/testscript/allPeopleLinks.csv", 'a', newline='', encoding='utf-8')
        writer = csv.writer(csvFile)
        allPeopleLinks(link,'\/people/*',writer)
    finally:
        csvFile.close()


结果分析:

前几位大大太厉害了,关系网太密切了,去掉了前十的图也给了一张,大家看看。

所有用户:

去掉前10(按用户名对应):



附件:

推荐 7
本文由 seng 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

10 个评论

看着蛮好玩的
最后那张图片可以点看,看原尺寸的,大鹏 你可以看看你在那里?
不过我还没做id和用户名的转换,有些不是很直接。
找不见自己,毫无存在感!
你的id是Obscure,我没转成用户名,你再看看,就在当中啊。
嗯,看见了,我把自己的ID都给忘了
太给力啊,我要分享下。
谢谢,这个怎么看的,没看明白
更新了,按用户名了排了,不是id了。
附件更新了一版,原来有问题,打不开。
您好,请教下。for link in bsObj.findAll("a", href=re.compile("^(/|.*"+includeUrl+")")):这个语句 正则表达式匹配结果跟includeUrl有关吗? 因为我这边匹配为‘/ua/toLogin.shtml'这种格式

要回复文章请先登录注册