这次介绍一下《Python网络数据采集》这本书的第3章内容(Chpt03.开始爬数据的内容),
使用了天善用户关系分析的示例来介绍一下具体实践。
1.第3章内容简介
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/用户名,可以查询前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(按用户名对应):
附件: