如何轻松使用 Python 进行网页抓取?

聊聊用不同的库进行网页抓取。

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 selectors:

blog_titles = soup.select('h2.blog-card__content-title')
for title in blog_titles:
print(title.text)

虽然能解析有问题的HTML是该库的主要功能之一,但它还提供了许多其它功能,包括检测页面编码,更进一步提高从HTML文件中提取数据的准确性。

更重要的是,它可以轻松配置,只需几行代码,即可提取任何自定义的公开可用数据或识别特定的数据类型。我们的Beautiful Soup教程包含有关此配置和其他配置的更多信息,以及该库的工作原理。

03、lxml

lxml是一个解析库。它是一个快速、强大且易于使用的库,适用于HTMLXML文件。此外,lxml是大量提取数据的理想选择。然而,与Beautiful Soup不同的是,这个库针对设计的不好的HTML可能会出现解析不了的情况。

可以使用以下pip命令从终端安装lxml库:

pip install lxml

这个库包含一个html模块来处理HTML。但是,lxml库首先需要HTML字符串。可以使用上一节中讨论的Requests库检索此HTML字符串。一旦HTML可用,就可以使用下面的fromstring方法构建树:

# After response = requests.get()
from lxml import html
tree = html.fromstring(response.text)

现在可以使用XPath查询此树。继续上一节中讨论的示例,要获取博客的标题,XPath将如下所示:

//h2[@class="blog-card__content-title"]/text()

可以将此XPath提供给tree.xpath()函数。这将返回与此XPath匹配的所有元素。注意XPath中的text()函数。该函数会提取h2元素内的文本。

blog_titles = tree.xpath('//h2[@class="blog-card__content-title"]/text()')
for title in blog_titles:
print(title)

一些资源分享

Python 入门教程完整版(全 547 集) - 1. ubuntu 基本安装​www.zhihu.com/education/video-course/1483111485588742145​编辑icon-default.png?t=N6B9https://www.zhihu.com/education/video-course/1483111485588742145

Python 深入浅出进阶课程 - 1. 今日目标​www.zhihu.com/education/video-course/1483114387217539072​编辑icon-default.png?t=N6B9https://www.zhihu.com/education/video-course/1483114387217539072

黑马程序员Python爬虫基础,快速入门Scrapy爬虫框架_哔哩哔哩_bilibili​www.bilibili.com/video/BV1jx411b7E3/?spm_id_from=333.999.0.0​编辑icon-default.png?t=N6B9https://link.zhihu.com/?target=https%3A//www.bilibili.com/video/BV1jx411b7E3/%3Fspm_id_from%3D333.999.0.0

黑马程序员180分钟轻松获取疫情数据,Python爬虫入门课_哔哩哔哩_bilibili​www.bilibili.com/video/BV1464y1c7Eq/?spm_id_from=333.999.0.0​编辑icon-default.png?t=N6B9https://link.zhihu.com/?target=https%3A//www.bilibili.com/video/BV1464y1c7Eq/%3Fspm_id_from%3D333.999.0.0

2020年最新大数据实战教程|反爬虫系统项目实战(Lua+Spark+Redis+Hadoop框icon-default.png?t=N6B9https://link.zhihu.com/?target=https%3A//www.bilibili.com/video/BV1u54y1Q7iY/%3Fspm_id_from%3D333.999.0.0%26vd_source%3Dc5b829c113088a67f153859f36a1d214

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值