Python网页抓取教程

​— Python网页抓取教程:循序渐进 —

抓取网页入门其实挺简单的。在之前的文章中我们介绍了怎么用C#和JAVA两种方法来抓取网页,这一期给大家介绍一种更容易,也是使用最广泛的一种抓取方法,那就是Python

说起Python,大家应该并不陌生,它是目前入门最简单的一种方法了,因为它是一种面向对象的语言。Python的类和对象比任何其他语言都更容易使用。此外,Python存在许多库,因而在Python中构建用于网页抓取的工具轻而易举。

在这篇Python网络抓取教程中,我们将分步骤讲解如何利用python来抓取目标数据。首先需要从页面源获取基于文本的数据,然后将其存储到文件中并根据设置的参数对输出进行排序。使用Python进行网页抓取时还有一些更高级功能的选项,这些将在最后概述,并提供一些使用上的建议。按照教程下面概述的步骤进行操作,您将能知道如何进行网页抓取。

Python网页抓取教程适用于所有操作系统。不同系统安装Python或开发环境时会略有不同,其它部分均无不同。

我们所说的网页抓取是什么?

网络抓取是收集公共数据的自动化过程。爬虫会在几秒钟内自动从目标网站中提取大量公共数据。

#构建网络爬虫:Python准备工作

在整个网络抓取教程中,将使用Python3.4以上版本,您可以此页面下载。

准确的说,我们使用了3.8.3,但任何3.4+版本都应该可以正常运行我们下面用到的代码。

对于Windows系统,安装Python时确保选中“PATH安装”。PATH安装将可执行项添加到默认的Windows命令提示符可执行项搜索中。然后Windows将识别诸如“pip”或“python”之类的命令,而无需用户将其指向可执行文件的目录(例如C:/tools/python/.../python.exe)。如果您已经安装了Python但没有勾选复选框,只需重新运行安装并选择修改。在第二页上选择“添加到环境变量”即可。

了解Python库

由于可用的许多有用的库,使用Python进行网页抓取很容易。

Python的一大优势在于可供选择的库很多。这些网页抓取用到的库现在已经用于数以万计的Python项目——仅在PyPI上,现在就有超过300,000个项目。您可以选择多种类型的Python网页抓取库:

●Requests

●Beautiful Soup

●lxml

●Selenium

01#Requests库

网页抓取首先向网站服务器发送HTTP请求(例如POSTGET ),该请求会返回一个包含所需数据的响应。但是,标准Python HTTP库难以使用,为了提高效率,需要大量代码行,这进一步加剧了已经存在的问题。

与其他HTTP库不同,Requests库通过减少代码行简化了发出此类请求的过程,使代码更易于理解和调试,而不会影响其有效性。使用pip命令就可以从终端内安装该库:

pip install requests

Requests库提供了发送HTTPGETPOST请求的简单方法。例如,发送HTTP Get请求的函数被恰当地命名为get():

import requests
response = requests.get("https://oxylabs.io/”)
print(response.text)

如果需要发布表单,可以使用post()方法轻松完成。表单数据可以作为字典发送,如下所示:

form_data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post("https://oxylabs.io/ ", data=form_data)
print(response.text)

请求库还会使那些需要进行身份验证的代理变得非常容易使用。

proxies={'http': 'http://user:password@proxy.oxylabs.io'}
response = requests.get('http://httpbin.org/ip', proxies=proxies)
print(response.text)

但是这个库有一个局限性,它不解析提取的HTML数据,也就是说它不能将数据转换成更易读的格式进行分析。此外,它不能用于抓取纯JavaScript编写的网站

02#Beautiful Soup

Beautiful Soup是一个Python库,它与解析器一起从HTML中提取数据,甚至可以将无效标记转换为解析树。但是,该库仅用于解析,不能以HTML文档/文件的形式从网络服务器请求数据。它主要与Python Requests库一起使用。需要注意的是,Beautiful Soup可以轻松查询和导航HTML,但仍需要解析器。以下示例演示了html.parser模块的使用,该模块是Python标准库的一部分。

#Part 1–使用Requests获取HTML

import requests
url='https://oxylabs.io/blog'
response = requests.get(url)

#Part 2–查找元素

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

标题里的元素会输出如下:

<h1 class="blog-header">Oxylabs Blog</h1>

由于其导航、搜索和修改解析树方法均很简单,Beautiful Soup即使对于初学者也是十分不错的一个库,并且通常可以节省开发人员数小时的工作时间。例如,要输出此页面中的所有博客标题,就可以使用findAll()。在此页面上,会找到所有h2大小,且类属性为blog-card__content-title的博客标题。该信息可以配合findAll方法使用,如下所示:

blog_titles = soup.findAll('h2', attrs={"class":"blog-card__content-title"})
for title in blog_titles:print(title.text)
# Output:
# Prints all blog tiles on the page

BeautifulSoup还可以轻松使用CSS selectors。如果开发人员知道CSS selector,则无需学习find()find_all()方法。以下是相同的示例,但使用的是CSS selecto

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值