in

使用Python进行网页爬取:一切你需要知道的!

Python 网页爬取:完整指南与教程

使用Python进行网页爬取

完整的Python 网页爬取介绍性指南以及分步教程。

在机器学习和数据分析领域,Python 无疑是首选语言。但除此之外,Python 还是网络数据抓取的强大工具。掌握这项技能不仅能丰富你的技能树,还可能为你开辟新的盈利渠道。

这篇指南旨在帮助你入门 Python 网页爬取。我们会告诉你为什么选择 Python,以及如何利用 Python 的库和工具实践爬虫。接下来,我们将提供一个实战教程,指导你如何从头开始构建一个网络爬虫。让我们开始吧!

什么是 Python 网页爬取?

网络爬取是指从网页下载数据并将其结构化以供进一步分析的过程 。可以手动爬取,但编写一个自动化脚本来为您完成此操作要快得多。

简单地说,网页爬取就是从网站上下载数据并将其结构化,以便于后续分析。虽然可以手动进行,但使用自动化脚本会更高效。而你看到的网页内容并不是真实的数据来源,实际上,你是在抓取其背后的 HTML 代码。想要深入了解可以在任何网页上点击鼠标右键选择“检查”。

Python 提供了一系列的库和框架,使得数据的定位、下载和整理(即爬取)变得简单。

为何选择 Python 进行网页爬取

你可能会问,为什么要选择 Python,而不是其他编程语言?以下是一些原因:

  • 易于理解:Python 的语法直观易懂,无需额外编译即可进行测试。
  • 强大的爬虫工具:Python 拥有众多专为数据抓取设计的库,例如下载量巨大的 Requests。
  • 活跃的社区:无论是在 Stack Overflow 还是其他平台,你都可以轻松地找到帮助或解决方案。
  • 与数据分析完美结合:Python 可以与诸如 Pandas、Matplotlib 的数据分析库以及 Tensorflow、PyTorch 等机器学习库完美配合。

当然,这并不意味着 Python 是唯一的选择。Node.js、Java、PHP 甚至 cURL 都可以用于网页爬取。但对于初学者,Python 绝对是最佳选择。

构建 Python 网络爬虫的步骤

假设你想要创建一个 Python 网络爬虫,应该从哪里开始呢?以下三个步骤会指引你前进。

  1. 选择网页爬取库:Python 有很多爬虫库可供选择。但如果你是初学者,我建议从 Requests 和 Beautiful Soup 开始。Requests 可以轻松下载页面,而 Beautiful Soup 则帮助你解析和提取数据。
  2. 规划你的爬取项目:确定你想要爬取的目标和参数。你可以选择专为爬虫设计的模拟网站进行练习,或者选择真实的目标进行爬取,但记住,始终遵循网络爬虫的最佳实践。
  3. 编写脚本:最后,是时候开始编写你的爬虫代码了。选择你熟悉的代码编辑器,然后开始编写。

Python 网页爬取实战教程

想象一下,你运营一家在线书店。你的主要竞争对手在 books.toscrape.com 销售书籍,你希望了解更多关于他们目录的信息。为了这个目标,我们将构建一个简单的网络爬虫,从该网站上收集书籍的标题、价格、评级和库存情况,并将这些信息保存到 CSV 文件中。

先决条件

  • 安装 Python 3
  • 使用 pip 安装 Beautiful Soup 和 Requests

构建 Python Web Scraper 的步骤(教程

假设您想编写一个 Python 网络爬虫。你从哪里开始?这三个步骤应该会让您走上正轨。

第一步:选择您的网页爬取库

from bs4 import BeautifulSoup
import requests
import csv

Python 网络爬取库并不缺乏。但如果这是您的第一个网络爬取项目,我强烈建议从RequestsBeautiful Soup开始。

Requests 是一个 HTTP 客户端,可让您下载页面。基本配置只需要几行代码,您可以在很大程度上自定义请求,在转向更复杂的目标时添加标头、cookie 和其他参数。

Beautiful Soup 是一个数据解析库 – 它从您下载的 HTML 代码中提取数据并将其转换为结构化格式。Beautiful Soup 的语法很容易掌握,而该工具本身功能强大,文档齐全,并且对初学者来说很宽松。

一旦掌握了前两个的窍门,您还应该学习使用无头浏览器库。随着 Web 开发人员实现 JavaScript 框架并构建动态单页应用程序,它们变得越来越必要。尽管并不完美,但由于Selenium的流行,它是一个很好的入门库。

最后,当您扩大项目范围时,您应该考虑代理。他们通过为您提供更多 IP 地址来提供避免封锁的最简单方法。首先,您可能会考虑免费的代理列表(因为它是免费的!),但我建议投资付费轮换代理

第二步:设计一个网页爬取项目

第二步是决定您的网络爬取目标和项目参数。

如果您心中没有业务用例,则可能很难找到有价值的想法。我建议使用虚拟网站进行练习。它们是专门为刮擦而设计的,因此您将能够在安全的环境中尝试各种技术。您可以在我们的网站列表中找到几个此类网站来练习您的网络爬取技能

如果您想爬取真正的目标,那么从简单的事情开始是个好主意。谷歌和亚马逊等热门网站提供了有价值的信息,但一旦开始扩展,您就会遇到严峻的网络爬取挑战,例如验证码。如果没有经验,他们可能很难应对。

无论如何,您应该遵循一些准则以避免出现麻烦。尽量不要让服务器超载。并且在登录后爬取数据时要非常谨慎——这已经导致多家公司被起诉。您可以在我们有关网络爬取最佳实践的文章中找到更多建议。

最后,您的项目至少应具有以下基本参数:目标网站、您想要从中爬取的 URL 列表以及您感兴趣的数据点。

第三步:编写脚本

最后,是时候开始编写你的爬虫代码了。选择你熟悉的代码编辑器,然后开始编写。

Python 网页爬取实战教程

想象一下,你运营一家在线书店。你的主要竞争对手在 books.toscrape.com 销售书籍,你希望了解更多关于他们目录的信息。

为了这个目标,我们将构建一个简单的网络爬虫,从该网站上收集书籍的标题、价格、评级和库存情况,并将这些信息保存到 CSV 文件中。

我们需要的工具是:

    • Python 3(如果您的计算机上尚未安装),然后使用 Pip安装必要的库。
    • BeautifulSoup。您可以通过pip install
    • Requests。您可以通过运行来添加它pip install requests

导入必要的库

我们需要做的第一件事是导入RequestsBeautiful Soup

from bs4 import BeautifulSoup
import requests

我们还需要一个库来将爬取的数据添加到 CSV 文件中:

import CSV

下载页面内容

现在,是时候下载页面了。Requests库让这一切变得简单——我们只需要编写两行代码:

url = "http://books.toscrape.com/"
r = requests.get(url)

有些网站可能不会让您如此轻松地摆脱 – 您可能需要发送不同的用户代理并跳过其他环节。但现在让我们保持简单。

提取相关数据点

假设我们要提取所有书的标题。

titles = []

for book in soup.find_all("h3"):
    title = book.a["title"]
    titles.append(title)

print(titles)

提取更多的数据

除了标题,我们还希望提取每本书的价格和评级。

books_data = []

for book in soup.find_all("li", class_="col-xs-6"):
    title = book.h3.a["title"]
    price = book.select_one("p.price_color").text
    rating = book.p["class"][1]
    books_data.append({"title": title, "price": price, "rating": rating})

print(books_data)

数据存储

我们可以将抓取的数据存储到 CSV 文件中。

import csv

with open('books.csv', 'w', newline='') as csvfile:
    fieldnames = ['title', 'price', 'rating']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for book in books_data:
        writer.writerow(book)

 

总结 Python 网页爬取工具和库

  1. Requests:这是一个用于发送 HTTP 请求的库。使用它,你可以轻松下载网页内容。
  2. Beautiful Soup:这是一个用于解析 HTML 和 XML 文档的库。它帮助你从网页中提取所需的数据。
  3. Scrapy:这是一个开源的爬虫框架,允许你编写用于爬取网站的爬虫代码,它也提供了大量的功能,如数据存储、请求中间件等。

这是完整的 Python 网页爬取代码:

import requests
from bs4 import BeautifulSoup
import csv

# 定义目标网址
url = "http://books.toscrape.com/"
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')

# 从网页中提取数据
books_data = []
for book in soup.find_all("li", class_="col-xs-6"):
    title = book.h3.a["title"]
    price = book.select_one("p.price_color").text
    rating = book.p["class"][1]
    books_data.append({"title": title, "price": price, "rating": rating})

# 将数据保存到 CSV 文件中
with open('books.csv', 'w', newline='', encoding='utf-8') as csvfile:
    fieldnames = ['title', 'price', 'rating']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for book in books_data:
        writer.writerow(book)

运行上述代码后,你将得到一个名为 books.csv 的文件,其内容如下:

title,price,rating
A Light in the Attic,£51.77,Three
Tipping the Velvet,£53.74,One
Soumission,£50.10,One
Sharp Objects,£47.82,Four
...

illustration of a CSV table named'books.csv' with headers'title','price', and'rating'. The table contains several rows with sample book data such as'A Light in the Attic','£51.77','Three' and other similar rows.

这只是一个简单的示例,从 http://books.toscrape.com/ 网站的首页提取了书的标题、价格和评级。你可以根据需要进一步完善和扩展这个爬虫。希望这可以帮助到你!

注意事项

  • 尊重 robots.txt:大多数网站都有一个 robots.txt 文件,它指定了哪些页面可以爬取,哪些页面不可以。始终遵循该文件的指示。
  • 限制请求速度:不要频繁地向同一网站发送请求,这可能会导致你的 IP 地址被封禁。
  • 模拟浏览器行为:有些网站可能会屏蔽爬虫。为了绕过这些限制,你可以在请求头中设置 User-Agent 来模拟浏览器行为

下一步

您阅读相关的教程:

使用Beautiful Soup爬取多个页面

分步教程展示了如何获取多个页面的 URL 并爬取它们。

获取个别书籍的信息也很有用。为什么不尝试爬取它们呢?它需要从表中提取数据;这是另一个可以帮助您的教程。

使用 Beautiful Soup 从表中提取数据

显示如何从表中爬取数据的分步指南。

blank

Written by 爬取 大师

阿里P12级别选手,能够突破各种反爬, 全能的爬取大师,擅长百万级的数据抓取!没有不能爬,只有你不敢想,有爬取项目可以联系我邮箱 [email protected] (带需求和预算哈, 不然多半不回复)