Python 网页抓取库和框架

2021-07-27 18:11:06 浏览数 (1)

作为 Python 开发人员,您可以使用许多 Web 抓取工具。现在就来探索这些工具并学习如何使用它们。

Python 是最流行的网页抓取编程语言已经不是什么新闻了,这与它易于学习和使用以及拥有大量流行的网页抓取库和框架的事实并非无关。杠杆作用。作为 Python 开发人员,您需要了解这些工具并学习如何使用它们为您的网络抓取任务编写更好的代码。

在本文中,您将了解用于构建 Web 抓取工具的最流行的 Python 库和框架。您还将学习如何安装它们中的每一个和代码示例,让您有一个良好的开端。


Python 网页抓取库

Python 网页抓取库是为在网页抓取工作流中执行特定任务而编写的模块和包,它们可以是发送 HTTP 请求、处理无头浏览器以呈现 JavaScript 和模拟人机交互以及从下载的页面解析数据。


Urllib

Urllib 是 Python 标准库中的一个包,其中包含用于处理 URL 和 HTTP 请求的模块。它带有 4 个模块,其中包括

代码语言:javascript复制
urllib.request

用于处理 HTTP 请求,

代码语言:javascript复制
urllib.error

其中包含引发的异常

代码语言:javascript复制
urllib.request
代码语言:javascript复制
urllib.parse

用于解析 URL,以及

代码语言:javascript复制
urllib.robotparser

用于解析 robots.txt 文件的内容。Urllib 不容易使用,但可以帮助您处理身份验证、cookie、URL 编码和代理等。只有在需要对请求进行高级控制时才应该使用它。

如何安装 Urlli

如前所述,Urllib 包包含在标准 python 库中,因此您无需再次安装它。只需在您的代码中导入它并使用它。

Urllib 代码示例

下面的代码将向Wikipedia 的主页发送 GET 请求并打印出响应。响应将是页面的整个 HTML。

代码语言:javascript复制
import urllib.request as rq 

get_content = rq.urlopen("https://en.wikipedia.org/wiki/Main_Page") 

print(get_content.read().decode("utf-8"))

Python请求

Python Requests 库被称为 Python HTTP for Humans,是一个第三方库,旨在简化处理 HTTP 请求和 URL 的过程。它建立在 Urllib 之上,并提供了一个易于使用的界面。

除了比 urllib 更易于使用之外,它还具有更好的文档。说到流行度,可以说 Requests 是最受欢迎的 Python 库之一,因为它是下载次数最多的 Python 包。它支持国际化、会话 cookie 和身份验证,以及连接池和超时,以及多部分文件上传。

如何安装

Python Requests 是第三方包,因此您需要先安装它才能使用它。推荐的安装方式是使用 pip 命令。

代码语言:javascript复制
>> pip install requests

Python 请求代码示例

下面的代码将下载使用 Urllib 下载的相同页面,因此您可以进行比较,即使在您使用其高级功能时会产生差异。

代码语言:javascript复制
>> import requests

>>get_content = requests.get("https://en.wikipedia.org/wiki/Main_Page")

>> print(get_content.text)

Selenium

Selenium Web 驱动程序是一个浏览器自动化工具——你用它来做什么完全取决于你。它已在网络抓取工具中流行起来,因为它可用于从 JavaScript 丰富的网站抓取数据。Python Requests 库和 Scrapy 等传统工具无法渲染 JavaScript,因此,您需要 Selenium 来实现。

Selenium 可用于自动化许多浏览器,包括 Chrome 和 Firefox。在无头模式下运行时,您实际上不会看到浏览器打开,但它会模拟浏览器环境中的操作。使用 Selenium,您可以模拟鼠标和键盘操作、访问站点并抓取所需的内容。

如何安装硒

您需要满足两个要求才能使用 Selenium Web 驱动程序自动化浏览器。其中包括 Selenium Python 绑定和浏览器驱动程序。在本文中,我们将使用 Chrome,因此,您需要从这里下载Chrome 驱动程序- 确保它适用于您使用的 Chrome 版本。安装后,将其解压缩并将 chromedriver.exe 文件与您的 python 脚本放在同一目录中。有了这个,你就可以使用下面的 pip 命令安装 selenium python 绑定。

代码语言:javascript复制
pip install requests

硒代码示例

下面的代码展示了如何使用 Selenium 搜索亚马逊。请记住,脚本必须与

代码语言:javascript复制
chromedriver.exe

文件

代码语言:javascript复制
from selenium import webdriver

from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()

driver.get("https://www.indeed.com/")

amazon_search = driver.find_element_by_id("twotabsearchtextbox")

amazon_search.send_keys("Web scraping for python developers")

amazon_search.send_keys(Keys.RETURN)

driver.close()

使用python和Selenium,你可以像这个网站一样,找到不同工作平台的python开发者的当前空缺职位和汇总数据,所以,你可以很容易地从Glassdoor、flexjobs、monster等中抓取python开发者的数据。


BeautifulSoup

BeautifulSoup 是一个解析库,用于解析 HTML 和 XML 文件。它将网页文档转换为解析树,以便您可以使用其 Pythonic 方式来遍历和操作它。使用 BeautiSoup,您可以解析出任何所需的数据,只要它在 HTML 中可用。重要的是您要知道 BeautifulSoup 没有自己的解析器,它位于其他解析器之上,例如 lxml,甚至是 python 标准库中可用的 html.parser。在解析网页数据时,

BeautifulSoup 是最受欢迎的选择。有趣的是,它很容易学习和掌握。使用 BeautifulSoup 解析网页时,即使页面 HTML 混乱复杂,也不会出现问题。

如何安装 BeautifulSoup

就像讨论的所有其他库一样,您可以通过 pip 安装它。在命令提示符中输入以下命令。

代码语言:javascript复制
pip install beautifulsoup4

BeautifulSoup 代码示例

下面是一个将尼日利亚 LGA 列表抓取并打印到控制台的代码。BeautifulSoup 没有下载网页的功能,因此,我们将使用 Python Requests 库来实现。

代码语言:javascript复制
import requests

from bs4 import BeautifulSoup

 

url = "https://en.wikipedia.org/wiki/Local_government_areas_of_Nigeria"

page_content = requests.get(url).text

soup = BeautifulSoup(page_content, "html.parser")

table = soup.find("table", {"class": "wikitable"})

lga_trs = table.find_all("tr")[1:]

for i in lga_trs:

tds = i.find_all("td")

td1 = tds[0].find("a")

td2 = tds[1].find("a")

l_name = td1.contents[0]

l_url = td1["href"]

l_state = td2["title"]

l_state_url = td2["href"]

print([l_name,l_url, l_state, l_state_url])

Lxml

从这个库的名字就可以看出它与XML有关。实际上,它是一个解析器——一个真正的解析器,不像 BeautifulSoup 那样位于解析器之上充当解析库。除了 XML 文件,lxml 还可以用于解析 HTML 文件。您可能会感兴趣地知道 lxml 是 BeautifulSoup 用来将网页文档转换为要解析的树的解析器之一。

Lxml 在解析方面非常快。然而,它很难学习和掌握。大多数网络爬虫不会单独使用它,而是将它用作 BeautifulSoup 使用的解析器。因此,实际上不需要代码示例,因为您不会单独使用它。

如何安装 Lxml

Lxml 在 Pypi 存储库中可用,因此,您可以使用 pip 命令来安装它。安装 lxml 的命令如下。

代码语言:javascript复制
pip install lxml

Python 网页抓取框架

与仅用于一个功能的库的情况不同,框架是一个完整的工具,它整合了您在开发网络抓取工具时所需的大量功能,其中包括发送 HTTP 请求和解析请求的功能。


Scrapy

Scrapy 是最流行的,可以说是最好的网络抓取框架,作为开源工具公开可用。它是由Scrapinghub创建并仍在广泛管理的。

Scrapy 是一个完整的框架,因为它负责发送请求并从下载的页面中解析所需的数据。Scrapy 是多线程的,是所有 Python 框架和库中最快的。它使复杂的网络爬虫的开发变得容易。但是,与之相关的问题之一是它不呈现和执行 JavaScript,因此,您需要为此使用 Selenium 或 Splash。同样重要的是你知道它有一个陡峭的学习曲线。

如何安装 Scrapy

Scrapy 在 Pypi 上可用,因此,您可以使用 pip 命令安装它。以下是在命令提示符/终端上运行以下载和安装 Scrapy 的命令。

代码语言:javascript复制
pip install scrapy

Scrapy 代码示例

如前所述,Scrapy 是一个完整的框架,没有简单的学习曲线。对于代码示例,您需要编写大量代码,并且不会像上述情况那样工作。有关 Scrapy 的代码示例,请访问Scrapy 网站上的官方教程页面。


Pyspider

Pyspider 是另一个为 Python 程序员编写的网页抓取框架,用于开发网页抓取工具。Pyspider 是一个强大的网络爬虫框架,可用于为现代网络创建网络爬虫。与 Scrapy 不自行呈现 JavaScript 的情况不同,Pyspider 擅长完成这项工作。但是,在可靠性和成熟度方面,Scrapy 远远领先于 Pyspider。它允许分布式架构,并提供对 Python 2 和 Python 3 的支持。它支持大量的数据库系统,并带有一个强大的 WebUI,用于监控您的爬虫/抓取工具的性能。要运行它,它需要在服务器上。

如何安装 Pyspider

可以使用下面的 pip 命令安装 Pyspider。

代码语言:javascript复制
pip install pyspider

PySpider 代码示例

下面的代码是 Pyspider 在其文档页面上提供的示例代码。它会抓取 Scrapy 主页上的链接。

代码语言:javascript复制
from pyspider.libs.base_handler import *

class Handler(BaseHandler):

crawl_config = {}

@every(minutes=24 * 60)

def on_start(self):

self.crawl("https://scrapy.org/", callback=self.index_page)
 
@config(age=10 * 24 * 60 * 60)

def index_page(self, response):

for each in response.doc('a][href^="http"]').items():

self.crawl(each.attr.href, callback=self.detail_page)

 

def detail_page(self, response):

return {"url": response.url, "title": response.doc('title').text()

如前所述,Pyspider 在服务器上运行。您的计算机作为服务器的服务器并将从本地主机监听所以运行:

代码语言:javascript复制
pyspider

命令并访问http://localhost:5000/

结论

当谈到 Python 编程语言中可用于网页抓取的工具、库和框架的数量时,您需要知道有很多。

然而,你不能去学习每一个。如果您正在开发一个不需要复杂架构的简单抓取工具,那么使用 Requests 和 BeautifulSoup 的组合将起作用——如果站点是 JavaScript 密集型的,则添加 Selenium。

在这些方面,硒甚至可以单独使用。但是,当您期待开发复杂的网络爬虫或爬虫时,Scrapy 是可以使用的框架。

来源:https://www.bestproxyreviews.com/

(中文网站:https://www.dailiproxy.com/ )

0 人点赞