如何抓取网页数据(一点会从零开始介绍如何编写一个网络爬虫的抓取功能?)

优采云 发布时间: 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

  总结

  我们的第一个网络爬虫已经开发出来。它可以抓取豆瓣上的所有书籍,但它也有很多局限性,毕竟它只是我们的第一个小玩具。在后续的文章中,我们会逐步完善我们爬虫的爬取功能。在后续的文章中,我们会逐步完善我们爬虫的爬取功能。

  来源:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线