Python異步爬取知乎熱榜實例分享
更新時間:2022年04月11日 20:03:51 作者:程序員班長
這篇文章主要介紹了Python異步爬取知乎熱榜實例分享,文章圍繞Python異步爬取是我相關資料展開對知乎熱榜爬取的相關內(nèi)容,需要的小伙伴卡哇伊參考一下
一、錯誤代碼:摘要和詳細的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) ?# 打印狀態(tài)碼 ? ? ? ? ? ? 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()
二、查看JS代碼
發(fā)現(xiàn)詳細鏈接、圖片鏈接、問題摘要等都在JS里面(CSDN的開發(fā)者助手插件確實好用)
正則表達式獲取上述信息:
接下來就是詳細的代碼啦
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) ?# 打印狀態(tài)碼 ? ? ? ? ? ? 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異步爬取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
django filters實現(xiàn)數(shù)據(jù)過濾的示例代碼
這篇文章主要介紹了django filters實現(xiàn)數(shù)據(jù)過濾的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-05-05pydantic?resolve解決嵌套數(shù)據(jù)結構生成痛點分析
這篇文章主要為大家介紹了pydantic?resolve解決嵌套數(shù)據(jù)結構生成痛點分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04