爬虫大佬的必备技能,你会哪几个?

前言

大家好,我是程序员晓晓。

接下来,我们看看五个”新“爬虫方法。

正文

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所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
若有侵权,请联系删除
  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值