这篇文章是爬虫系列第三期,讲解使用 Python 连接到网站,并使用 BeautifulSoup 解析 HTML 页面。

在 Python 中我们使用 requests 库来访问目标网站,使用 BeautifulSoup 对获取的内容进行解析。由于这两个库并不是 Python 标准库,因此需要单独安装这两个库:

pip install beautifulsoup4

pip install requests

下面是获取网站内容的示例代码:

from urllib.error import HTTPError, URLError
import requests
from bs4 import BeautifulSoup from config import logger_config class ProcessConnection:
def __init__(self):
logger_name = ‘web_scraping'
self._logger_write_file = logger_config.LoggingConfig().init_logging(logger_name) def init_connection(self, uri):
# 连接网站
try:
session = requests.session()
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"}
html = session.get(uri, headers=headers)
except (HTTPError, URLError) as e:
self._logger_write_file.error('执行 get_sms_data 函数出错,具体错误内容:{message}'.format(message=e))
return False
try:
bsObj = BeautifulSoup(html.text, features='html.parser')
return bsObj
except AttributeError as e:
self._logger_write_file.error('执行 get_sms_data 函数出错,具体错误内容:{message}'.format(message=e))
return False

首先使用了 requests 会话对象发送请求,并且设置了 User-agent,这里 User-agent 可以自定,这就为伪造 User-agent 提供了便利,同时也告诉了服务器客户端接受那些内容类型:

session = requests.session()
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"}

网络如果连接出现了错误,对错误进行异常处理:

except (HTTPError, URLError) as e:

BeautifulSoup 解析 HTML 文档出现错误,抛出 AttributeError:

except AttributeError as e:

以上就完成了一个使用 Python 连接网站的过程。这个时候如果没有异常我们就会拿到网站的 HTML 代码,之后根据需要进一步对 HTML 进行内容解析,获取自己需要的内容。

解析 HTML

如果你已经确定了目标内容,可能是采集一个名字,一组统计数据,或者一段文字。你的目标内容可能隐藏在一个 HTML “烂泥堆”的第20层标签里,带有许多没用的标签或 HTML 属性,你按照目标网站的代码层级你有可能写出如下的一行代码抽取内容:

bsObj.findAll("table")[4].findAll("tr")[2].find("td").findAll("section")[1].find("a")

虽然以上写法可以达到目标,但是这样的写法看起来并不是很好。除了代码欠缺美感之外,还有一个问题就是:当网站管理员对网站稍作修改之后,这行代码便会失效。

例如,我们需要获得自己的公网 IP 地址,我们可以通过查询这个网站获得:https://www.pdflibr.com,之后查看网页源代码,找到自己的 IP 地址,又如下源代码:

<div class="ip-wrap ip-item right-item">
<div class="item-text-title">IP信息</div>
<div class="user-agent-content">
<div class="layout layout-flex-direction item-result">
<div class="left-name">当前IP地址:</div>
<div class="right-result">106.125.148.85</div>
</div>
<div class="layout layout-flex-direction item-result">
<div class="left-name">归属地:</div>
<div class="right-result">中国 广东 广州</div>
</div>
</div>
</div>

我们使用 BeautifulSoup 经行解析:

result = bsObj.findAll("div", {"class": "right-result"})
for child in result:
get_ip = child.get_text()
print(get_ip)

这样就可以获取自己的 IP 以及 IP 归属地。

爬虫系列:连接网站与解析 HTML的更多相关文章

  1. 爬虫系列二(数据清洗--->bs4解析数据)

    一 BeautifulSoup解析 1 环境安装 - 需要将pip源设置为国内源,阿里源.豆瓣源.网易源等 - windows (1)打开文件资源管理器(文件夹地址栏中) (2)地址栏上面输入 %ap ...

  2. 爬虫系列二(数据清洗--->xpath解析数据)

    一 xpath介绍 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. XPath 使用路径表达式在 XML 文档中进行导航 XPath 包 ...

  3. 爬虫系列2:Requests+Xpath 爬取租房网站信息

    Requests+Xpath 爬取租房网站信息 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参考前文 ...

  4. 爬虫系列3:Requests+Xpath 爬取租房网站信息并保存本地

    数据保存本地 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参考前文 爬虫系列2:https://www ...

  5. Java爬虫系列三:使用Jsoup解析HTML

    在上一篇随笔<Java爬虫系列二:使用HttpClient抓取页面HTML>中介绍了怎么使用HttpClient进行爬虫的第一步--抓取页面html,今天接着来看下爬虫的第二步--解析抓取 ...

  6. Python爬虫系列(七):提高解析效率

    如果仅仅因为想要查找文档中的<a>标签而将整片文档进行解析,实在是浪费内存和时间.最快的方法是从一开始就把<a>标签以外的东西都忽略掉. SoupStrainer 类可以定义文 ...

  7. python 全栈开发,Day134(爬虫系列之第1章-requests模块)

    一.爬虫系列之第1章-requests模块 爬虫简介 概述 近年来,随着网络应用的逐渐扩展和深入,如何高效的获取网上数据成为了无数公司和个人的追求,在大数据时代,谁掌握了更多的数据,谁就可以获得更高的 ...

  8. Java爬虫系列之实战:爬取酷狗音乐网 TOP500 的歌曲(附源码)

    在前面分享的两篇随笔中分别介绍了HttpClient和Jsoup以及简单的代码案例: Java爬虫系列二:使用HttpClient抓取页面HTML Java爬虫系列三:使用Jsoup解析HTML 今天 ...

  9. 爬虫系列:存储 CSV 文件

    上一期:爬虫系列:存储媒体文件,讲解了如果通过爬虫下载媒体文件,以及下载媒体文件相关代码讲解. 本期将讲解如果将数据保存到 CSV 文件. 逗号分隔值(Comma-Separated Values,C ...

随机推荐

  1. vsftpd 编译安装 及 隐藏版本号

    环境:Redhat Enterprise Linux AS 4.0 update2(i386) 不提示,均表示以root权限执行. [注:]//为注释符,如"// 建立MySQL组" ...

  2. 微信小程序API接口封装

    @ 目录 一,让我们看一下项目目录 二,让我们熟悉一下这三个文件目的(文件名你看着办) 三,页面js中如何使用 今天的API的封装,我们拿WX小程序开发中,对它的API (wx.request)对这个 ...

  3. 在Ubuntu下的C语言编程

    以运行在虚拟机下的Ubuntu为例: mkdir fenchen 来创建一个文件夹 cd fenchen 切换到这个文件夹下面 vi test.c 创建并编辑一个test.c文件 按 i 编辑,之后把 ...

  4. 让 AI 为你写代码 - 体验 Github Copilot

    前几天在群里看到有大神分享 Copoilot AI 写代码,看了几个截图有点不敢相信自己的眼睛.今天赶紧自己也来体验一下 Copoilot AI 写代码到底有多神奇. 申请 现在 Copoilot 还 ...

  5. win10+MX350显卡+CUDA10.2+PyTorch 安装过程记录 深度学习环境配置

    https://blog.csdn.net/m0_37867091/article/details/105788637

  6. dotnet 6 使用 CreateSymbolicLink 创建文件夹符号链接

    本文告诉大家如何使用 dotnet 6 提供的 Directory.CreateSymbolicLink 和 File.CreateSymbolicLink 方法创建文件夹和文件的符号链接 Direc ...

  7. 基于大量图片与实例深度解析Netty中的核心组件

    本篇文章主要详细分析Netty中的核心组件. 启动器Bootstrap和ServerBootstrap作为Netty构建客户端和服务端的路口,是编写Netty网络程序的第一步.它可以让我们把Netty ...

  8. C# WINFORM进销存系统开发(内涵免费源码+部分实操视频讲解)

    互联网的时代,电商火爆,大家都开始进行线上销售货品,那你是如何管理你的商品库存和进销问题?软积木--小敏用的是C# WINFORM进销存系统来管理我的数据,给我带来了很多便利. 它是高频需求项目,很多 ...

  9. pytest-mian函数运行

    1.设置多并发运行 1.命令行安装 pip install pytest-xdist #安装插件,进行多并发运行,#调用:-n -5 import pytest # pytest.main([&quo ...

  10. 菜鸡的Java笔记第二 - java 数据类型

    1.程序的本质实际上就是在于数据的处理上. JAVA中的数据类型有两类 基本数据类型:是进行内容的操作而不是内存的操作 数值型: 整型:byte(-128 ~ 127),short(-32768 ~ ...