分享Python异步爬取知乎热榜


Posted in Python onApril 12, 2022

一、错误代码:摘要和详细的url获取不到

import asyncio
from bs4 import BeautifulSoup
import aiohttp
 
headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
    'referer': 'https://www.baidu.com/s?tn=02003390_43_hao_pg&isource=infinity&iname=baidu&itype=web&ie=utf-8&wd=%E7%9F%A5%E4%B9%8E%E7%83%AD%E6%A6%9C'
}
async def getPages(url):
    async with aiohttp.ClientSession(headers=headers) as session:
        async with session.get(url) as resp:
            print(resp.status)  # 打印状态码
            html=await resp.text()
    soup=BeautifulSoup(html,'lxml')
    items=soup.select('.HotList-item')
    for item in items:
        title=item.select('.HotList-itemTitle')[0].text
        try:
            abstract=item.select('.HotList-itemExcerpt')[0].text
        except:
            abstract='No Abstract'
        hot=item.select('.HotList-itemMetrics')[0].text
        try:
            img=item.select('.HotList-itemImgContainer img')['src']
        except:
            img='No Img'
        print("{}\n{}\n{}".format(title,abstract,img))
 
if __name__ == '__main__':
    url='https://www.zhihu.com/billboard'
    loop=asyncio.get_event_loop()
    loop.run_until_complete(getPages(url))
    loop.close()

分享Python异步爬取知乎热榜

二、查看JS代码

发现详细链接、图片链接、问题摘要等都在JS里面(CSDN的开发者助手插件确实好用)

分享Python异步爬取知乎热榜

正则表达式获取上述信息:

分享Python异步爬取知乎热榜

接下来就是详细的代码啦

import asyncio
import json
import re
import aiohttp
 
headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
    'referer': 'https://www.baidu.com/s?tn=02003390_43_hao_pg&isource=infinity&iname=baidu&itype=web&ie=utf-8&wd=%E7%9F%A5%E4%B9%8E%E7%83%AD%E6%A6%9C'
}
async def getPages(url):
    async with aiohttp.ClientSession(headers=headers) as session:
        async with session.get(url) as resp:
            print(resp.status)  # 打印状态码
            html=await resp.text()
 
    regex=re.compile('"hotList":(.*?),"guestFeeds":')
    text=regex.search(html).group(1)
    # print(json.loads(text))   # json换成字典格式
    for item in json.loads(text):
        title=item['target']['titleArea']['text']
        question=item['target']['excerptArea']['text']
        hot=item['target']['metricsArea']['text']
        link=item['target']['link']['url']
        img=item['target']['imageArea']['url']
        if not img:
            img='No Img'
        if not question:
            question='No Abstract'
        print("Title:{}\nPopular:{}\nQuestion:{}\nLink:{}\nImg:{}".format(title,hot,question,link,img))
 
if __name__ == '__main__':
    url='https://www.zhihu.com/billboard'
    loop=asyncio.get_event_loop()
    loop.run_until_complete(getPages(url))
    loop.close()

到此这篇关于Python异步爬取知乎热榜实例分享的文章就介绍到这了!

Python 相关文章推荐
Django中处理出错页面的方法
Jul 15 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
Apr 21 Python
定制FileField中的上传文件名称实例
Aug 23 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
Jun 05 Python
python 获取页面表格数据存放到csv中的方法
Dec 26 Python
Python3.5常见内置方法参数用法实例详解
Apr 29 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
May 22 Python
python实现密码验证合格程序的思路详解
Jun 01 Python
python安装读取grib库总结(推荐)
Jun 24 Python
Python从文件中读取数据的方法步骤
Nov 18 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
Jan 05 Python
python 如何在list中找Topk的数值和索引
May 20 Python
尝试使用Python爬取城市租房信息
Apr 12 #Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 #Python
Python实现批量将文件复制到新的目录中再修改名称
Python多线程实用方法以及共享变量资源竞争问题
Apr 12 #Python
Python使用socket去实现TCP客户端和TCP服务端
Apr 12 #Python
Python闭包的定义和使用方法
Apr 11 #Python
什么是Python装饰器?如何定义和使用?
Apr 11 #Python
You might like
我的论坛源代码(七)
2006/10/09 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2014/01/30 PHP
php简单计算页面加载时间的方法
2015/06/19 PHP
基于PHP如何把汉字转化为拼音
2015/12/11 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
2017/07/16 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
Yii2压缩PHP中模板代码的输出问题
2018/08/28 PHP
Javascript 日期处理之时区问题
2009/10/08 Javascript
jquery调用wcf并展示出数据的方法
2011/07/07 Javascript
javascript 中that的含义示例介绍
2014/05/14 Javascript
jQuery使用slideUp方法实现控制元素缓慢收起
2015/03/27 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
2016/05/31 Javascript
快速解决js中window.location.href不工作的问题
2016/11/02 Javascript
H5基于iScroll实现下拉刷新和上拉加载更多
2017/07/18 Javascript
vue学习笔记之v-if和v-show的区别
2017/09/20 Javascript
详解React中setState回调函数
2018/06/14 Javascript
jquery实现上传文件进度条
2020/03/26 jQuery
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
javascript+Canvas实现画板功能
2020/06/23 Javascript
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
pyqt5简介及安装方法介绍
2018/01/31 Python
Python网络编程之TCP套接字简单用法示例
2018/04/09 Python
python 决策树算法的实现
2020/10/09 Python
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
标记环介质访问控制协议
2016/03/27 面试题
下列程序在32位linux或unix中的结果是什么
2015/01/26 面试题
九年级科学教学反思
2014/01/29 职场文书
材料专业毕业生求职信
2014/02/26 职场文书
党员创先争优公开承诺书
2014/03/28 职场文书
党员承诺践诺书
2014/05/20 职场文书
2014年人事科工作总结
2014/11/19 职场文书
Python办公自动化之Excel(中)
2021/05/24 Python
Go 中的空白标识符下划线
2022/03/25 Golang