🥳加入Scrapeless 社区申请免费试用以访问我们强大的网页抓取工具包!
返回博客

2025年Python网络爬虫

Emily Chen
Emily Chen

Advanced Data Extraction Specialist

22-Jan-2025

随着对数据驱动决策需求的不断增长,开发人员正在转向使用Python工具(如Beautiful Soup、Scrapy和Selenium)进行网络爬取,以便高效地从静态和动态网页中提取信息。在本循序渐进的教程中,您将学习如何使用Requests和Beautiful Soup等流行库来抓取所需的数据。

什么是网络爬取

网络爬取,其核心是自动从网站提取大量数据的过程。与传统的数据收集方法不同,网络爬取利用代码与网页交互,模拟人类浏览网站的方式,但效率和速度要高得多。Python凭借其丰富的库生态系统(如BeautifulSoup、Scrapy和Selenium),由于其易用性和灵活性,已成为最流行的网络爬取语言之一。

网络爬取的主要目标是将非结构化网页数据(通常以HTML或JavaScript格式存在)转换为结构化格式,如CSV、JSON或数据库,然后可以对其进行分析或集成到各种应用程序中。此过程对于电子商务、金融、市场研究和SEO等行业尤其有用,在这些行业中,提取和分析竞争对手数据、跟踪价格趋势或收集大型数据集对于决策至关重要。

Python网络爬取101

网络爬取是从网络提取公开可用数据的必备技能,而Python是最流行的语言之一。在Python网络爬取中,您通常首先向网站发送HTTP请求,检索HTML内容,然后对其进行解析以提取所需的数据。

以下是涉及的基本步骤:

1. 发送请求

要开始抓取,您首先需要向目标网站发送请求。这通常使用Python中的Requests库完成,该库向Web服务器发出HTTP请求。

import requests Copy
url = 'https://example.com'
response = requests.get(url)
print(response.content)

2. 解析数据

检索到网页后,下一步是解析HTML内容以提取相关数据。

from bs4 import BeautifulSoup Copy
soup = BeautifulSoup(response.content, 'html.parser')
title = soup.title.string
print(title)

3. 处理动态内容

许多现代网站依赖JavaScript动态加载内容,这意味着您想要的数据可能不会出现在初始HTML源代码中。对于这些情况,Selenium是一个很好的工具,因为它模拟真实的浏览器并可以与动态页面交互。

from selenium import webdriver Copy
driver = webdriver.Chrome()
driver.get('https://example.com')
content = driver.page_source

通过这几个步骤,您就可以开始基本的网络爬取了。接下来,我们将为您详细介绍:如何使用Python一步一步地抓取网站。

如何使用Python一步一步地抓取网站

要使用Python构建数据抓取工具,您需要下载并安装以下工具。

  1. Python:https://www.python.org/downloads/ 这是运行Python的核心软件。您可以从官方网站下载所需的版本,如下图所示。但是,建议不要下载最新版本。您可以下载最新版本之前的1-2个版本。
    python

  2. Python IDE:任何支持Python的IDE都可以,但我们推荐PyCharm,这是一个专门为Python设计的IDE开发工具。对于PyCharm版本,我们推荐免费的PyCharm Community Edition。
    Python IDE

  3. Pip:您可以使用Python包索引,通过单个命令安装运行程序所需的库。

**注意:**如果您是Windows用户,请不要忘记在安装向导中选中“将python.exe添加到PATH”选项。这将允许Windows在终端中使用Python和命令。由于Python 3.4或更高版本默认包含它,因此您无需手动安装它。

install python

通过以上步骤,使用Python爬取数据的环境已经搭建完毕。接下来,我们可以使用我们安装的pycharm来爬取网站上的数据。

**步骤1:**启动PyCharm,并在菜单栏中选择文件>新建项目...。

Start PyCharm and select File

**步骤2:**然后,在弹出的窗口中,从左侧菜单中选择纯Python,并按照如下所示设置您的项目:

注意:在下面的红色框中,选择您在环境配置的第一步中下载的Python安装路径。

select Pure Python from the left menu

**步骤3:**您可以创建一个名为python-scraper的项目,选中在文件夹中创建main.py欢迎脚本的选项,然后单击创建按钮。PyCharm设置项目一段时间后,您应该会看到如下内容:
create a project called python-scraper

**步骤4:**然后,右键单击以创建一个新的Python文件。
click to create a new Python file

目前,我们爬取数据的环境已经搭建好了。下一步是如何在网页上爬取我们需要的数据。

1. 在实际爬取数据之前,我们必须先做一些准备工作,例如了解URL,观察参数等等,我们可以利用浏览器的内置开发者工具来学习和练习这些要点。我们以亚马逊为例,来爬取某个商品的价格以及我们需要的其他一些数据。

https://www.amazon.com/s?k=computer&page=3 Copy

您可以将它们分解成两个主要部分:

  • 基本URL:网站商店部分的路径。这里它是https://www.amazon.com/s?k=computer&page=3。
  • 特定页面位置:特定产品的路径。URL可能以.html、.php结尾,或者根本没有扩展名。
    基本URL对于网站上的所有产品都是相同的。每个页面之间的区别在于URL的后半部分,其中包含一个字符串,该字符串指定服务器应返回哪个产品页面。通常,相同类型页面的URL总体上具有相似的格式。

此外,URL还可以包含额外信息:

换句话说,URL不仅仅是HTML文档的简单位置字符串。它们还可以包含服务器可用于运行查询并使用特定数据填充页面的参数信息。

在示例中,3是路径参数,而cpmputer是搜索查询的值。此URL将指示服务器运行分页搜索查询并获取包含字符串cpmputer的所有结果,然后仅返回第三页的结果。

2. 现在您熟悉了该网站。下一步是深入研究页面的HTML代码,研究其结构和内容,以了解如何从中提取数据。

所有现代浏览器都带有一套高级开发工具,并且大多数工具都提供相同的功能。这些工具使您可以浏览网页的HTML代码并使用它。在本Python网络爬取教程中,您将看到Chrome的DevTools正在运行。

右键单击HTML元素并选择“检查”以打开DevTools窗口。如果网站禁用了右键单击菜单,请执行以下操作:

  • 在macOS上:在菜单栏中选择“查看”>“开发者”>“选择开发者工具”。
  • 在Windows和Linux上:单击右上角的⋮菜单按钮,然后选择“更多工具”>“开发者工具”选项。

它们允许您检查网页的文档对象模型(DOM)的结构。这反过来可以帮助您更深入地了解源代码。在DevTools部分,输入选项“元素”以访问DOM。

在亚马逊上,打开开发者工具后,我们点击上图所示的“元素”,然后使用“元素”左侧的箭头点击页面上任何我们想要获取数据的地方。这样,“元素”中的HTML源代码就会显示我们需要的数据位置。然后我们可以根据它所在的标签来爬取数据。

如果您难以理解DOM和HTML之间的区别:

  • HTML代码表示开发人员编写的Web文档的内容。
  • DOM是由浏览器创建的HTML代码的动态内存表示。在JavaScript中,您可以操作页面的DOM来更改其内容、结构和样式。

3. 假设您想从以下位置爬取数据:

示例

https://www.amazon.com/s?k=computer&page=3 Copy

首先,您需要检索目标页面的HTML代码。换句话说,您必须下载与页面URL关联的HTML文档。为此,请使用Python requests库。
在PyCharm项目的终端选项卡中,启动以下命令以安装requests:

终端

Copy
pip install requests

打开scraper.py文件并使用以下代码行对其进行初始化:

scrape.py

import requests# 下载HTML文档# 使用HTTP GET请求 Copy
response = requests.get("https://www.amazon.com/s?k=computer&page=3")# 打印HTML代码print(response.text)

此代码片段导入requests依赖项。然后,它使用get()函数对目标页面URL执行HTTP GET请求,并返回包含HTML文档的响应的Python表示形式。

您还可以通过在此处直接粘贴页面的请求URL来获取完整的Python请求代码:https://curlconverter.com/python/

import requests Copy
cookies = {
    'session-id': '140-2992726-6859939',
    'session-id-time': '2082787201l',
    'i18n-prefs': 'USD',
    'ubid-main': '132-6184525-8448226',
    'lc-main': 'en_US',
    'skin': 'noskin',
}

headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'accept-language': 'en-US,en;q=0.9',
    'cache-control': 'no-cache',
    'device-memory': '8',
    'downlink': '1.5',
    'dpr': '1',
    'ect': '3g',
    'pragma': 'no-cache',
    'priority': 'u=0, i',
    'rtt': '300',
    'sec-ch-device-memory': '8',
    'sec-ch-dpr': '1',
    'sec-ch-ua': '"Not A(Brand";v="8", "Chromium";v="132", "Google Chrome";v="132"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'sec-ch-ua-platform-version': '"10.0.0"',
    'sec-ch-viewport-width': '1070',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'none',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36',
    'viewport-width': '1070',
}

params = {
    'k': 'computer',
    'page': '3',
}

response = requests.get('https://www.amazon.com/s', params=params, cookies=cookies, headers=headers)

print(response.text)

在pycharm中,在代码末尾添加print(response.text)。运行代码后,您将获得如下所示的HTML页面代码。

add print(response.text) at the end of the code

⚠️ **常见错误:**忘记错误处理逻辑!

对服务器的GET请求可能会由于多种原因而失败。服务器可能暂时不可用,URL可能错误,或者您的IP可能已被阻止。因此,您可能希望如下处理错误:

response = requests.get("https://www.amazon.com/s?k=computer&page=3")
如果响应为2xx
if response.ok:此处为抓取逻辑...
else:记录错误响应
如果为4xx或5xx
print(response)

这样,如果请求出错,脚本就不会崩溃,而只会继续处理2xx响应。

4. 使用Beautiful Soup解析HTML内容

在之前的步骤中,您从服务器检索了HTML文档。如果您查看它,您会看到很长的一串代码,而理解它的唯一方法是通过HTML解析来提取所需的数据。

Beautiful Soup是一个用于解析XML和HTML内容的Python库,它提供了一个API来浏览HTML代码。换句话说,它允许您选择HTML元素并轻松地从中提取数据。

要安装该库,请在终端中启动以下命令:

Copy
pip install beautifulsoup4

然后,使用它来解析以这种方式检索到的内容请求:

import requests Copy
from bs4 import BeautifulSoup
from bs4 import BeautifulSoup


# 下载目标页面
response = requests.get("https://www.amazon.com/s?k=computer&page=3")

# 解析页面的HTML内容
soup = BeautifulSoup(response.content, "html.parser")

BeautifulSoup()构造函数接受一些内容和一个指定要使用的解析器的字符串。“html.parser”指示Beautiful Soup使用HTML解析器。

⚠️ **常见错误:**将response.text而不是response.content传递给BeautifulSoup()。

content对象的属性以响应的原始字节形式保存HTML数据,这比存储在text属性中的文本表示更容易解码。为了避免字符编码问题,最好使用response.content。

response.textBeautifulSoup()

需要注意的是,网站包含多种格式的数据。单个元素、列表和表格只是一些例子。如果您希望您的Python抓取工具有效,则需要了解如何在许多情况下使用Beautiful Soup。

如下图所示,在我们搜索的数据中,如果我们想获取某个商品的数据信息,可能需要从父标签一层一层地解析,然后获取价格、商品名称等。

[图片]

Beautiful Soup提供了各种方法来从DOM中选择HTML元素,其中id字段是选择单个元素最有效的方法。顾名思义,id字段唯一标识页面上的HTML节点。但这也要取决于我们想要爬取的网站的HMTL页面的设计。如果没有id,那么我们可能需要通过尽可能唯一的内容来获取我们需要的数据。

上图中的data-asin属性表示产品的唯一代码。结合role属性,我们可以获取到HTML中对应这个商品的代码:

Copy
target_div = soup.find('div', attrs={'data-asin': 'B0DJXW94BL', 'role': 'listitem'})

如果您有一个带有id的标签,您可以编写如下代码:

Copy
product_search_element = soup.find(id="woocommerce-product-search-field-0")

我们使用“find()”查找标签以获取所需的数据。“find()”方法的详细用法如下:

  • 通过标签:不带参数使用find()函数:

scraper.py

Copy
# 获取页面上的第一个<h1>元素
h1_element = soup.find("h1")
  • 通过类:通过class_参数使用find()

scraper.py

Copy
# 查找页面上第一个具有“search_field”类的元素
search_input_element = soup.find(class_="search_field")
  • 通过属性:通过attrs参数使用find()

scraper.py

Copy
# 查找页面上第一个具有name="s" HTML属性的元素
search_input_element = soup.find(attrs={"name": "s"})

您还可以使用CSS选择器和select():select_one()检索HTML节点

Copy
# 查找由“input.search-field”CSS选择器标识的第一个元素
search_input_element = soup.select_one("input.search-field")

在文本内容HTML元素上,使用get_text()方法提取其文本:

Copy
h1_title = soup.select_one(".beta.site-title").getText()
print(h1_title)

⚠️ **常见错误:**不检查None。

当find()和select_one()找不到所需的元素时,它们会返回None。由于页面会随着时间的推移而发生变化,因此您应该始终执行非None检查,如下所示:

Copy
product_search_element = soup.find(id="woocommerce-product-search-field-0")
# 确保product_search_element存在于页面上,然后才能访问其数据
if product_search_element is not None:
    placeholder_string = product_search_element["placeholder"]

上面的例子让我们找到了某个商品的HTML代码。如果我们想要返回更精确的数据,例如商品标题,我们可以使用同样的方法先找到商品标题所在的标签,然后从我们刚刚获得的商品信息子标签中获取。


通过观察商品标题在“span”标签中,我们可以通过获取刚刚获得的商品信息下的“h2”标签下的“span”标签来获取标题文本数据:

Copy
if target_div:
   
    a_tags = target_div.find_all('a')
    

    for a_tag in a_tags:
        h2_tag = a_tag.find('h2')  
        if h2_tag:
            span_tag = h2_tag.find('span') 
            if span_tag:
                print(span_tag.get_text()) 
else:
    print("No matching div found.")

注意:在不同的网页中可能有多个“a”、“h2”以及其他类似的标签元素,所以在使用它们的时候最好使用一些比较独特的标签属性来获取数据。

以上是一个关于如何使用Python爬取网页数据的小型演示。如果您想更熟练并更准确地获取相关数据,可能需要大量的练习,否则可能只会浪费我们自己的时间。

一个更简单的爬取方法推荐:Scrapeless Scraping API

虽然使用Python进行抓取是一种灵活而强大的方法,但它通常需要编写大量代码并处理复杂的技术细节。对于那些想要简化抓取过程的人来说,Scrapeless Scraping API提供了一个更方便的解决方案。

  • 🚀 通过AI驱动的功能,Scrapeless允许用户轻松提取公共数据,无需编写复杂的代码或处理代理和IP管理等问题。

  • 🌍 无论您需要访问超过8000万个真实IP还是私有数据中心IP,Scrapeless都可以提供高效可靠的数据抓取服务。

  • ⚡ 其简单的API接口使得集成非常容易,用户可以通过简单的配置快速启动抓取任务,节省大量的开发时间和精力。

对于想要避免传统抓取方法复杂性的用户来说,Scrapeless无疑是一个值得推荐的更方便的选择。

如何使用Scrapeless Scraping API进行数据提取:

步骤1. 登录Scrapeless Dashboard并转到“亚马逊”。

步骤2. 根据您的抓取需求,输入相应的URL并设置相应的Action,然后点击开始抓取。

步骤3. 获取抓取结果并导出。

您可能还需要:
如何使用Python抓取Google趋势数据?
如何在Python中使用BeautifulSoup进行网络爬取
如何抓取亚马逊搜索结果数据:2025年Python指南

将Scrapeless无缝集成到您的项目中

如果您需要将Scrapeless集成到您的项目中,您也可以点击查看完整文档

产品

Copy
import http.client
import json

conn = http.client.HTTPSConnection("api.scrapeless.com")
payload = json.dumps({
   "actor": "scraper.amazon",
   "input": {
      "url": "https://www.amazon.com/dp/B0BQXHK363",
      "action": "product"
   }
})
headers = {
   'Content-Type': 'application/json'
}
conn.request("POST", "/api/v1/scraper/request", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))

卖家

Copy
import http.client
import json

conn = http.client.HTTPSConnection("api.scrapeless.com")
payload = json.dumps({
   "actor": "scraper.amazon",
   "input": {
      "url": "",
      "action": "seller"
   }
})
headers = {
   'Content-Type': 'application/json'
}
conn.request("POST", "/api/v1/scraper/request", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))

关键词

Copy
import http.client
import json

conn = http.client.HTTPSConnection("api.scrapeless.com")
payload = json.dumps({
   "actor": "scraper.amazon",
   "input": {
      "action": "keywords",
      "keywords": "iPhone 12",
      "page": "5",
      "domain": "com"
   }
})
headers = {
   'Content-Type': 'application/json'
}
conn.request("POST", "/api/v1/scraper/request", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))

使用Python进行网络爬取的最佳实践

使用Python进行网络爬取需要在效率、道德和法律合规之间取得平衡。以下是Python网络爬取项目的一些最佳实践:

1. 尊重网站的服务条款和robots.txt文件

网络爬取最重要的方面之一是尊重网站的服务条款和robots.txt文件。在抓取之前始终检查这些文件,以确保您没有违反网站的规则。这有助于您避免法律问题,并确保您的抓取活动符合网站的指南。

2. 最大限度地减少对网站服务器的负载

另一个最佳实践是最大限度地减少对网站服务器的负载。过于积极地抓取数据可能会使服务器不堪重负,从而对网站的性能产生负面影响,并可能导致被阻止。在使用网络爬取Python工具时,请实施速率限制和爬取延迟等技术,以确保您的抓取活动不会造成中断。

3. 确保您收集的数据以符合道德和安全的方式进行处理

最后,确保您收集的数据以符合道德和安全的方式进行处理。数据隐私比以往任何时候都更加重要,尊重您收集数据的用户的隐私至关重要。采用符合道德的网络爬取Python实践,不仅可以使您的运营符合规定,还可以建立行业内的信任。确保以安全的方式存储和处理数据,并遵守GDPR等隐私法规。

高级网络爬取技术

随着网站变得越来越动态以及反爬取技术的不断升级,2025年的网络爬取技术需要开发人员掌握一系列高级技能,以确保在应对法律和道德挑战的同时提高效率。以下是现代网络爬取的几种高级技术:

  1. 使用浏览器模拟和自动化技术

许多网站现在使用浏览器自动化技术来增强用户体验,这也给数据抓取带来了新的挑战。例如,通过模拟用户行为来绕过某些反抓取措施。使用Puppeteer或Playwright等浏览器自动化工具可以模拟用户交互,这对于抓取需要交互的内容(例如验证码或登录流程)尤其有用。与传统的静态网页抓取方法相比,这项技术能够更好地应对现代网站的复杂性。

  1. 利用代理池和IP轮换

在大规模抓取项目中,防止被目标网站封锁是一个长期存在的挑战。为了避免IP被封,开发者通常使用代理池,通过轮换多个IP来绕过反抓取机制。使用Scrapeless这样的自动化平台可以帮助管理大量的代理,降低IP被封的风险,并确保数据抓取的稳定性。

  1. AI驱动的智能数据提取

人工智能正在推动数据抓取技术向前发展。AI不仅可以帮助识别和提取特定数据点,还可以识别复杂页面中的图像、文本和结构化数据。机器学习算法可以用于图像识别和情感分析,以提高抓取的精度和准确性。

  1. 使用API提高抓取效率

对于许多公司来说,使用专业的爬虫API是简化数据抓取过程的有效方法。Scrapeless等API可以提供强大的代理管理验证码绕过和IP轮换功能,可以有效减少人工管理的负担,同时提高数据抓取的成功率。

总而言之,2025年的网页抓取技术需要将传统的抓取工具与更先进的技术相结合,以应对动态网站、大规模数据提取和反爬虫技术的挑战。使用Scrapeless这样的API解决方案可以使抓取过程更高效、更可靠、更具可扩展性,帮助开发者节省时间并降低技术难度。

使用Scrapeless进行网页抓取——只需3分钟
无需再费心处理复杂的配置和反抓取措施。使用Scrapeless,您可以轻松管理代理绕过验证码,并轻松扩展您的抓取项目。开始体验比以往更可靠、更快速、更安全的数据提取。立即试用Scrapeless,将您的网页抓取提升到一个新的水平!

关于使用Python进行网页抓取的常见问题

1. 网页抓取合法吗?

网页抓取的合法性取决于多种因素,包括网站的服务条款和当地法律。在抓取之前,务必查看网站的robots.txt文件及其可接受的使用策略,以确保遵守规定。未经授权的抓取可能导致法律后果,因此最好以道德的方式进行。
此外,使用Scrapeless等工具可以确保在抓取过程中遵守道德和法律标准。

2. 网页抓取的主要挑战是什么?

网页抓取可能会带来一些挑战,包括处理反抓取措施(如验证码、IP封锁和动态内容加载)。网站也可能具有复杂的结构,这使得数据提取变得困难。

3. 如何在抓取网站时处理验证码?

许多网站使用验证码来防止自动化抓取。为了绕过验证码,您可以集成验证码求解服务或使用Selenium等工具来模拟类似人类的行为。但是,为了获得更简化的体验,Scrapeless等平台通常提供自动管理验证码的功能,从而降低了抓取此类网站的复杂性。

结论:使用Python进行网页抓取

随着对网页抓取的需求激增,使用Python进行网页抓取仍然是最重要的途径之一。

然而,由于更先进的反机器人措施导致抓取变得越来越复杂,对更智能、更高效的解决方案的需求显而易见。这就是Scrapeless等工具发挥作用的地方。通过利用Scrapeless的尖端抓取API,您可以简化抓取过程,绕过验证码,并避免通常会减慢手动编码速度的常见障碍。使用Scrapeless,您可以以最小的努力扩展您的抓取项目,同时保持较高的数据准确性。

不要让抓取挑战拖慢您的速度——立即探索Scrapeless,并将您的网页抓取提升到一个新的水平。

想要简化您的网页抓取过程?

立即开始使用Scrapeless!享受免费试用,并了解我们强大的工具如何为您节省时间和精力。无需编码技能——只需高效、轻松的抓取!

🚀立即开始免费试用

在Scrapeless,我们仅访问公开数据,同时严格遵守适用的法律、法规和网站隐私政策。 本博客内容仅用于演示目的,不涉及任何非法或侵权行为。 对于使用本博客或第三方链接的信息,我们不做任何保证,也不承担任何责任。 在参与任何抓取活动之前,请咨询您的法律顾问并查看目标网站的服务条款或获取必要的权限。

最受欢迎的文章

目录