设为首页 加入收藏

TOP

python爬取豌豆荚中的详细信息并存储到SQL Server中(一)
2017-10-10 08:29:12 】 浏览:6339
Tags:python 豆荚 详细 信息 存储 SQL Server

  买了本书《精通Python网络爬虫》,看完了第6章,我感觉我好像可以干点什么;学的不多,其中的笔记我放到了GitHub上:https://github.com/NSGUF/PythonLeaning/blob/master/examle-urllib.py,因为我用的python3.0,所以,在爬取数据的时候只用到了一个包:urllib。该博文的源码:https://github.com/NSGUF/PythonLeaning/blob/master/APPInfo.py

  思路:首先,如果进入了豌豆荚的首页可以看到,其图如图1,主要是分为安卓软件和安卓游戏,所以只需得到这里面所有的链接即可,如影音播放,系统工具等;

图1

  当点击随意一个链接时,显示图2,如图可见,该页面会显示每个软件的基本信息,并且会链接到其详细信息上,这时,如果能获取到详细信息的链接就能得到所需的基本信息了;

图2

  由于该网站是分页的,所以必须得到页数,由图可见,每个页面的最大都是42,而具体却没有到42,所以后面会显示图4.没有更多内容了所以,可以循环42次;

图3

图4

  综上所述:可得获取图1中画下划线的链接,同样包括安卓游戏中的该链接

def getAllLinks(url):#获取首页链接的所有子链接
    html1=str(urllib.request.urlopen(url).read())
    pat='<a class="cate-link" href="(http://.+?")>'
    allLink=re.compile(pat).findall(html1)
    allLinks=[]
    for link in allLink:
        allLinks.append(link.split('"')[0])
    return allLinks

  获取图2中圈起来的链接,因为其有页码,所以得加上页码

def getAllDescLinks(url,page):#获取子链接中所有app指向的链接
    url=url+'/'+str(page)
    print(url)
    html1=str(urllib.request.urlopen(url).read().decode('utf-8'))
    pat2='<ul id="j-tag-list" class="app-box clearfix">[\s\S]*<div class="pagination">'
    allLink=str(re.compile(pat2).findall(html1)).strip('\n').replace(' ','').replace('\\n','').replace('\\t','')
    allLink=allLink.split('<divclass="icon-wrap"><ahref="')
    allLinks=[]
    for i in range(1,len(allLink)):
        allLinks.append(allLink[i].split('"><imgsrc')[0])
    allLinks=list(set(allLinks))
    return allLinks

  获取详细信息中的信息:

def getAppName(html):#获取app名字
    pat='<span class="title" itemprop="name">[\s\S]*</span>'
    string=str(re.compile(pat).findall(html))
    name=''
    if string!='[]':
        name=string.split('>')[1].split('<')[0]
    return name
def getDownNumber(html):#下载次数
    pat='<i itemprop="interactionCount"[\s\S]*</i>'
    string=str(re.compile(pat).findall(html))
    num=''
    if string!='[]':
        num=string.split('>')[1].split('<')[0]
    return num
def getScore(html):#评分
    pat='<span class="item love">[\s\S]*<i>[\s\S]*好评率</b>'
    string=str(re.compile(pat).findall(html))
    score=''
    if string!='[]':
        score=string.split('i')[2].split('>')[1].split('<')[0]
    return score
def getIconLink(html):#app中icom的图片链接
    pat='<div class="app-icon"[\s\S]*</div>'
    image=str(re.compile(pat).findall(html))
    img=''
    if image!='[]':
        img='http://'+str(image).split('http://')[1].split('.png')[0]+'.png'
    return img
def getVersion(html):#版本
    pat='版本</dt>[\s\S]*<dt>要求'
    version=str(re.compile(pat).findall(html))
    if version!='[]':
        version=version.split('&nbsp;')[1].split('</dd>')[0]
    return version
def getSize(html):#大小
    pat='大小</dt>[\s\S]*<dt>分类'
    size=str(re.compile(pat).findall(html))
    if size!='[]':
        size=size.split('<dd>')[1].split('<meta')[0].strip('\n').replace(' ','').replace('\\n','')#strip删除本身的换行,删除中文的空格,删除\n字符
    return size

def getImages(html):#所有截屏的链接
    pat='<div data-length="5" class="overview">[\s\S]*</div>'
    images1=str(re.compile(pat).findall(html))
    pat1='http://[\s\
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇python常用算法题 下一篇一个人学习Python的日子day21

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目