当前位置: 首页 > article >正文

实现静态网络爬虫(入门篇)

一、了解基本概念以及信息

1.什么是爬虫

爬虫是一段自动抓取互联网信息的程序,可以从一个URL出发,访问它所关联的URL,提取我们所需要的数据。也就是说爬虫是自动访问互联网并提取数据的程序。

它可以将互联网上的数据为我所用,开发出属于自己的网站或APP。

2.在爬虫程序中有三个模块

(1)URL管理器:对将要爬取的URL和已经爬取过的URL这两个数据进行管理

(2)网页下载器:将URL管理器里提供的一个URL对应的网页下载下来,存储为一个字符串,这个字符串会传送给网页解析器进行解析  

(3)网页解析器:一方面会解析出有价值的数据,另一方面,由于每一个页面都有很多指向其它页面的网页,这些URL被解析出来之后,可以补充进URL管理器

3.网页解析器——LXML和Xpath

1.网页解析概述:

除了学会向服务器发出请求、下载HTML源码,要获取结构化的数据还面临一个最常见的任务,就是从HTML源码中提取数据。

三种方法:

正则表达式

lxml库

BeautifulSoup

针对文本的解析,用正则表达式

针对html/xml的解析,有Xpath、BeautifulSoup、正则表达式

针对JSON的解析,有JSONPath

2.xpath(XML Path Language)实现路径选择,变换路径实现对信息的采集。使用路径表达式来选取XML文档中的节点或者节点集

3.Xpath里面管理扩展程序保持一个类似这样的格式

// 是当前根目录下 @ [] 通过检查找到你想要的东西

4.如何Copy   Xpath,以豆瓣电影为例​​​​​​(http:淄博 - 在线购票&影讯)

右键点击检查按钮

进入Xpath的管理扩展程序,具体的插件要下载安装找教程

就像这样:

具体的解释:

5.Lxml库:

lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 数据。

lxml和正则一样,也是用 C 实现的,是一款高性能的 Python HTML/XML 解析器,我们可以利用之前学习的XPath语法,来快速的定位特定元素以及节点信息。

lxml python 官方文档:http://lxml.de/index.html

需要安装C语言库,可使用 pip 安装:pip install lxml

Lxml进行解析封装:

我们可以利用他来解析HTML代码,并且在解析HTML代码的时候,如果HTML代码不规范,他会自动的进行补全

1.使用 lxml 的 etree 库 from lxml import etree

2.python 3.5后的lxml模块中不能再直接引入etree模块,需要使用以下方法引用

from lxml import html

etree=html.etree

二、如何使用PyCharm写代码来实现网络爬虫

淄博 - 在线购票&影讯淄博电影院在线优惠购票及影讯排片查询https://movie.douban.com/cinema/nowplaying/zibo/还是以这个网址为例:

1.url就是你要爬虫页面的网址,headers是一个请求头,要这样寻找:

1.还是要在页面上右键检查

2.这个代码是一个简单的网络爬虫,用于从豆瓣电影的“正在上映”页面中提取电影信息。代码详情:

# 导入所需的库
import requests  # 用于发送HTTP请求
from bs4 import BeautifulSoup  # 用于解析HTML文档

# 设置目标URL和请求头
url = "https://movie.douban.com/cinema/nowplaying/zibo/"  # 豆瓣电影正在上映页面的URL
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0"
}  # 请求头,模拟浏览器访问,避免被服务器识别为爬虫

# 发送HTTP GET请求,获取网页内容
res = requests.get(url, headers=headers)  # 使用requests库发送请求,获取响应对象
soup = BeautifulSoup(res.text, "lxml")  # 使用BeautifulSoup解析HTML文档,lxml是解析器类型

# 查找电影列表
lists = soup.find("ul", class_="lists")  # 在HTML文档中查找第一个<ul>标签,且其class属性为"lists"
if lists:  # 如果找到了电影列表
    movies = []  # 初始化一个空列表,用于存储提取的电影信息
    # 查找所有<li>标签,且其class属性为"stitle"
    lis = lists.find_all("li", class_="stitle")
    for li in lis:  # 遍历每个<li>标签
        a = li.find("a")  # 在<li>标签中查找<a>标签
        if a:  # 如果找到了<a>标签
            title = a.get_text()  # 获取<a>标签的文本内容,即电影标题
            href = a["href"]  # 获取<a>标签的href属性值,即电影详情页的链接
            movie = {"title": title.strip(), "href": href}  # 将电影标题和链接以字典形式存储
            movies.append(movie)  # 将字典添加到movies列表中

    # 输出方式1:直接打印字典列表
    # print(movies)  # 直接输出movies列表,内容为字典形式

    # 输出方式2:换行输出每个电影的标题和链接
    for movie in movies:  # 遍历movies列表中的每个电影
        print(f"Title: {movie['title']}\nLink: {movie['href']}\n")  # 打印电影标题和链接,并换行
else:  # 如果没有找到电影列表
    print("未找到电影列表")  # 打印提示信息

# 或者这样写(注释掉的代码):
# if lists:
#     movies = []
#     for li in lists.find_all("li", class_="stitle"):
#         a = li.find("a")
#         if a:
#             title = a.get_text()
#             href = a["href"]
#             movies.append({"title": title.strip(), "href": href})
#     print(movies)  # 直接输出movies列表,内容为字典形式
# else:
#     print("未找到电影列表")  # 打印提示信息

3.代码功能总结

  1. 导入库:使用 requests 发送 HTTP 请求,使用 BeautifulSoup 解析 HTML 文档。

  2. 设置 URL 和请求头:定义目标 URL 和请求头,模拟浏览器访问。

  3. 发送请求并解析 HTML:获取网页内容并解析为 BeautifulSoup 对象。

  4. 查找电影列表:通过 HTML 标签和类名定位电影列表。

  5. 提取电影信息:从每个电影条目中提取标题和链接,并存储在列表中。

  6. 输出结果

    • 方式1:直接打印 movies 列表,输出字典形式的内容。

    • 方式2:遍历 movies 列表,换行输出每个电影的标题和链接。

这是运行详情,其他的页面也是同样的道理。


http://www.kler.cn/a/578777.html

相关文章:

  • 数据结构--【栈与队列】笔记
  • 计算机视觉算法实战——犯罪行为检测(主页有源码)
  • C++复试笔记(一)
  • PreTrainedModel 类代码分析:_load_pretrained_model
  • 基于Django创建一个WEB后端框架(DjangoRestFramework+MySQL)流程
  • 异常与日志简易版本
  • OpenCV 作为第三方库编译并在 C++ 项目中使用
  • 关于sqlalchemy的使用
  • 【备赛】stm32如何实现定时器延时/解决定时器中断刚开启就进中断的问题
  • 10. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Ocelot 网关--认证
  • uniApp实战二:仿今日相机水印功能
  • 猫耳大型活动提效——组件低代码化
  • 服务器数据恢复—raid5阵列中硬盘出现坏道的数据恢复流程
  • Spring Boot启动流程及源码实现深度解析
  • 前端非技术性场景面试题
  • 长上下文 GRPO
  • 基于PyTorch的深度学习5——神经网络工具箱
  • 百货店的诞生与现代商业革命:结合开源AI智能客服、AI智能名片与S2B2C商城小程序的新视角
  • 通过HTML有序列表(ol/li)实现自动递增编号的完整解决方案
  • SpringBatch之ResultSet.next()