如何使用Python进行网页抓取 – 7款Python爬虫库

如何使用Python进行网页抓取 – 7款Python爬虫

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

毫无疑问,Python是用于web抓取的最流行的编程语言,这与它易于学习和使用这一事实有关,而且您还可以利用大量流行的web抓取库和框架。作为一名Python开发人员,您需要了解这些工具,并学习如何使用它们来为web抓取任务编写更好的代码。

在本文中,您将学习用于构建web scraper的最流行的Python库和框架。您还将学习如何安装它们以及如何进行代码测试。

Python Web爬虫库

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

Urllib

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

用于处理HTTP请求,
urllib.error

其中包含由引发的异常
urllib.request
urllib.parse

用于解析URL,以及
urllib.robotparser

用于解析robots.txt文件的内容,Urllib并不易于使用,但可以帮助您处理身份验证、Cookie、URL编码和代理等。仅在需要对请求进行高级控制时,才应使用此功能。
•如何安装Urllib

如前所述,Urllib软件包包含在标准python库中,因此,无需再次安装。只需将其导入您的代码中并使用即可。
•Urllib代码示例

下面的代码会将GET请求发送到Wikipedia的主页,并打印出响应。响应将是页面的整个HTML。
import urllib.request as rq

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

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

Python Requests

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

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

Python Requests是第三方软件包,因此,您需要先安装它,然后才能使用它。建议的安装方式是使用pip命令。
pip install requests
•Python请求代码示例

下面的代码将下载使用Urllib下载的同一页面,因此即使您使用它们的高级功能时有所不同,您也可以进行比较。
>> import requests

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

>> print(get_content.text)

Selenium

Selenium Web驱动程序是一种浏览器自动化工具,您可以完全使用它。它已经在Web抓取工具中流行,因为它可以用于从JavaScript丰富的网站抓取数据。诸如Python Requests库和Scrapy之类的传统工具无法呈现JavaScript,因此,您需要Selenium。

Selenium可用于自动化大量浏览器,包括Chrome和Firefox。在无头模式下运行时,您实际上不会看到浏览器处于打开状态,但是它将模拟浏览器环境中的操作。使用Selenium,您可以模拟鼠标和键盘操作,访问网站并刮取所需的内容。
•如何安装Selenium

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

下面的代码显示了如何使用Selenium搜索Amazon。
from selenium import webdriver

from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()

driver.get("https://www.amazon.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()

阅读更多,
•Selenium代理设置:如何在Selenium上设置代理
•使用Selenium和代理构建Web爬网程序

BeautifulSoup

BeautifulSoup是用于解析HTML和XML文件的解析库。它将网页文档转换为解析树,以便您可以使用其Python方式遍历和操作它。使用BeautiSoup,您可以解析HTML中可用的任何需要数据。重要的是要知道,BeautifulSoup没有自己的解析器,位于其他解析器(如lxml,甚至html)之上。

在解析网页数据时,BeautifulSoup是最受欢迎的选择。它易于学习和掌握。使用BeautifulSoup解析网页时,即使页面HTML混乱且复杂,您也不会遇到问题。
•如何安装BeautifulSoup

就像讨论的其他库一样,您可以通过pip来安装它。在命令提示符中输入以下命令。
pip install beautifulsoup4
•BeautifulSoup代码示例

下面的代码可将尼日利亚的LGAs列表抓取并打印到控制台。BeautifulSoup没有下载网页的功能,因此,我们将使用Python Requests库。
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])

阅读更多, 如何使用Beautifulsoup构建一个简单的Python Web Scraper

Lxml

从该库的名称,您可以知道它与XML有关。实际上,它是一个解析器–确实是一个解析器,不像位于解析器顶部用作解析库的BeautifulSoup。除了XML文件之外,lxml还可以用于解析HTML文件。您可能很想知道lxml是BeautifulSoup用来将网页文档转换为要解析的树的解析器之一。

LXML解析速度非常快。但是,很难学习和掌握。大多数Web抓取工具并不单独使用它,而是将其用作BeautifulSoup使用的解析器。因此,实际上并不需要代码示例,因为您不会单独使用它。

从这个库的名称可以看出,它与XML有关。实际上,它是一个解析器——一个真正的解析器,不像BeautifulSoup那样位于解析器之上充当解析库。除了XML文件之外,lxml还可以用于解析HTML文件。lxml是BeautifulSoup用来将web页面文档转换为要解析的树的解析器之一。

在进行解析时,Lxml速度非常快。然而,它是很难学习和掌握的。大多数web抓取器并不单独使用它,而是将它用作BeautifulSoup使用的解析器。因此,实际上不需要代码示例,因为您不会单独使用它。
•如何安装Lxml

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

Python Web爬网框架

与仅用于一个功能的库不同,框架是一个完整的工具,其中包含开发Web爬网程序时所需的大量功能,其中包括用于发送HTTP请求和解析请求的功能。

Scrapy

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

Scrapy是一个完整的框架,它既负责发送请求,又负责解析下载页面所需的数据。Scrapy是多线程的,是所有python框架和库中速度最快的。它使得复杂的网页抓取变得容易。但是,与之相关的一个问题是,它不能呈现和执行JavaScript,因此需要使用Selenium或Splash。
•如何安装Scrapy

Scrapy在Pypi上可用,因此,您可以使用pip命令安装它。以下是在命令提示符/终端上运行的命令,以下载并安装Scrapy。
pip install scrapy
•Scrapy代码示例

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

阅读更多:Scrapy Vs Beautifulsoup Vs Selenium 网页抓取

Pyspider

Pyspider是另一个为python程序员开发的网络抓取框架,用于开发网络抓取工具。Pyspider是一个功能强大的网络爬网框架,可用于为现代网络创建网络抓取工具。与Scrapy不能自行呈现JavaScript的情况不同,Pyspider擅长完成此工作。但是,在可靠性和成熟度方面,Scrapy远远领先于Pyspider。它支持分布式体系结构,并支持Python 2和Python3。它支持大量数据库系统,并带有功能强大的WebUI,用于监视爬虫/爬虫的性能。要使其运行,它必须在服务器上。

Pyspider是另一个为python程序员开发web抓取器而编写的web抓取框架。Pyspider是一个强大的web爬行框架,您可以使用它为现代web创建web抓取器。与Scrapy不自己渲染JavaScripts的情况不同,Pyspider在这方面做得很好。然而,在可靠性和成熟度方面,Scrapy遥遥领先于Pyspider。它支持分布式体系结构,并同时提供对Python 2和Python 3的支持。它支持大量的数据库系统,并带有一个用于监视perfo的强大WebUI。
•如何安装Pyspider

可以使用下面的pip命令安装Pyspider。
pip install pyspider
•PySpider代码示例

以下代码是Pyspider在其文档页面上提供的示例代码。它在Scrapy主页上抓取链接。
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在服务器上运行。您的计算机是一台服务器,并且会从本地主机监听,以此运行。
pyspider

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

相关:
•最佳网页抓取工具-终极网页抓取工具列表!
•Web Scraping API提取数据(URL到数据)
•针对非程序员的免费Web搜刮软件和扩展
•如何抓取网站,永不列入黑名单!

结论

谈到python编程语言中用于web抓取的工具、库和框架的数量时,您需要知道有很多。然而,你不可能每一个都去学习。如果你正在开发一个不需要复杂架构的简单scraper,那么使用request和BeautifulSoup就可以了——如果站点使用javascript非常多,还可以加上Selenium。Selenium甚至可以单独使用。然而,当您希望开发一个复杂的web scraper或crawler时,可以使用Scrapy这个框架。