网络爬虫简单讲解(零基础入门)

本文详细介绍了网络爬虫的基础概念、分类、应用场景,重点讲解了抓取静态网页数据的方法,包括urllib库的使用,以及如何解析网页数据(如正则表达式)。同时涉及动态网页抓取的模拟浏览器技术和Selenium库,以及数据存储,特别是数据库存储,如MongoDB的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

    • 网络爬虫基础
    • 抓取静态网页数据
    • 解析网页数据
    • 抓取动态网页数据
    • 存储数据
    • 网络爬虫框架Scrapy

网络爬虫基础

  • 网络爬虫概念:

  1. 网络爬虫(web Crawler)又称网络蜘蛛、网络机器人,它是一种按照一定规则,自动浏览万维网的程序或者脚本。

  2. 网络爬虫模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,主动地抓取互联网信息的程序,原则上,主要是浏览器(客户端)能做的事情,爬虫都能够做到。
  • 网络爬虫分类:

  1. 网络爬虫历经几十年的发展,技术变得更加多样化,并结合不同的需求衍生出类型众多的领域。网络爬虫按照系统和实现技术大致可以分为4种类型,分别是通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫。
  • 网络爬虫的应用场景:

  1. 随着互联网信息的“爆炸”,网络爬虫渐渐为人们所知,病被应用到社会生活的众多领域。作为一种自动采集网页数据的技术,很多人其实并不清楚网络爬虫具体能应用到什么场景。
  2. 事实上,大多数依赖数据支撑的应用场景的离不开网络爬虫,包括搜索引擎、舆情分析与监测、聚会平台、出行类软件等。
  • 表层网页和深层网页是互联网上的两种不同类型的网页。

    1.表层网页是指传统搜索引擎可以索引的页面,主要是以超链接可以到达的静态网页构成的网页。这些网页的内容可以通过搜索引擎直接访问,不需要用户进行额外的操作或输入。

    2.深层网页则是指大部分内容无法通过静态链接获取,只能通过用户提交一些关键词才能获取的网页。例如,用户注册后内容才可见的网页就属于深层网页。这些网页的内容可能隐藏在搜索表单之后,需要通过特定的操作或输入才能访问。

    3.在网站中,深层网页的数量往往比表层网页的数量多得多。这是因为许多网站为了保护用户隐私、提供个性化服务或者增加用户体验,会设置一些深层网页。

    4.需要注意的是,表层网页和深层网页并没有明确的界限,它们在某种程度上是可以相互转化的。例如,一个表层网页可以通过添加一些交互元素或动态内容,变成一个深层网页。同样地,一个深层网页也可以通过优化搜索引擎的索引和排名,变成一个表层网页。

抓取静态网页数据

在网站设计中,纯粹HTML格式的网页通常被称为静态网页。静态网站的特点是,所有的数据都呈现在网页的HTML源代码中。

  • 什么是urllib库

  1. urllib库是内置的请求库,它可以看做是处理URL的组件集合。
  • 快速使用urllib库

    import urllib.request
    # 调用 urllib.request 库的 urlopen 方法,并传入一个 
    urlresponse =
    urllib.request.urlopen(http://www.baidu.com')
    #使用read 方法读取获取到的网页内容
    html = response.read().decode('UTF-8)
    #打印网页内容
    print(html)

    1.Python2中使用的是urllib2 库来下载网页,该库的用法如下所示

    import urllib2
    response = urllib2.urlopen( http://www.baidu.com)
  • 分析 urlopen 方法

  1. urlopen 方法可以接收多个参数,定义格式如下
    urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None,
    capath=None, cadefault=False, context=None)

    参数如下
    url-- 表示目标资源在网站中的位置;
  2. data-- 用来指明向服务器发送请求的额外信息
  3. timeout--该参数用于设置超时时间,单位是秒
  4. context--实现SSL加密传输,该参数很少使用
  • 使用 HTTPResponse 对象

    #示例
    import urllib.request
    response = urllib.request.urlopen(http://python.org')
    #获取响应信息对应的URL
    print(response.geturl())
    #获取响应码
    print(response.getcode())
    #获取页面的元信息
    print(response.info())

 ​​​​​代理服务器(Proxy Server)是一种重要的服务器安全功能,它的工作主要在开放系统互联(OSI)模型的会话层,从而起到防火墙的作用。代理服务器大多被用来连接INTERNET(国际互联网)和INTRANET(局域网)。 

解析网页数据

Python 中提供了多种解析网页数据的技术,包括正则表达式、XPath、Soup、JSONPath、
Beautiful。

  1. 正则表达式是一种文本模式,这种模式描述了匹配字符串的规则,用于检索字符串中是否有符合该模式的子串,或者对匹配到的子串进行替换正则表达式的优点是功能强大,应用广泛,缺点是只适合匹配文本的字面意义而不适合匹配文本意义。例如,正则表达式在匹配嵌套了 HTML内容的文本时,会忽略 HTML内容本身存在的层次结构,而是将HTML内容作为普通文本进行搜索。
拓展:二十大词云里正则表达式的作用

import collections  # 词频统计库
import re
 
import jieba  # 结巴分词
import matplotlib.pyplot as plt
import numpy  # 数据处理库
import wordcloud  # 词云展示库
from PIL import Image  # 图像处理
 
# 读取文件
fn = open('二十大.txt', 'r', encoding='utf-8')
string_data = fn.read()
fn.close()
 
# 文本预处理
pattern = re.compile(r'\t|\n|\.|-|:|;|\(|\)|\?|"')
string_data = pattern.sub('', string_data)
print(string_data)
 
# 文本分词
seg_list = jieba.cut(string_data, cut_all=False)
 
list = []  # 根据jieba库对文章形成词列表
remove = [u'的', u'是', u'随着', u'我', u'我们', u'对', u'等'u'和', u'坚持', u'促进', u'重大', u'支持', u'上', u'基本',
          u'和', u'加快', u'推动', u'能力', u'实施', u'不', u'要', u'在', u'以', u'完善', u'了', u'实现', u'一', u'为',
          u'用',u'大', u'新', u'推进', u'全面', u',', u'、', u'。', u';', u'(', u')', u'“', u'”', u'!']
for word in seg_list:
    if word not in remove:
        list.append(word)
 
# 词频统计
wordcount = collections.Counter(list)  # 筛选统计各个词的频率
word_count_top10 = wordcount.most_common(10)  # 统计前10个最高频的词
print(word_count_top10)
 
# 词云展示
mask_bg = numpy.array(Image.open('bg2.jpg'))  # 将PTL image转化成array
# 绘制词云
wordcloud_pic = wordcloud.WordCloud(
    background_color='white',
    mask=mask_bg,
    max_words=200, #最大词语数
    max_font_size=100, #最大字体
    min_font_size=5, #最小字体
    random_state=100, #随机配色方案
    font_path='C:/Windows/Fonts/simkai.ttf' # simkai.ttf simfang.ttf
)
 
wordcloud_pic.generate_from_frequencies(wordcount) #
plt.imshow(wordcloud_pic)
plt.axis('off')
plt.show()


提示:若要解析纯文本,则可以选择正则表达式;若要解析HTML或XML格式的数据,则可以选择正则表达式、XPath 、 BeautifulSoup;若要解析JSON 格式的数据,则可以选择JSONPath为便于开发者使用这些技术,Python 提供了一些库或模块进行支持,包括re、lxml、bs4、jsonpath,其中re 模块支持正则表达式;lxml库和bs4库支持XPath;jsonpath 模块支持JSONPath 。 

抓取动态网页数据

  • 对于动态网页的数据可以直接使用模拟浏览器。运行的方式进行实现,这样做就可以不用管网页内部是如何使用JavaScript 渲染页面的,也不用管Ajax请求中到底有没有加密参数,在浏览器中看到是什么样的内容,抓取的结果便是什么样的内容。 Python 中提供了许多模拟浏览器 运行的库包Selenium、Splash、 PyAutoGUl等
  • Selenium 是一个开源的、便携式的自动化测试工具,它最初是为网站自动化测试而开发的,Selenium 支持与所有主流的浏览器 (如Chrome、 Firefox、Edge、IE 等)配合使用,也包括诸如PhantomJS、Headless Chrome等一些无界面的浏览器

存储数据

  • 数据存储的方式

  1. 数据库存储:根据存储数据时所用数据模型的不同,当今互联网中的数据库主要分为两种:关系型数据库和非关系型数据库。

  2. 关系型数据库是指采用关系模型(二维表格形式)组织数据的数据库系统,它由数据表和数据表之间的关系组成,主要包含数据行、数据列、数据表、数据库4个核心元素非关系型数据库也被称为 NoSQL (Not Only SQL)数据库,是指非关系型的、分布式的数据存储系统。

  3. 与关系型数据库相比,非关系型数据库无需事先为要存储的数据建立字段,它没有固定的结构,既可以拥有不同的字段,也可以存储各种格式的数据

from pymongo import MongoClient
 
try:
    # 准备前工作:连接-数据库-数据表
    client = MongoClient("localhost", 27017)  # 连接mongodb
    database = client["db_student"]  # 数据库存在,则直接访问db_student;否则创建db_student
    collection = database["user"]  # 集合存在,则直接访问user;否则创建user
 
    # 具体操作
    insertont = collection.insert_one({"name": "小明",
                                       "age": "19"})  # 创建时候一定要有数据,否则创建不成功
    insertont = collection.insert_one({"name": "小明", "age": "20"})  # 创建时候一定要有数据,否则创建不成功
    insertont = collection.insert_one({"name": "小红", "age": "19"})  # 创建时候一定要有数据,否则创建不成功
except Exception as error:
    print(error)

 网络爬虫框架Scrapy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值