简介:本文将详细演示如何用Python爬取糗事百科的笑话段子内容,还会讲到爬虫的时候需要重点关注的点。Web抓取是从Internet提取数据的过程。这也称为网络收集或网络数据提取。Python使我们能够使用自动化技术执行Web抓取。BeautifulSoup是一个Python库,用于解析HTML和XML文档中的数据(结构化数据)。 |
互联网有海量数据。无论你是数据科学家,商人,学生还是专业人士,所有人都会从互联网上获取数据。
网页抓取是什么意思?这是从网站提取数据的简单动作。甚至从Internet复制和粘贴数据都是Web抓取。因此,如果你从互联网上下载了喜欢的歌曲,则意味着您已经从互联网上抓取了数据。
在本文中,我们将探讨一些与Web抓取有关的最常见问题,然后我们将介绍创建Web抓取工具的整个过程,并使Web抓取任务自动化!
Web抓取是从Internet提取数据的过程。这也称为网络收集或网络数据提取。Python使我们能够使用自动化技术执行Web抓取。
Python中用于网络抓取的一些最常用的库是:
如果按照适当的指导方针进行Web抓取,并且可以通过自动化,实现我们在Internet上重复执行的日常任务,会使我们的生活变得轻松。
最重要的是,“自动采集可以让您聪明地工作!”
这是一个非常重要的问题,但是,对此没有具体答案。有些网站不介意你从其网页上抓取内容,而另一些网站则禁止抓取内容。因此,有必要遵循准则,并且在从其网页上抓取内容时不要违反网站的政策。
让我们看看在通过Internet抓取内容时必须牢记的一些重要准则。
在深入研究网络抓取之前,了解网络的工作原理以及什么是超文本标记语言非常重要,因为这就是我们要从中提取数据的方式。因此,让我们简要讨论一下HTTP请求响应模型和HTML。
网络工作原理的整个工作原理可能非常复杂,但让我们尝试并从简单的角度理解事物,这将使我们对如何进行网络抓取有所了解。
简而言之,HTTP请求/响应是HTTP和其他基于HTTP的扩展协议使用的通信模型,根据该模型,客户端(Web浏览器)向服务器发送对资源或服务的请求,然后服务器发送如果成功处理了请求,则返回与资源相对应的响应;否则,如果服务器无法处理该请求,则服务器将以错误消息进行响应。
与Web服务器进行交互的HTTP方法很多。但最常用的是 get 和 post
其他HTTP方法是:
注意:为了从网站上获取数据,我们将使用 requests 库和 get() 方法向Web服务器发送一个请求。
虽然HTML本身超出了本文的讨论范围,但是你必须了解HTML的基本结构。不要担心,你不需要学习如何使用HTML和CSS设计网页,但你必须了解使用HTML创建网页时使用的一些关键元素和标记。
HTML有一个层次结构 / 树形结构。这个属性使我们在访问HTML文档中的元素时,可以根据它们的父子关系来访问网页。为了可视化HTML树状结构,让我们看看下面给出的图片。
如果你想进一步探索和了解HTML的工作原理,我列出了几个链接:
在本次演练中,我们将抓取:
网站:https://www.qiushibaike.com/text/
要使用开发者工具导航:
用户代理是客户端(通常是Web浏览器),用于代表用户向Web服务器发送请求。当从同一台机器/系统一次又一次地获取自动化请求时,Web服务器可能会猜测该请求是自动化发送的。它会阻止了该请求。因此,我们可以使用用户代理来伪造浏览器,访问特定网页,从而使服务器认为请求来自原始用户,而不是机器人。
语法:
# 创建 User-Agent (可选)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"}
# 将User-Agent作为参数与get()请求一起传递
response = requests.get("https://www.qiushibaike.com/text/page/1/", headers=headers)
Requests 请求库允许我们发送 get 请求到Web服务器。
运作方式如下:
语法:
# 存储网页内容
webpage = response.text
服务器处理完HTTP请求后,它将发送包含状态码的响应。状态代码指示特定响应是否已成功处理。
print(response.status_code)
200
BeautifulSoup是一个Python库,用于解析HTML和XML文档中的数据(结构化数据)。
语法:
# 从bs4导入BeautifulSoup
from bs4 import BeautifulSoup
# 从网页内容中创建一个BeautifulSoup对象
soup = BeautifulSoup(webpage, "lxml")
创建BeautifulSoup对象后,我们需要使用BeautifulSoup 库提供给我们的不同选项来导航和查找HTML文档中的元素,并从中抓取数据。
语法:
# 指定10个页面,循环赋值
for page in range(10):
response = requests.get('https://www.qiushibaike.com/text/page/{}/'.format(page), headers=headers)
soup.select('a.contentHerf .content span')
语法:
if joke.string is not None:
print(joke.string)
现在,我们合并所有步骤,以达到最终的解决方案/代码,如下所示:
import requests
from bs4 import BeautifulSoup
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"}
for page in range(10):
response = requests.get('https://www.qiushibaike.com/text/page/{}/'.format(page), headers=headers)
webpage = response.text
soup = BeautifulSoup(webpage, "lxml")
for joke in soup.select('a.contentHerf .content span'):
if joke.string is not None:
print(joke.string)
希望阅读完整篇文章后,你可以轻松地从网页中抓取数据!
请订阅并继续关注,以后会收到更多有趣的文章。
本文为“一个火星程序员”原创文章,转载请标明出处
原文链接:https://blog.csdn.net/machial/article/details/110676426