最近工作需要使用python爬取一些网页数据,爬取网页是非静态页面
1、requests只能爬取静态页面
2、seleium需要下注对应版本的浏览器驱动,若是浏览器升级,驱动还得重新下载对应版本的驱动程序,pass
3、最终选择的pyppeter库,pyppeter可以开启一个无界面Chromium浏览器,可以模拟浏览器打开一个页面,并输入url最终加载指定页面
1、安装pyppeter库
# 模拟无界面浏览器
pip install pyppeteer
# 页面解析
pip install beautifulsoup4
2、非静态页面爬取demo
# _*_ coding: utf-8 _*_
# @Time: 2023/12/26
# @TODO: 爬取非静态页面demo
# @Author: wkq
import asyncio
from pyppeteer import launch
async def fetch_page_content(url):
"""
todo 异步请求发送
:param url: 非静态页面url
:return: content页面内容
"""
# 启动无界面浏览器
browser = await launch(headless=True)
# 创建一个新的页面
page = await browser.newPage()
# 访问目标URL并等待页面加载完成
await page.goto(url, {'waitUntil': 'networkidle2'})
# 获取页面的HTML内容
content = await page.content()
await browser.close() # 关闭浏览器
return content
async def main():
"""
todo 异步执行请求加载页面,解析页面
:return:
"""
# 非静态页面url
url = "https://www.sporttery.cn/jczx/jclq/ssjx/20231225/10039058.html"
html_content = await fetch_page_content(url)
# 使用BeautifulSoup解析HTML
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')
# 打印整个网页的HTML内容
print(soup.prettify())
if __name__ == "__main__":
# 使用事件循环执行异步方法
asyncio.get_event_loop().run_until_complete(main())