分享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 相关文章推荐
Python获取当前时间的方法
Jan 14 Python
Python中字符串的常见操作技巧总结
Jul 28 Python
wxPython的安装与使用教程
Aug 31 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
Jan 29 Python
Python eval的常见错误封装及利用原理详解
Mar 26 Python
Python整数对象实现原理详解
Jul 01 Python
django最快程序开发流程详解
Jul 19 Python
Python操作redis和mongoDB的方法
Dec 19 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
Feb 27 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
May 18 Python
python中的plt.cm.Paired用法说明
May 31 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
PHP5常用函数列表(分享)
2013/06/07 PHP
php防止sql注入简单分析
2015/03/18 PHP
深入浅析php json 格式控制
2015/12/24 PHP
php轻松实现文件上传功能
2016/03/03 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
2016/03/21 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
PHP如何获取当前主机、域名、网址、路径、端口等参数
2017/06/09 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
用JavaScript 处理 URL 的两个函数代码
2007/08/13 Javascript
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
多个jquery.datatable共存,checkbox全选异常的快速解决方法
2013/12/10 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
动态加载jQuery的方法
2015/06/16 Javascript
javascript实现二级级联菜单的简单制作
2015/11/19 Javascript
jquery获取input type=text中的值的各种方式(总结)
2016/12/02 Javascript
jQuery实现页面滚动时智能浮动定位
2017/01/08 Javascript
JS表单数据验证的正则表达式(常用)
2017/02/18 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
2017/07/24 Javascript
jQuery 中msgTips 顶部弹窗效果实现代码
2017/08/14 jQuery
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
2017/12/14 Javascript
nodeJS微信分享
2017/12/20 NodeJs
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
2018/12/24 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
layui实现三级联动效果
2019/07/26 Javascript
python如何实现excel数据添加到mongodb
2015/07/30 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
Python3实现定时任务的四种方式
2019/06/03 Python
Python3内置模块random随机方法小结
2019/07/13 Python
Python 日期区间处理 (本周本月上周上月...)
2019/08/08 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
伦敦哈德森鞋:Hudson Shoes
2018/02/06 全球购物
个人实用的自我评价范文
2013/11/23 职场文书