关于python:爬虫系列连接网站与解析-HTML

37次阅读

共计 2661 个字符,预计需要花费 7 分钟才能阅读完成。

上一篇文章讲了:爬虫所带来的道德风险与法律责任

这篇文章是爬虫系列第三期,解说应用 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 归属地。

正文完
 0