前言
大家好,我是程序员晓晓。
接下来,我们看看五个”新“爬虫方法。
正文
1. Pyppeteer
Pyppeteer是Puppeteer的Python版本,它是Python中用于控制Chrome或Chromium浏览器的库。它允许你通过Python代码在浏览器中执行各种操作,例如打开新标签页、导航到URL、点击按钮等。Pyppeteer基于Chromium的headless模式,这意味着您可以在没有图形界面的服务器上使用它。
相较于Selenium,Pyppeteer的使用更加便捷而且效率更快。Pyppeteer不像Selenium那样需要安装一些依赖库和环境,Pyppeteer在运行的时候会自动启动一个Chromium窗口,所以Pyppeteer的设置更加人性化。
如果你本地没有安装Pyppeteer,可以使用如下命令进行安装:
pip install pyppeteer
我们可以使用Pyppeteer打开浏览器并导航到URL,示例代码如下:
import asyncio
from pyppeteer import launch
async def main():
browser = await launch()
page = await browser.newPage()
await page.goto('https://www.example.com')
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
在上面的示例中,我们首先导入必要的模块,然后定义一个异步函数main()。在该函数中,我们使用launch()函数启动浏览器,并使用newPage()方法创建一个新的页面。然后,我们使用goto()方法导航到指定的URL。最后,我们使用close()方法关闭浏览器。
除此之外,你还可以使用Pyppeteer执行其他操作,例如点击按钮、填写表单等等操作。需要注意的是,Pyppeteer基于Chrome DevTools Protocol,它可以完全控制Headless Chrome浏览器,并且支持JavaScript渲染。对Pyppeteer知识点感兴趣的同学,也可以直接通过连接《http://t.csdnimg.cn/rkLbT》来学习,里面涵盖了由浅入深的一个学习讲解,并附带完整项目代码。
2. Tornado
Tornado是一个Python的异步网络库,它用于处理网络请求和响应。Tornado也是一个强大的、可扩展的框架,特别适用于需要处理大量并发连接的应用,如实时网络应用。
Tornado的主要特点包括:
异步: Tornado的异步功能允许它在等待某些操作(如I/O操作)完成时不会阻塞主线程。这使得Tornado能够处理大量并发连接,而不会耗尽系统资源;
非阻塞: 与其他同步网络框架相比,Tornado的非阻塞性意味着它可以同时处理多个请求,而不会等待一个请求完成后再处理下一个;
高效: 由于Tornado的异步和非阻塞特性,它通常比同步的网络框架更高效;
可扩展: Tornado的设计使其易于扩展和定制。你可以轻松地添加新的路由、处理器或中间件来满足你的特定需求;
跨平台: Tornado可以在多种操作系统上运行,包括Windows、Linux和Mac OS X。
在使用Tornado的时候,它的基本步骤可以概括为如下:
1.导入Tornado的库;
2.创建一个应用实例;
3.定义路由和处理函数;
4.启动应用并监听端口;
为了更清晰的说明,下面用Tornado结合代码示例说明如下:
import tornado.ioloop
import tornado.web
import tornado.httpclient
class MainHandler(tornado.web.RequestHandler):
async def get(self):
#创建异步HTTP客户端对象
http_client = tornado.httpclient.AsyncHTTPClient()
#发送异步GET请求到Bing首页
response = await http_client.fetch("https://www.bing.com")
#获取页面内容并提取标题
title = response.body.decode('utf-8')
start = title.find("<title>") + len("<title>")
end = title.find("</title>", start)
title = title[start:end]
#返回页面标题给客户端
self.write("Bing Title: {}".format(title))
def make_app():
#创建Tornado应用程序对象
return tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
app = make_app()
#监听8888端口
app.listen(8888)
#启动Tornado事件循环
tornado.ioloop.IOLoop.current().start()
Tornado其优点是高性能异步框架,它支持大规模并发,而且适合构建高性能Web应用程序。而缺点就是相对复杂,使用起来较为繁琐。
3. feedparser
feedparser是Python中一个用于解析RSS和Atom feed的库。它是一个非常流行的库,被广泛用于读取和解析各种在线RSS和Atom feed。
要使用feedparser,首先需要安装它。你可以使用pip来安装:
pip install feedparser
安装完成后,你可以开始使用feedparser来解析feed。下面是一个简单的例子,演示如何使用feedparser来解析一个RSS feed:
import feedparser
def parse_rss_feed(url):
# 解析RSS feed
feed = feedparser.parse(url)
# 获取feed的标题
feed_title = feed.feed.title
print(f"Title of the feed: {feed_title}")
# 获取每个条目的标题和链接
for entry in feed.entries:
entry_title = entry.title
entry_link = entry.link
print(f"Title: {entry_title}, Link: {entry_link}")
# 使用函数解析RSS feed
parse_rss_feed('https://example.com/rss-feed.xml')
在上面的例子中,我们首先导入了feedparser库。然后,我们定义了一个名为parse_rss_feed的函数,它接受一个RSS feed的URL作为参数。在函数内部,我们使用feedparser.parse()方法来解析feed,并获取feed的标题和其他信息。最后,我们遍历每个条目,并打印出每个条目的标题和链接。
你可以根据需要修改这个例子,以适应你的具体需求。例如,你可以提取其他字段(如作者、描述、发布日期等),或者对解析后的数据进行进一步处理。
feedparser的优点是简单易用,支持解析各种格式的RSS和Atom订阅源。其缺点就是功能相对有限,不适合处理复杂的页面结构。
4. playwright
Playwright是一个Python库,用于自动化Web浏览器。它支持Chromium(Google Chrome和Microsoft Edge),Firefox和WebKit(Webkit-based browsers,如WebKitGTK+和WebKit2)。
Playwright的主要功能包括:
浏览器自动化:Playwright可以自动打开浏览器,导航到URL,填写表单,点击按钮等。
页面交互:Playwright提供了与页面元素交互的API,例如点击按钮、输入文本等。
等待和断言:Playwright支持等待特定的页面元素出现,并进行断言检查,以确保页面按照预期的方式工作。
截图和视频录制:Playwright可以捕获页面的截图或录制视频。
与Selenium集成:Playwright可以与Selenium集成,以支持更广泛的浏览器自动化需求。
以下是一个简单的Playwright示例,用于打开浏览器并导航到一个URL:
from playwright.sync_api import Playwright, sync_playwright
with sync_playwright() as p:
# 选择浏览器引擎和选项
browser = p.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
# 打开百度网站
page.goto('https://www.baidu.com')
# 在搜索框中输入关键字并提交搜索
search_input = page.locator('#kw')
search_input.fill('Python')
search_button = page.locator('#su')
search_button.click()
# 等待搜索结果加载完毕并截图
page.wait_for_selector('#content_left')
page.screenshot(path='baidu_search.png')
# 关闭浏览器
context.close()
browser.close()
需要注意的是,Playwright是一个相对较新的库,仍在不断发展和改进中。它的优点就是支持多种浏览器(包括Chrome、Firefox、WebKit),提供了简洁易用的API,支持跨平台。而缺点就是相对较新,社区支持还在成熟阶段。
5. MechanicalSoup
MechanicalSoup是一个Python库,用于自动化Web浏览器交互。它是基于BeautifulSoup和Requests库的扩展,提供了更高级的功能,用于处理Web表单、Cookie和会话等。
MechanicalSoup的主要特点包括:
表单处理:MechanicalSoup可以自动填充和提交Web表单。它可以识别表单字段,并支持各种字段类型,包括文本、复选框和下拉列表等。
会话管理:MechanicalSoup可以管理Web会话,包括处理Cookie和会话状态。它可以在多个请求之间保持会话,并支持跨多个页面的表单提交。
模拟浏览器行为:MechanicalSoup可以模拟常见的浏览器行为,如点击链接、提交表单和导航页面等。这使得它可以用于自动化Web任务和爬取动态生成的内容。
可扩展性:MechanicalSoup是基于Requests和BeautifulSoup构建的,因此可以与这两个库无缝集成。你可以使用Requests的高级功能来处理HTTP请求,同时使用BeautifulSoup解析HTML文档。
下面是一个简单的MechanicalSoup示例,演示了如何登录一个网站并获取登录后的页面内容:
import mechanicalsoup
# 创建一个浏览器实例
browser = mechanicalsoup.StatefulBrowser()
# 打开登录页面
login_page = browser.open("https://example.com/login")
# 填充表单字段
login_form = login_page.select_form("#login-form")
login_form["username"] = "your_username"
login_form["password"] = "your_password"
# 提交表单并获取登录后的页面
logged_in_page = login_form.submit()
# 打印登录后的页面内容
print(logged_in_page.text)
# 关闭浏览器
browser.close()
在上面的例子中,我们首先创建了一个StatefulBrowser实例,然后使用open()方法打开登录页面。接下来,我们使用select_form()方法选择登录表单,并使用字典语法填充表单字段。最后,我们使用submit()方法提交表单并获取登录后的页面内容。最后,我们打印页面内容并使用close()方法关闭浏览器。
如果想获取结果页面的标题,可以使用如下代码:
import mechanicalsoup
#创建一个 Browser 对象
browser = mechanicalsoup.StatefulBrowser()
#发起 GET 请求并打开百度首页
browser.open("https://www.baidu.com")
#输出当前页面的标题
print(browser.get_current_page().title)
#选择搜索框元素并填入关键字
browser.select_form()
browser["wd"] = "Python"
#提交搜索表单
browser.submit_selected()
#输出搜索结果页面的标题
print(browser.get_current_page().title)
总的来说,MechanicalSoup的优点就是简化了与网站交互的过程,使用起来类似于requests和BeautifulSoup的结合体。而它的缺点是功能相对较少,而且不支持JavaScript渲染。
以上是笔者在本文介绍的五个新爬虫方法,具体的项目场景可以选择使用合适的去实现就行。
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典