爬虫04作业

作者: 汤尧 | 来源:发表于2017-08-04 14:20 被阅读29次

    这次参照老师上课给的代码,以及查阅资料,完成的作业。

    # coding: utf-8
    import os
    import time
    import urllib2
    import urlparse
    from bs4 import BeautifulSoup 
    
    def download(url,retry=2):#定义一个下载页面的函数
        print"downloading: ",url
        header = {
            'User-agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
        }#可以自由设置,相当于网名
        try:
            request = urllib2.Request(url,headers=header)#相当于输入网址并输入自己的登录名
            html = urllib2.urlopen(request).read()#抓取这个网页的html文件
        except urllib2.URLError as e:#服务器不存在(例如链接打不开,url链接写错了)
            print "download error: ", e.reason #输出异常原因
            html = None#返回空值
            if retry > 0:#还有重试次数,继续尝试爬取
                if hasattr(e, 'code') and 500 <= e.code < 600:#错误码范围,只有在链接打不开的情况下才重新爬取,而链接写错了则不重新爬取。
                    print e.code
                    return download(url,retry -1)
        time.sleep(0.1)#等待0.1s,避免对网站造成沉重负担,甚至对网站造成严重伤害或直接把网站拖垮
        return html
    
    def crawl_paper_tag(url_seed):
        url_root = 'http://www.jianshu.com/'
        paperlist = []#创建一个新的列表
        i = 1  
        flag = True
        while flag:
            url=url_seed % i
            i += 1
            html = download(url)#调用函数
            if html  == None:
                break
            soup = BeautifulSoup(html, "html.parser") #格式化爬取的页面数据
            lists = soup.find('ul',{'class':'note-list'}).find_all('li')
            links = soup.find_all('a', {'class': 'title'})
            if links.__len__() == 0: #爬取的页面中已无有效数据,终止爬取
                flag = False 
            for papertag in lists:#开始采集数据
                author = papertag.find('div',{'class': 'content'}).find('div',{'class': 'author'}).text#获取文章作者
                title = papertag.find('div',{'class':'content'}).find('a',{'class':'title'}).text#获取文章标题
                paperUrl = papertag.find('div',{'class':'content'}).find('a',{'class':'title'}).get('href')#获取文章链接
                abstract = papertag.find('div',{'class':'content'}).find('p',{'class':'abstract'}).text#获取文章摘要
                try:#这里有些没有缩略图,所以现寻找,防止报错
                    papertag.find('a',{'class':'wrap-img'})#获取缩略图
                    pic = papertag.find('a',{'class':'wrap-img'}).img.get('src')
                except:
                    pic = 'Na'
                metaRead = papertag.find('div',{'class':'content'}).find('div',{'class':'meta'}).find('i',{'class':'iconfont ic-list-read'}).parent.text#通过父代标签获取阅读数
                metaComment = papertag.find('div',{'class':'content'}).find('div',{'class':'meta'}).find('i',{'class':'iconfont ic-list-comments'}).parent.text#获取评论数
                metaLike = papertag.find('div',{'class':'content'}).find('div',{'class':'meta'}).find('i',{'class':'iconfont ic-list-like'}).parent.text#获取喜欢数
                try:
                    papertag.find('div',{'class':'content'}).find('div',{'class':'meta'}).find('i',{'class':'iconfont ic-list-money'})#获取赞赏数
                    metaReward = papertag.find('div',{'class':'content'}).find('div',{'class':'meta'}).find('i',{'class':'iconfont ic-list-money'}).paient.text
                except: 
                    metaReward = 'Na'
                #用字典保存
                paperAttr = {
                    'author': author,
                    'title': title,
                    'paperUrl': urlparse.urljoin(url_root,paperUrl),
                    'abstract': abstract,
                    'pic': pic,
                    'metaRead': metaRead,
                    'metaComment': metaComment,
                    'metaLike': metaLike,
                    'metaReward': metaReward,
                }
                paperlist.append(paperAttr)
        return paperlist
    
    部分返回结果值

    最后得到的结果中,存在了大量的转义字符。

    存在问题:最后老师得到的结果中,数字是直接得到的结果,而我得到的是一个含转义字符的文本,不知是否有直接得到数值型数据的代码,我也没有查找到。

    相关文章

      网友评论

      • 汤尧:好的,我试试
      • 不忘初心2017:你的客户端代码没有贴。我也遇到过类似问题,abstract等含中文字符的打印时都显示的是编码过的,原因是print “%r",这里的%r换成%s就好了。关于数字的问题,我是将文本又处理了一下,只取里面的数字

      本文标题:爬虫04作业

      本文链接:https://www.haomeiwen.com/subject/ikivlxtx.html