原文:
www.kdnuggets.com/2022/10/beginner-guide-web-scraping-python.html
图片来自 jemastock 来自 Freepik
有时需要从网站上收集大量信息,以便用于各种目的。这就是网页抓取,可以通过多种方式实现。一个有效的网页抓取方法是使用一种名为 Python 的编程语言。
1. Google 网络安全证书 - 快速进入网络安全职业生涯。
2. Google 数据分析专业证书 - 提升您的数据分析技能
3. Google IT 支持专业证书 - 支持您组织的 IT 需求
本文作为使用 Python 进行网页抓取的初学者指南,介绍了可以使用的不同框架和方法,内容简单明了。
网页抓取是从网站提取数据(主要是非结构化数据),通常是大量的数据。收集后,这些信息被导出为可用的结构化格式,如电子表格或应用程序编程接口(API)。
对于小型数据集,可以手动完成;然而,处理大量数据最好使用自动化系统,因为这更快且成本更低。
对于网页抓取没有一刀切的方法,因为所有网站的规模和形式各不相同。每个网站可能会提供各种需要克服的障碍,如验证码挑战测试,这就是为什么网页抓取工具需要非常多才多艺的原因。
网页抓取器可以用于多种用途。以下是一些最受欢迎的用途:
-
比价购物网站
-
房地产列表
-
潜在客户生成
-
显示行业特定的统计数据和见解
-
当前股票价格、加密货币价格和其他财务数据
-
来自 eBay 和 Amazon 等网站的产品数据
-
赌博网站和幻想联盟的体育统计数据
与任何网络项目一样,遵守法律法规非常重要。这不仅可以避免任何法律行动,还可以确保你的系统更好地防范黑客和网络犯罪。务必确保你遵循良好的数字公民实践,如保护隐私、定期更换密码以及报告你在网上遇到的任何非法活动。
Python 是一种通用计算机编程语言,可以用于各种任务,从构建网站和软件到自动化特定任务甚至机器学习。它与几乎任何类型的程序兼容,并不是为了单一目标而开发的。
你应该选择 Python 进行网络爬虫项目的原因有五个。
Python 拥有大量可以用于你项目的库(库是任何人都可以用来包含在自己程序中的代码段)。Python 库包括 pandas、Matplotlib、Numpy 等等。
这些库可以用于许多不同的功能,非常适合数据处理和网络爬虫项目。
Python 是最简单的编程语言之一,因为它不使用分号和大括号等符号,使代码不那么复杂。
Python 可以是动态类型的,这意味着你不需要为 Python 中的变量定义任何数据类型。相反,你可以在需要时插入它们,使过程更加快捷。
网络爬虫的目标是节省时间并快速收集数据,但如果编写代码的过程很长,这个目标也没多大意义。然而,Python 是精简的,只需少量代码即可实现用户的目标。
与其他编程语言相比,Python 语法(决定代码如何编写的规则)非常简单易学。每个范围或块在代码中都很容易区分,这使得即使是初学者也能轻松跟随。
在本节中,我们将讨论一些可以帮助构建网络爬虫程序的框架。接下来,我们将展示如何抓取一个电子商务网站的示例方法。
当使用 Python 进行网络爬虫时,程序可以使用三个框架。这些框架是 Beautiful Soup、Scrapy 和 Selenium。
-
Beautiful Soup - Beautiful Soup 框架用于解析 XML 和 HTML 文件以提取数据。在抓取网站时,必须使用 requests 库发送网站请求并接收响应。然后提取 HTML 并传递给 Beautiful Soup 对象进行解析。
-
Scrapy - Scrapy 是 Python 使用的顶级 网络爬虫和抓取框架之一,能够有效地爬取网站并提取结构化数据。它可用于许多任务,包括数据挖掘、网站监控和自动化测试。Scrapy 专注于 HTML,通过简单地指定一个 URL 来工作。
-
Selenium - Selenium 框架抓取加载动态内容的网站(例如 Facebook、Twitter 和其他社交媒体网站)。它也可以抓取需要登录或注册的网站。
注意!除了上述框架外,你还应该了解数据分析和处理库 Pandas。这个库用于提取数据并将其保存为用户首选的格式。
对于这种方法,你需要:
-
Ubuntu 操作系统
-
Google Chrome 浏览器
-
安装了 Selenium、Pandas 和 Beautiful Soup 库的 Python 2+ 或 3+。
第一步是找到你想抓取的页面/页面的 URL。在这个例子中,我们将抓取一个最大的电子商务网站,以提取智能手机的价格、名称和评级。
接下来,你应该检查你选择的页面并查看其页面源代码。你寻找的数据通常会在标签内,因此你必须首先确定你想抓取的信息在页面代码中的位置。
在 Google Chrome 中,右键点击网页中的任何元素并点击检查。然后你可以查看页面元素。要查找你的 数据位置,通过右键点击图像或价格然后选择‘查看页面源代码’。
搜索页面源代码以提取你想要的数据。在这种情况下,评级、名称和价格信息将嵌套在“div”标签中。
现在,是时候使用 Python 开发代码了。为此,首先打开 Ubuntu 终端并输入:gedit your file name> 的 .py 扩展名。我们将文件命名为‘web scrape’;因此,命令是:
1. 现在,是时候使用 Python 开发代码了。为此,首先打开 Ubuntu 终端并输入:gedit your file name> 的 .py 扩展名。我们将文件命名为‘web scrape’;因此,命令是:
gedit web-scrape.py
2. 使用以下命令提取所需的库:
from selenium import webdriver
from BeautifulSoup import BeautifulSoup
import pandas as pd
3. 确保你安装了 Python 3+ 和 Beautiful Soup
4. 设置 Chrome 驱动程序的路径以使用 Chrome 浏览器:
driver = webdriver.Chrome("/usr/lib/chromium-browser/chromedriver")
5. 接下来,我们需要打开网页并将收集的信息存储为列表:
products = []# store name of the product
prices = []# store price of the product
ratings = []# store rating of the product
driver.get(insert URL)
6. 现在,您已准备好提取数据。输入数据嵌套的 div 标签:
content = driver.page_source
soup = BeautifulSoup(content)
for a in soup.findAll('a', href = True, attrs = {
'class': '_31qSD5'
}):
name = a.find('div', attrs = {
'class': '_3wU53n'
})
price = a.find('div', attrs = {
'class': '_1vC4OE _2rQ-NK'
})
rating = a.find('div', attrs = {
'class': 'hGSR34 _2beYZw'
})
products.append(name.text)
prices.append(price.text)
ratings.append(rating.text)
7. 运行代码:
python web-scrape.py
8. 将收集的信息以您喜欢的格式保存;在本例中,我们将其保存为 CSV 文件。
df = pd.DataFrame({
'Product Name': products,
'Price': prices,
'Rating': ratings
})
df.to_csv('products.csv', index = False, encoding = 'utf-8')
9. 然后,再次运行程序以完成过程。
正如您所见,通过安装正确的工具并了解简单的命令,网站可以轻松地使用 Python 进行抓取。我们希望您觉得这份指南有用,并能够将上述一些技巧应用到您的下一个网页抓取项目中。
Nahla Davies 是一名软件开发人员和技术作家。在全职从事技术写作之前,她在一家 Inc. 5,000 的体验品牌组织中担任首席程序员,该组织的客户包括三星、时代华纳、Netflix 和索尼。