这篇文章是爬虫系列第三期,讲解使用 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. VS2013快捷键及技巧 / 智能插件

    复制/剪切/删除整行代码 1)如果你想复制一整行代码,只需将光标移至该行,再使用组合键"Ctrl+C"来完成复制操作,而无需选择整行. 2)如果你想剪切一整行代码,只需将光标移至该 ...

  2. 攻防世界 Misc 新手练习区 stegano CONFidence-DS-CTF-Teaser Writeup

    攻防世界 Misc 新手练习区 stegano CONFidence-DS-CTF-Teaser Writeup 题目介绍 题目考点 隐写术 摩斯密码 Writeup 下载附件是PDF文件打开,研究一 ...

  3. Linux wget 命令 使用总结

    简介 wget命令用来从指定的URL下载文件.wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕.如果是服务器 ...

  4. PTA 最小堆插入元素和删除堆顶(无哨兵元素) (20分)

    PTA 最小堆插入元素和删除堆顶(无哨兵元素) (20分) 对于给定的最小堆(优先队列),分别实现插入元素和删除堆顶的函数. 函数接口定义: int insertIntoHeap(struct Hea ...

  5. Linux usb 1. 总线简介

    文章目录 1. USB 发展历史 1.1 USB 1.0/2.0 1.2 USB 3.0 1.3 速度识别 1.4 OTG 1.5 phy 总线 1.6 传输编码方式 2. 总线拓扑 2.1 Devi ...

  6. 聊一聊声明式接口调用与Nacos的结合使用

    背景 对于公司内部的 API 接口,在引入注册中心之后,免不了会用上服务发现这个东西. 现在比较流行的接口调用方式应该是基于声明式接口的调用,它使得开发变得更加简化和快捷. .NET 在声明式接口调用 ...

  7. [luogu7476]苦涩

    维护线段树,在其每一个节点上维护一个set(可重),以及子树内所有set的最大值 考虑下传标记,如果将所有元素全部下传复杂度显然不正确,但注意到我们仅关心于其中的最大值,即仅需要将最大值下传即可 其有 ...

  8. 第04章_MySQL运算符详解

    第04章_运算符 1. 算术运算符 算术运算符主要用于数学运算,其可以连接运算符前后的两个数值或表达式,对数值或表达式进行加(+).减(-).乘(*).除(/)和取模(%)运算. 1.加法与减法运算符 ...

  9. 阿里云服务器的MySQL连接和vscode远程连接

    目录 一.前言 二.使用Navicat等软件连接MySQL 1. 修改服务器系统密码 2. 防火墙选项添加MySQL 3. 使用Navicat连接 三.使用vscode连接服务器 一.前言 双十一的时 ...

  10. 【HTML】标签

    HTML标签 2020-09-08  15:37:37  by冲冲 1. 标签 <!DOCTYPE html> <html> <head> <meta cha ...