山东大学创新实训2020/6/5

山东大学项目实训
本次实验实现了对头条数据的爬取,基本实现了给一个关键词就能爬取新闻内容及评论

    def get_json(self,query,times):
        print(times*20)
        url = 'https://www.toutiao.com/api/search/content/?'
        query = query
        data = {
        'aid' : '24',
        'app_name' : 'web_search',
        'offset':times*20,
        'format':'json',
        'keyword': query,
        'autoload':'true',
        'count':'20',
        'en_qc':'1',
        'cur_tab':'1',
        'from':'search_tab',
        'pd':'synthesis',
        'timestamp':'1591334689562',
        '_signature':'eogINAAgEBC837G5qXUW1nqJSSAACRUUacJVWMYPAnDzgyhUN8Z50mnnocKxzlDN68ESVavW7QohTkc-zAqL6T3-Yix63Z7STBVenpHHWa-svVRQHbXc9VElqbkshKKcmNI'}
        data = urlencode(data)
        url = url + data
        print(url)
        return url


    def get_comment(self,url,number):
        common = []
        id = None
        if number==1:
            id = url.split('/')[4]
        if number==2:
            id = url
        url = self.get_comment_json(id)
        response = requests.get(url, headers=self.comment_headers)
        response.encoding = 'utf-8'
        html = response.content
        json_dict = json.loads(html.decode('utf-8'))
        for i in  json_dict['data']:
            common.append(i['comment']['text'])
        return common

    def get_comment_json(self,id):
        url = 'https://www.toutiao.com/article/v2/tab_comments/?'
        'aid=24&app_name=toutiao-web&group_id=6832123300156539399&item_id=6832123300156539399&offset=0&count=5'
        id = id
        data = {
            'aid': '24',
            'app_name': 'toutiao-web',
            'group_id':id,
            'item_id':id,
            'offset': '0',
            'count':'5'}
        data = urlencode(data)
        url = url + data
        return url


    def main(self,query):
        f = open('./疫情.txt', 'w+',encoding="utf-8")
        while True:
            url = self.get_json(query,self.offset)
            self.offset += 1
            summary_list = []
            # time.sleep(30)
            response = requests.get(url, headers=self.headers)
            response.encoding = 'utf-8'
            html = response.content
            json_dict = json.loads(html.decode('utf-8'))
            # print(json_dict['count'])
            if json_dict['count']==0:
                print('finish crawling data')
                break
            for i in json_dict['data']:
                try:
                    mid = i['title'].replace('<em>', '').replace('</em>', '')
                    times = i['datetime']
                    try:
                        comment_url = i['display']['info']['url']
                        comment_list_=self.get_comment(comment_url,1)
                    except:
                        comment_url=i['id']
                        comment_list_ = self.get_comment(comment_url, 2)

                    f.write(str(mid) + ',' + str(times) + ',' + str(comment_list_)+'\n')
                    print(mid, times,comment_list_)
                    # summary_list.append(mid)
                except KeyError:
                    print(KeyError)
                    pass
            time.sleep(5)
            # if self.offset ==4:
            #     break
        f.close()

爬完之后结果是新闻内容 ,时间 ,评论
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值