异步爬取腾讯新闻

标题 [原创]Python—异步爬取腾讯新闻

本人由于一直仰慕程序员,今年在下乡扶贫的过程中,通过网络自学了Python语言的一些基本知识,由于完全是自学,连一本教材都没有的情况下,在粗略的学完基础知识后,就信马由缰的学起了爬虫.同时也就常年在这个坛子里下潜.向各位高人学习.这两天潜心学习了异步协程的相关知识,就拿QQ新闻练了一下手,想把代码和爬取一些感想发在这里,希望能得到大神们的指点!这段文字也就全当前言了吧.

异步爬取QQnews

通过一步步的学习爬取的相关知识,我学会了如何发送同步请求,了解了urllib.request、urllib.parse/reqests/等等相关库的知识,也先后以类和面向对象的形式写了同步爬虫.通过在网上了解到

<font color=#999AAA

一、分析QQnews_html.

我没有学过网页制作的相关知识,只是在自学中知道了什么是动态网页和静态网页如何区分以及抓取端口,具体的理论知识,我说不了太多。下面就准备上代码.求大神们的指点了.

二、使用步骤

1.引入库

代码如下(示例):

import asyncio
import aiohttp
from fake_useragent import UserAgent
import random
from parsel import Selector
import json
import os

2.读入数据

代码如下(示例):

if not os.path.exists('./qqnews/'):
    os.mkdir('./qqnews/')


temp_url = 'https://i.news.qq.com/trpc.qqnews_web.kv_srv.kv_srv_http_proxy/list?sub_srv_id=24hours&srv_id=pc&offset={}'
ua = UserAgent()
headers = {
    'user-agent': str(ua.random),
    'referer': ' https://news.qq.com/',
}


async def main(url):
    async with aiohttp.ClientSession()as session:
        try:
            async with session.get(url=url, headers=headers)as resp:
                print(resp.status, resp.charset)
                html_data = await resp.text()
                each_data = json.loads(html_data)
                # print(each_data)
                each_url = each_data['data']
                for r in each_url['list']:
                    deail_task = {
                        'title': r['title'],
                        'href': r['url'],
                        'create_time': r['create_time'],
                        'img': r['img']
                    }
                    await asyncio.create_task(get_next_request(session, deail_task))

        except Exception as e:
            print(e)
        asyncio.sleep(3)


async def get_next_request(session, deail_task):
    try:
        async with await session.get(url=deail_task['href'], headers=headers)as response:
            each_news_data = await response.text()
            sel = Selector(each_news_data)
            content = sel.css('.content-article p::text')
            if content:
                deail_task['contents'] = '\n'.join(content.getall())
            else:
                deail_task['contents'] = '无正文'
            print(deail_task)
            with open('./qqnews/'+deail_task['title']+'.txt', 'a', encoding='utf8')as fp:
                fp.write(deail_task['title'])
                fp.write(deail_task['create_time'])
                fp.write(deail_task['href'])
                fp.write(deail_task['contents'])
                fp.write(deail_task['img'])
                fp.write('\n')

    except Exception as e:
        pass


if __name__ == '__main__':
    for page in range(0, 120, 20):
        url = temp_url.format(
            page)+'&limit=20&strategy=1&ext={%22pool%22:[%22top%22],%22is_filter%22:7,%22check_type%22:true}'
        asyncio.run(main(url))

在这里插入图片描述
在这里插入图片描述

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:
看到总结,那就在说两句,这是我第一次在这种高手如云的坛子里发帖子,如有不妥之处,还请大家海涵.赐教/指导.

链接: link.

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值