如何抓取网页数据(一点会从零开始介绍如何编写一个网络爬虫的抓取功能?)
优采云 发布时间: 2022-02-04 07:12如何抓取网页数据(一点会从零开始介绍如何编写一个网络爬虫的抓取功能?)
从各种搜索引擎到日常小数据采集,都离不开网络爬虫。爬虫的基本原理很简单。它遍历网络中的网页并抓取感兴趣的数据内容。本期文章将介绍如何编写一个网络爬虫从零开始爬取数据,然后逐步完善爬虫的爬取功能。
我们使用 python 3.x 作为我们的开发语言,一点点 python 就可以了。让我们先从基础开始。
工具安装
我们需要安装python、python的requests和BeautifulSoup库。我们使用 Requests 库来抓取网页内容,并使用 BeautifulSoup 库从网页中提取数据。
爬网
完成必要工具的安装后,我们就正式开始编写我们的爬虫了。我们的首要任务是抓取豆瓣上的所有图书信息。我们以它为例,首先看一下如何爬取网页的内容。
使用python的requests提供的get()方法,我们可以很方便的获取到指定网页的内容。代码如下:
1import requests
2
3if __name__== "__main__":
4
5 response = requests.get("https://book.douban.com/subject/26986954/")
6 content = response.content.decode("utf-8")
7 print(content)
8
提取内容
爬取网页内容后,我们要做的就是提取我们想要的内容。在我们的第一个示例中,我们只需要提取书名。首先,我们导入 BeautifulSoup 库。使用 BeautifulSoup,我们可以轻松提取网页的具体内容。
1import requests
2from bs4 import BeautifulSoup
3
4if __name__== "__main__":
5
6 response = requests.get("https://book.douban.com/subject/26986954/")
7 content = response.content.decode("utf-8")
8 #print(content)
9
10 soup = BeautifulSoup(content, "html.parser")
11
12 # 获取当前页面包含的所有链接
13
14 for element in soup.select("a"):
15
16 if not element.has_attr("href"):
17 continue
18 if not element["href"].startswith("https://"):
19 continue
20
21 print(element["href"])
22
23 # 获取更多数据
24
连续爬网
至此,我们已经可以爬取单个页面的内容了,下面我们来看看如何爬取整个网站的内容。我们知道网页是通过超链接相互连接的,通过超链接我们可以访问整个网络。所以我们可以从每个页面中提取到其他页面的链接,然后反复爬取新的链接。
1import time
2import requests
3from bs4 import BeautifulSoup
4
5# 保存已经抓取和未抓取的链接
6
7visited_urls = []
8unvisited_urls = [ "https://book.douban.com/subject/26986954/" ]
9
10# 从队列中返回一个未抓取的URL
11
12def get_unvisited_url():
13
14 while True:
15
16 if len(unvisited_urls) == 0:
17 return None
18
19 url = unvisited_urls.pop()
20
21 if url in visited_urls:
22 continue
23
24 visited_urls.append(url)
25 return url
26
27
28if __name__== "__main__":
29
30 while True:
31 url = get_unvisited_url()
32 if url == None:
33 break
34
35 print("GET " + url)
36
37 response = requests.get(url)
38 content = response.content.decode("utf-8")
39 #print(content)
40
41 soup = BeautifulSoup(content, "html.parser")
42
43 # 获取页面包含的链接,并加入未访问的队列
44
45 for element in soup.select("a"):
46
47 if not element.has_attr("href"):
48 continue
49 if not element["href"].startswith("https://"):
50 continue
51
52 unvisited_urls.append(element["href"])
53 #print(element["href"])
54
55 time.sleep(1)
56
总结
我们的第一个网络爬虫已经开发出来。它可以抓取豆瓣上的所有书籍,但它也有很多局限性,毕竟它只是我们的第一个小玩具。在后续的文章中,我们会逐步完善我们爬虫的爬取功能。在后续的文章中,我们会逐步完善我们爬虫的爬取功能。
来源: