个人非常喜欢playwright这个模块,它非常契合python的简单易用的特性,特别适合我这种业余爱好者。
playwright模块能在独立的浏览器上,进行各项操作,以及源网页代码的提取,截图操作。
这种特性,就让他在爬取网页上内容这块,也有了一席之地。可以这么说,我们能在网页看到的,就应该能爬取下来。
举例:爬取网站上的小说目录
网上关于小说爬虫知识,随便一搜都有介绍,所以这里就不对网页源代码做过多的分析,主要是讲解如何通过playwright保存关键信息。
主要思路如下:
playwright安装需要分两步:
pip install playwright
等模块安装完,还需要输入以下命令,进行内置浏览器安装:
playwright install
待安装完毕,我们便可以使用playwright模块进行网页内容的抓取。
假设我们要爬取网站的小说目录信息,经过网页源代码分析,可以发现每一章节的节点都对应一个URL地址,大概结构是这样:
href = "目标章节的URL信息" alt="第十三章 XXXXXX"
这时候我们就能通过playwright定位到关键节点,提取相关内容:
# 导入playwright模块
from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:
# 打开浏览器
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("这里输入目标网页地址")
# 利用XPATH定位小说目录位置
list_1 = page.query_selector_all('//*[@id="list"]/div//a') # 使用page.query_selector_all获取a节点列表
# 利用for遍历每一个a节点
for i in list_1:
text = i.get_attribute("href") #定义text变量接收a标签底下的href属性
with open(f"./小说目录.txt", "a", encoding="gbk") as f: #利用open打开一个txt文件,如果文件不存在,会自动创建,"a"表示追加写入信息。
f.write(novel_2)
page.close()
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
获取节点的关键代码是(query_selector_all表示获取所有节点,形成个列表):
list_1 = page.query_selector_all('//*[@id="list"]/div//a') # 使用page.query_selector_all获取a节点列表
获取a标签底下的href属性:
text = i.get_attribute("href") #定义text变量接收a标签底下的href属性
通过以上代码就能获取标签底下的属性内容,假设要获取的是标签下的文本信息,可以使用以下代码:
text = page.query_selector().text_content() # 在定位的地方使用text_content就能够获取文本信息
常用提取内容的代码还有:
提取 单个a标签 class 属性为 herf 的信息,如匹配到多个,则取第一个:
text = page.query_selector('//*[@id="list"]/div//a/@href') #单独提取一个节点的href属性,在xpath语法后面加@href就能匹配到属性信息
截图screenshot,对截图后的结果进行ocr识别也能获取页面信息:
page.goto("这里输入目标网页地址")
page.screenshot(path="image.png")
page.screenshot(path=”image.png“,full_page = True)
利用以上关键代码块,基本能完成大部份网页内容的抓取。