Python初学者之网络爬虫-今日头条 - (EPUB全文下载)

文件大小:0.25 mb。
文件格式:epub 格式。
书籍内容:

Python初学者之网络爬虫
声明:本文内容和涉及到的代码仅限于个人学习,任何人不得作为商业用途。
本文将介绍我最近在学习Python过程中写的一个爬虫程序,将力争做到不需要有任何Python基础的程序员都能读懂。读者也可以先跳到文章末尾看最终收集的数据效果和完整代码。
1. 确立目标需求
本次练习Python爬虫的目标需求为以下两点:
1) 收集huajiao.com上的人气主播信息:每位主播的关注数,粉丝数,赞数,经验值等数据
2) 收集每位人气主播的直播历史数据,包括每次直播的开播时间,观看人数,赞数等数据
2. 确立逻辑步骤
首先通过浏览器查看www.huajiao.com网站上的各个页面,分析它的网站结构。得到如下信息:
1) 每一个导航项列出的都是直播列表,而非主播的个人主页列表
以“热门推荐”为例,如下图,每个直播页面的url格式为http://www.huajiao.com/l/liveId, 这里的liveId唯一标识一个直播,比如http://www.huajiao.com/l/52860333
2) 在直播页上有主播的用户ID和昵称等信息
3) 在主播个人主页上有更加完整的个人信息
更加完整的个人信息包括关注数,粉丝数,赞数,经验值等数据;也有主播的直播历史数据,如下图,每个主播个人主页的url格式为http://www.huajiao.com/user/userId, 这里的userId唯一标识一个主播用户,比如http://www.huajiao.com/user/50647288
4) 程序逻辑
通过以上的分析,爬虫可以从直播列表页入手,获取到所有的直播url中的直播id,即上文提到的liveId;
拿到直播id后就可以进入直播页获取用户id,即前面提到的userId,
有了userId后就可以进入主播个人主页,在个人主页上有主播完整的个人信息和直播历史信息。
具体步骤如下:
a):抓取直播列表页的html, 我选取的是”热门推荐”页面http://www.huajiao.com/category/1000
b):从获取到的“热门推荐”页面的html中过滤出所有的直播地址,http://www.huajiao.com/l/liveId
c):通过直播id抓取直播页面的html, 并过滤出主播的userId
d):通过userId抓取主播的个人主页,过滤出关注数,粉丝数,赞数,经验值;过滤出直播历史数据。
e):将用户数据和直播历史数据写入mysql保存
以上是根据观察网站页面,直观上得出的一个爬虫逻辑,但实际在开发过程中,还要考虑更多,比如:
a)爬虫要定时执行,对于已经采集到的数据,采取何种更新策略
b)直播历史数据需要请求相应的ajax接口,对收到的数据进行json解码分析
c)主播昵称包含emoji表情,如果数据库使用常用的编码”utf8″则会写入报错
d)过滤直播地址来获取直播id时,需要使用到正则匹配,我使用的是Python库”re”
e)分析html,我使用的是”BeautifulSoup”
f)读写mysql,我使用的是”pymysql”
如上逻辑步骤分析清楚后,就是编码了,利用Python来实现以上的逻辑步骤。
3. Python编码
1) 数据表设计
其中Tbl_Huajiao_User用于存储主播的个人数据,Tbl_Huajiao_Live用于存储主播的历史直播数据,其中字段FScrapedTime是每次记录更新的时间,依靠此字段可以实现简单的更新策略。
2) 从直播列表页过滤出直播Id列表
# filter out live ids from a url
def filterLiveIds(url):
html = urlopen(url)
liveIds = set
bsObj = BeautifulSoup(html, "html.parser")
for link in bsObj.findAll("a", href=re.compile("^(/l/)")):
if 'href' in link.attrs:
newPage = link.attrs['href']
liveId = re.findall("[0-9]+", newPage)
liveIds.add(liveId[0])
return liveIds
关于python中如何定义函数,直接看以上代码就可以了,使用”def”和冒号,没有大括号。其中urlopen(url)是python的库函数,需要做import, 如下:
from urllib.request import urlopen
其中BeautifulSoup是一个第三方Python库,通过它就可以方便的解析html代码了,通过它的findAll方法找出所有的a标签,并且这个方法支持正则,所以在它的参数里我传入了一个正则re.compile(“^(/l/)”)来表示寻找一”/l/”开头的所有链接地址,bsObj.findAll(“a”, href=re.compile(“^(/l/)”))的结果是一个列表,故使用for循环来遍历列表内的元素,在遍历过程中通过使用正则re.findall(“[0-9]+”, newPage)匹配出liveId, 并临时保存在liveIds中,并将liveIds返回给调用者。
3) 从直播页过滤出主播id
# get user id from live page
def getUserId(liveId):
html = urlopen("http://www.huajiao.com/" + "l/" + str(liveId))
bsObj = BeautifulSoup(html, "html.parser")
text = bsObj.title.ge ............

书籍插图:
书籍《Python初学者之网络爬虫-今日头条》 - 插图1
书籍《Python初学者之网络爬虫-今日头条》 - 插图2

以上为书籍内容预览,如需阅读全文内容请下载EPUB源文件,祝您阅读愉快。

版权声明:书云(openelib.org)是世界上最大的在线非盈利图书馆之一,致力于让每个人都能便捷地了解我们的文明。我们尊重著作者的知识产权,如您认为书云侵犯了您的合法权益,请参考版权保护声明,通过邮件openelib@outlook.com联系我们,我们将及时处理您的合理请求。 数研咨询 流芳阁 研报之家 AI应用导航 研报之家
书云 Open E-Library » Python初学者之网络爬虫-今日头条 - (EPUB全文下载)