分享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 相关文章推荐
python3.0 字典key排序
Dec 24 Python
PHP webshell检查工具 python实现代码
Sep 15 Python
python中urllib.unquote乱码的原因与解决方法
Apr 24 Python
Python实现简单的语音识别系统
Dec 13 Python
pandas表连接 索引上的合并方法
Jun 08 Python
python中使用psutil查看内存占用的情况
Jun 11 Python
Django数据库连接丢失问题的解决方法
Dec 29 Python
提升Python程序性能的7个习惯
Apr 14 Python
Python hashlib加密模块常用方法解析
Dec 18 Python
详解Python IO口多路复用
Jun 17 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
Nov 09 Python
python cv2图像质量压缩的算法示例
Jun 04 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
PHP网站基础优化方法小结
2008/09/29 PHP
浅析PKI加密解密 OpenSSL
2013/07/01 PHP
配置php网页显示各种语法错误
2013/09/23 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
2016/03/31 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
自己开发Dojo的建议框架
2008/09/24 Javascript
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
JAVASCRIPT函数作用域和提前声明 分享
2013/08/22 Javascript
js 中的switch表达式使用示例
2020/06/03 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
用jquery的attr方法实现图片切换效果
2017/02/05 Javascript
详解基于webpack和vue.js搭建开发环境
2017/04/05 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
react.js组件实现拖拽复制和可排序的示例代码
2018/08/20 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
jQuery实现的分页插件完整示例
2020/05/26 jQuery
js模拟实现百度搜索
2020/06/28 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
Python基于DES算法加密解密实例
2015/06/03 Python
python中的代码编码格式转换问题
2015/06/10 Python
Python实现简单查找最长子串功能示例
2019/02/26 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
实现CSS3中的border-radius(边框圆角)示例代码
2013/07/19 HTML / CSS
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
2016/03/15 HTML / CSS
怎样声明一个匿名的内部类
2016/06/01 面试题
工程部经理岗位职责
2013/12/08 职场文书
募捐感谢信
2015/01/22 职场文书
银行自荐信怎么写
2015/03/05 职场文书
法律进社区活动总结
2015/05/07 职场文书
停发工资证明范本
2015/06/12 职场文书