在前面内容中,我们重点在解析html页面,获取想要的信息。那么这个页面如何去获取,第一种方法是引入requests
包,例如下面这样。
def get_source(url: str) -> BeautifulSoup:
"""获取网页内容
Args:
url (str): 要爬取的URL
Returns:
BeautifulSoup: The soup of the page source
"""
content = requests.get(url)
return BeautifulSoup(content.text, 'html.parser')
按照这样的方法,我们获取到的html源码并不完整,缺少右侧的Wiki内容,如图。
原因是因为很多网页需要js代码执行来渲染内容,也就是说我们需要等待页面执行完js代码,才能够爬取到相关的内容。
使用pyppeteer获取源码
这里我们采用pyppeteer的方案来解决,代码如下:
async def get_source( url: str):
browser = await launch({'headless': True})
page = await browser.newPage()
await page.goto(url)
try:
# 等待知识页面加载,超时时间设置为3s
await page.waitForSelector('.kp-wholepage', timeout=3000)
except TimeoutError:
print('Wait for knowledge failed')
# 获取网页内容
content = await page.content()
await browser.close()
return BeautifulSoup(content, 'html.parser')
插件机制
这是两种获取源码手段.
Top comments (0)