🎁 惊喜折扣:订阅享受 1折优惠!

⚡️ Nstproxy - 超过1.1亿IP地址,助力闪电般快速的数据抓取与自动化,起价仅需0.1美元/GB。

  • 价钱
  • 文档
ZH
联系

© 2025 NST LABS TECH LTD. ALL RIGHTS RESERVED

产品

指纹浏览器
Nstbrowser RPA
绕过Cloudflare
网页解锁器

解决方案

云端指纹浏览器
多账户管理
网页抓取&自动化
反机器人检测

资源

价格
下载
RPA 市场
联盟计划
合作伙伴
博客
版本更新

支持

联系

文档

法规

条款
隐私政策
Cookie 政策

产品解决方案资源支持法规

产品解决方案资源

支持法规

© 2025 NST LABS TECH LTD. ALL RIGHTS RESERVED

返回博客
python网络爬虫
Web Scraping

2024最好的Python网络爬虫分步指南

Python提供了非常强大的网络爬虫开发能力,是目前最流行的爬虫语言之一。阅读本文以了解如何使用Python进行网络爬取。
Jun 13, 2024Robin Brown

网络爬虫是一种强大的技术,它允许我们通过访问网页并发现网站上 URL来收集各种数据和信息。Python 有各种支持网络爬虫的库和框架。在本文中我们将了解到:

  • 什么是 Python 爬虫
  • 如何使用 Python 爬虫和 Nstbrowser API 爬取网页
  • 如何应对 Python 爬取时被禁止的问题
  • Python 的爬取实例

Python 中的网络爬虫是什么?

Python 提供了非常强大的网络爬虫开发能力,是目前最流行的爬虫语言之一。Python 网络爬虫是一种浏览网站或互联网以搜索网页的自动化程序。它是一个 Python 脚本,可以探索页面、发现链接并跟踪它们以增加可以从相关网站提取的数据。

搜索引擎依靠爬行机器人来构建和维护其页面索引,而网络抓取工具则使用它来访问和查找所有页面以应用数据提取逻辑。

Python 中的网络爬虫主要通过使用一些第三方库来实现。常见的 Python 网络爬虫库包括:

  1. urllib/urllib2/requests:这些库提供了基本的网页抓取功能,可以发送 HTTP 请求并获取响应内容。

  2. BeautifulSoup:这是一个用于解析 HTML 和 XML 文档的库,可以帮助爬虫提取网页中的有用信息。

  3. Scrapy:这是一个强大的网络爬虫框架,提供了诸如数据提取、pipeline处理、分布式爬取等高级功能。

  4. Selenium:这是一个 Web 浏览器自动化工具,可以模拟人工操作浏览器,用于抓取 JavaScript 生成的动态页面内容。

流行的网络爬虫用例:

搜索引擎(例如 Googlebot、Bingbot、Yandex Bot...)收集 Web 重要部分的所有 HTML。该数据被编入索引以使其可搜索。

SEO 分析工具除了收集 HTML 之外,还收集元数据,例如响应时间、响应状态以检测损坏的页面以及不同域之间的链接以收集反向链接。

价格监控工具会抓取电子商务网站以查找产品页面并提取元数据,尤其是价格。然后定期重新访问产品页面。

Common Crawl 维护着一个开放的网络爬网数据存储库。例如,2022 年 5 月的档案包含 34.5 亿个网页。

那么如何使用Python 自动化工具 Pyppeteer 来进行网络爬虫呢,请继续往下阅读。

如何使用 Python 自动化工具 Pyppeteer 和Nstbrowser API进行网络爬虫?

第一步:前提条件

在开始进行爬虫之前,需要做一些准备工作:

Shell Copy
pip install pyppeteer requests json

在安装完上述需要的库之后,新建一个文件 scraping.py,然后将我们刚才安装的库以及一些系统库引入文件:

Python Copy
import asyncio
import json
from urllib.parse import quote
from urllib.parse import urlencode

import requests
from requests.exceptions import HTTPError

from pyppeteer import launcher

使用 pyppeteer 之前,我们首先要连接 Nstbrowser,Nstbrowser 提供了 api 来返回供 pyppeteer 使用的 webSocketDebuggerUrl

Python Copy
# get_debugger_url: Get the debugger url
def get_debugger_url(url: str):
    try:
        resp = requests.get(url).json()
        if resp['data'] is None:
            raise Exception(resp['msg'])
        webSocketDebuggerUrl = resp['data']['webSocketDebuggerUrl']
        return webSocketDebuggerUrl

    except HTTPError:
        raise Exception(HTTPError.response)

async def create_and_connect_to_browser():
    host = '127.0.0.1'
    api_key = 'your api key'
    config = {
        'once': True,
        'headless': False,
        'autoClose': True,
        'remoteDebuggingPort': 9226,
        'userAgent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
        'fingerprint': {  # required
            'name': 'custom browser',
            'platform': 'windows',  # support: windows, mac, linux
            'kernel': 'chromium',  # only support: chromium
            'kernelMilestone': '120',  # support: 113, 115, 118, 120
            'hardwareConcurrency': 4,  # support: 2, 4, 8, 10, 12, 14, 16
            'deviceMemory': 4,  # support: 2, 4, 8
            'proxy': '',  # input format: schema://user:password@host:port eg: http://user:password@localhost:8080
        }
    }
    query = urlencode({
        'x-api-key': api_key,  # required
        'config': quote(json.dumps(config))
    })
    
    url = f'http://{host}:8848/devtool/launch?{query}'
    browser_ws_endpoint = get_debugger_url(url)
    
    print("browser_ws_endpoint: " + browser_ws_endpoint) # pyppeteer通过browser_ws_endpoint来连接Nstbrowser

(
  asyncio
  .get_event_loop()
  .run_until_complete(create_and_connect_to_browser())
)

在成功获取到 Nstbrowser 的 webSocketDebuggerUrl 之后,我们使用 pyppeteer 来连接 Nstbrowser:

Python Copy
async def exec_pyppeteer(wsEndpoint: str):
    browser = await launcher.connect(browserWSEndpoint = wsEndpoint)
    page = await browser.newPage()

在终端运行我们刚才编写的代码:python scraping.py,可以看到我们成功的打开了一个 Nstbrowser,并且在 Nstbrowser 中新创建了一个标签页。

一切准备就绪,现在,我们可以正式开始进行爬虫了。

第二步:访问目标网站

比如:https://www.imdb.com/chart/top

Python Copy
await page.goto('https://www.imdb.com/chart/top')

第三步:执行代码

再执行一次我们的代码,会看到我们通过Nstbrowser访问了我们的目标网站。打开Devtool,查看我们想要爬取的具体信息,你会发现,他们是具有相同dom结构的元素。

执行代码

第四步:爬取网页

我们可以使用pyppeteer对这些dom结构进行爬取,并分析获取他们的内容:

Python Copy
movies = await page.JJ('li.cli-parent')
for row in movies:
    title = await row.J('.ipc-title-link-wrapper')
    year = await row.J('span.cli-title-metadata-item')
    rate = await row.J('.ipc-rating-star')
    
    title_text = await page.evaluate('item => item.textContent', title)
    year_text = await page.evaluate('item => item.textContent', year)
    rate_text = await page.evaluate('item => item.textContent', rate)
    pringt('titile: ', title_text)
    pringt('year: ', title_text)
    pringt('rate: ', title_text)

当然,只在终端对数据进行输出显然不是我们的最终目的,我们要做的是将这些数据保存下来。

第五步:保存数据

我们使用json库,来将这些获取的数据保存到本地的json文件中:

Python Copy
movies = await page.JJ('li.cli-parent')
  movies_info = []
  for row in movies:
    title = await row.J('.ipc-title-link-wrapper')
    year = await row.J('span.cli-title-metadata-item')
    rate = await row.J('.ipc-rating-star')

    title_text = await page.evaluate('item => item.textContent', title)
    year_text = await page.evaluate('item => item.textContent', year)
    rate_text = await page.evaluate('item => item.textContent', rate)

    move_item = {
      "title": title_text,
      "year": year_text,
      "rate": rate_text
    }
    movies_info.append(move_item)

  # create the json file
  json_file = open("movies.json", "w")
  # convert movies_info to JSON
  json.dump(movies_info, json_file)
  # release the file resources
  json_file.close()

运行我们的代码,然后打开代码所在的文件夹,你会看到新出现了一个movies.json文件,打开json文件查看他的内容,如果你发现它的内容是这样的:

运行结果

这说明我们已经成功的使用 pyppeteer 和Nstbrowser爬取了目标网站的数据!

4个解决 Python 爬虫被阻止的技巧

在 Python 中进行网络爬行时,最大的挑战是被阻止。许多网站通过反机器人措施来保护他们的访问,这些措施可以识别并停止自动化应用程序,阻止他们访问页面。

使用Nstbrowser 避免网络封锁和IP封禁
现在开始免费使用

您对网页抓取和 Browseless 有什么好的想法或疑惑吗?
快来看看其他开发人员在 Discord 和 Telegram 上分享了什么!

以下是一些克服反抓取技术的建议:

  1. 轮换 User-Agent:不断更改请求中的 User-Agent 标头有助于模仿不同的 Web 浏览器并避免被检测为机器人。

可以通过修改启动Nstbrowser时的config来修改UA信息:

Python Copy
config = {
    'once': True,
    'headless': False,
    'autoClose': True,
    'remoteDebuggingPort': 9226,
    'userAgent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'fingerprint': {  # required
        'name': 'custom browser2',
        'platform': 'mac',  # support: windows, mac, linux
        'kernel': 'chromium',  # only support: chromium
        'kernelMilestone': '120',  # support: 113, 115, 118, 120
        'hardwareConcurrency': 8,  # support: 2, 4, 8, 10, 12, 14, 16
        'deviceMemory': 2,  # support: 2, 4, 8
    }
}
  1. 在非高峰时段运行:在非高峰时段启动爬网程序并在请求之间加入延迟有助于防止网站服务器不堪重负并触发阻止机制。

  2. 尊重 robots.txt :遵循网站的 robots.txt 指令表明了道德的抓取行为。此外,它还有助于避免访问受限区域并使来自脚本的请求变得可疑。请参阅我们的指南,了解如何读取 robots.txt 进行网页抓取。

  3. 避免蜜罐:并非所有链接都相同,有些链接还隐藏着机器人陷阱。通过关注他们,您将被标记为机器人。详细了解什么是蜜罐以及如何避免它。

然而,这些技巧对于简单的场景来说非常有用,但对于更复杂的场景来说却不够。查看我们更多关于 网站爬取 的完整文章。

绕过所有防御措施并不容易,需要付出很大的努力。另外,今天有效的解决方案明天可能就失效了。但是等等,还有更好的解决方案!

Nstbrowser 通过 Browser Emulation、User-Agent Rotation 等有助于防止网站识别和阻止抓取活动。立即注册免费试用!

3个受欢迎的 Python 网络爬虫工具

有几种有用的网络爬行工具可以使发现链接和访问页面的过程变得更容易。以下是可以为您提供帮助的最佳 Python 网络爬行工具的列表:

  1. Nstbrowser: 提供真实的浏览器指纹。结合先进的网站解锁和机器人绕过技术,并且可以智能轮换IP,极大减少被检测的概率。

  2. Scrapy:适合初学者的最强大的 Python 爬行库选项之一。它提供了一个用于构建可扩展且高效的爬虫的高级框架。

  3. Selenium:一个流行的无头浏览器库,用于网络抓取和爬行。与 BeautifulSoup 不同的是,它可以像人类用户一样与浏览器中的网页进行交互。

结论

通过本篇文章,您一定完全清楚了网络爬行的基础知识。需要指出的是,无论您的爬虫程序有多智能,反机器人程序措施都可以检测并阻止它。

但是,您可以使用 Nstbrowser 摆脱任何挑战,Nstbrowser 是一个具有自动化功能的一体化反检测浏览器,具有 Browser Fingerprinting 、Captcha Solver、UA Rotation 和许多其他避免被阻止的必备功能。

爬行从未如此简单!现在开始使用 Nstbrowser 成为一个网络爬虫大师!

更多
colly 网络爬取
Web Scraping
使用 Colly 在 Golang 中进行网页抓取的步骤
Golang 是最强大的网络爬虫工具之一。而 Colly 在使用 Go 时提供了很大帮助。阅读这篇博文,了解有关 Colly 的最详细的信息,并学习如何使用 Colly 抓取网站。
Sep 30, 2024Carlos Rivera
Java Web 爬虫
Web Scraping
Java 中的 Web 爬虫:分步教程 2024
Java Web 爬虫可轻松帮助完成 Web 抓取和自动化任务。如何使用 Java Web 爬虫进行 Web 抓取?这里有您想要的一切!
Aug 16, 2024Robin Brown
scray, scray vs beautifulsoup
Web Scraping
Scrapy vs Beautifulsoup - 哪一个更适合您?
Scrapy vs BeautifulSoup,有何异同?哪个更适合您?请在本博客中找出答案。
Jul 31, 2024Carlos Rivera
反检测浏览器
Web Scraping
2024 年最适合网页抓取的反检测浏览器
反检测浏览器可帮助你在搜索网页时隐藏浏览器指纹。它能真正简化你的工作。阅读本博客,了解更多信息!
Jul 19, 2024Robin Brown
Urllib, Urllib3, Requests
Web Scraping
Urllib vs Urllib3 vs Requests:在进行网页抓取时,哪一个最适合您?
Urllib、urllib3 和 request 是 3 个出色且常见的 Python 库。这三个库有什么区别?阅读本文,找到最适合您的那个!
Jul 17, 2024Robin Brown
403 禁止错误
Web Scraping
403 禁止错误: 它是什么?如何修复?
403 错误超级烦人!什么是 403 禁止错误?如何解决?请从本篇博客找到答案。
Jul 12, 2024Robin Brown
目录