五:《智慧的网络爬虫》— bs4数据解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 【8月更文挑战第4天】bs4(Beautiful Soup 4)是python的一个库,最主要的功能是从网页抓取数据,它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。BeautifulSoup会帮你节省数小时甚至数天的工作时间。在本篇文章的最后设置了一个爬取全国所有天气的项目作为本篇文章的总结,愿大家有所收获~

为什么要学习这么多的数据解析方式:

​ 随着学习的深入,会遇到很多很多的网站;网站的布局是多种多样的,学习更多的数据解析方式是用来去适应网站布局,找到一种最适合当前网页解析的方法,提高解析数据的效率

1.bs4介绍:

  • bs4全名是Beautiful Soup 4bs4是Python的一个第三方库,最主要的功能是从网页抓取数据;bs4提供一些简单的,Python式的函数用来处理导航,搜索,修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据。因为简单,所以不需要多少代码就可以写出一个完整的程序
  • Beautiful Soup是一个可以从HTMLXML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。Beautiful Soup会帮节省数小时甚至数天的工作时间。

bs4的安装:

#在终端输入
pip install bs4

注意:

由于bS4解析页面时需要依赖文档解析器,所以还要安装lxml作为解析库。bs4是依赖lxml库的,只有先安装lxml库才可以安装bs4

lxml的安装:

#在终端输入
pip install lxml

当然,Python 也自带了一个文档解析库 html.parser, 但是其解析速度要稍慢于 lxml

除了上述解析器外,还可以使用html5lib解析器。

html5lib的安装:

#在终端输入
pip install html5lib

注意:

  • 推荐使用lxml作为解析器,因为效率更高。在Python2.7.3之前的版本和Python3.2.2之前的版本,必须安装lxmlhtml5lib, 因为那些Python版本的标准库中内置的HTML解析方法不够稳定。
  • 如果一段HTMLXML文档格式不正确的话,那么在不同的解析器中返回的结果可能是不一样的。因此我们可以根据情况去选择对应的文档解析器。具体情况具体分析。

2.bs4的使用(快速入门)

(1)创建bs4解析对象

1.导入解析包:

from bs4 import BeautifulSoup #用的是 BeautifulSoup 这个类

2.创建BeautifulSoup解析对象:

soup = BeautifulSoup(html_doc, 'html.parser') #实例化BeautifulSoup对象

#html_doc:表示要解析的文档(要解析的网页源代码)
#html.parser:表示解析文档时所用的文档解析器,此处的解析器也可以是 lxml 或者 html5lib

示例代码:

from bs4 import BeautifulSoup

html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""
# 创建一个soup对象
soup = BeautifulSoup(html_doc,'lxml')
print(soup,type(soup))
# 格式化文档输出
print(soup.prettify())
# 获取title标签内容 <title>The Dormouse's story</title>
print(soup.title) 
# 获取title标签名称: title
print(soup.title.name) 
# title标签里面的文本内容: The Dormouse's story
print(soup.title.string)
# 获取p段落
print(soup.p)
"""
注意:soup对象所返回的内容都是第一条数据
"""

3.bs4的对象种类:

  • tag : 标签
  • NavigableString : 标签中的文本对象,可导航的字符串
  • BeautifulSoup : bs4对象
  • Comment : 注释
from bs4 import BeautifulSoup

html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""

soup = BeautifulSoup(html_doc, "html.parser")

'''tag:标签'''
print(type(soup.title))
print(type(soup.p))
print(type(soup.a))

'''NavigableString : 可导航的字符串'''
from bs4.element import NavigableString
print(type(soup.title.string))

'''BeautifulSoup : bs对象'''
soup = BeautifulSoup(html_doc, "html.parser")
print(type(soup))

'''Comment : 注释'''
html = "<b><!--加油学习--></b>"
soup2 = BeautifulSoup(html, "html.parser")
print(soup2.b.string, type(soup2.b.string))

4.遍历文档树:

遍历子节点:

  • contents 返回的是一个所有子节点的列表(了解)
  • children 返回的是一个子节点的迭代器(了解)
  • descendants 返回的是一个生成器遍历子子孙孙(了解)
  • string 获取标签里面的内容(掌握)
  • strings 返回是一个生成器对象用过来获取多个标签内容(掌握)
  • stripped_strings 和strings 基本一致 但是它可以把多余的空格去掉(掌握)

遍历父节点(了解):

  • parent 直接获得父节点
  • parents 获取所有的父节点

遍历兄弟节点(了解):

  • next_sibling 下一个兄弟结点
  • previous_sibling 上一个兄弟结点
  • next_siblings 下一个所有兄弟结点
  • previous_siblings上一个所有兄弟结点

示例代码:

from bs4 import BeautifulSoup

html_doc = """
<html>
<head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">
Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
</body>
</html>
"""

#实例化bs4对象
soup = BeautifulSoup(html_doc, "lxml")

r1 = soup.title.string  # 获取单个标签中的内容
print(r1)

# 获取html中所有的标签内容
r2 = soup.html.strings  # 返回是一个生成器对象用过来获取多个标签内容
print(r2)
#print(list(r2))
for i in r2:
    print(i)

r3 = soup.html.stripped_strings  # 和strings方法基本一致 但是它可以把多余的空格去掉
print(r3)  # 生成器对象 <generator object Tag._all_strings at 0x000001A73C538AC8>
#print(list(r3))
for i in r3:
    print(i)

5.搜索文档树:

"""

(1)find():返回搜索到的第一条数据
(2)find_all():以列表形式返回所有的搜索到的标签数据

"""

示例代码:

from bs4 import BeautifulSoup

html = """
<table class="tablelist" cellpadding="0" cellspacing="0">
    <tbody>
        <tr class="h">
            <td class="l" width="374">职位名称</td>
            <td>职位类别</td>
            <td>人数</td>
            <td>地点</td>
            <td>发布时间</td>
        </tr>
        <tr class="even">
            <td class="l square"><a target="_blank" href="position_detail.php?id=33824&keywords=python&tid=87&lid=2218">22989-金融云区块链高级研发工程师(深圳)</a></td>
            <td>技术类</td>
            <td>1</td>
            <td>深圳</td>
            <td>2017-11-25</td>
        </tr>
        <tr class="odd">
            <td class="l square"><a target="_blank" href="position_detail.php?id=29938&keywords=python&tid=87&lid=2218">22989-金融云高级后台开发</a></td>
            <td>技术类</td>
            <td>2</td>
            <td>深圳</td>
            <td>2017-11-25</td>
        </tr>
        <tr class="even">
            <td class="l square"><a target="_blank" href="position_detail.php?id=31236&keywords=python&tid=87&lid=2218">SNG16-腾讯音乐运营开发工程师(深圳)</a></td>
            <td>技术类</td>
            <td>2</td>
            <td>深圳</td>
            <td>2017-11-25</td>
        </tr>
        <tr class="odd">
            <td class="l square"><a target="_blank" href="position_detail.php?id=31235&keywords=python&tid=87&lid=2218">SNG16-腾讯音乐业务运维工程师(深圳)</a></td>
            <td>技术类</td>
            <td>1</td>
            <td>深圳</td>
            <td>2017-11-25</td>
        </tr>
        <tr class="even">
            <td class="l square"><a target="_blank" href="position_detail.php?id=34531&keywords=python&tid=87&lid=2218">TEG03-高级研发工程师(深圳)</a></td>
            <td>技术类</td>
            <td>1</td>
            <td>深圳</td>
            <td>2017-11-24</td>
        </tr>
        <tr class="odd">
            <td class="l square"><a target="_blank" href="position_detail.php?id=34532&keywords=python&tid=87&lid=2218">TEG03-高级图像算法研发工程师(深圳)</a></td>
            <td>技术类</td>
            <td>1</td>
            <td>深圳</td>
            <td>2017-11-24</td>
        </tr>
        <tr class="even">
            <td class="l square"><a target="_blank" href="position_detail.php?id=31648&keywords=python&tid=87&lid=2218">TEG11-高级AI开发工程师(深圳)</a></td>
            <td>技术类</td>
            <td>4</td>
            <td>深圳</td>
            <td>2017-11-24</td>
        </tr>
        <tr class="odd">
            <td class="l square"><a target="_blank" href="position_detail.php?id=32218&keywords=python&tid=87&lid=2218">15851-后台开发工程师</a></td>
            <td>技术类</td>
            <td>1</td>
            <td>深圳</td>
            <td>2017-11-24</td>
        </tr>
        <tr class="even">
            <td class="l square"><a target="_blank" href="position_detail.php?id=32217&keywords=python&tid=87&lid=2218">15851-后台开发工程师</a></td>
            <td>技术类</td>
            <td>1</td>
            <td>深圳</td>
            <td>2017-11-24</td>
        </tr>
        <tr class="odd">
            <td class="l square"><a id="test" class="test" target='_blank' href="position_detail.php?id=34511&keywords=python&tid=87&lid=2218">SNG11-高级业务运维工程师(深圳)</a></td>
            <td>技术类</td>
            <td>1</td>
            <td>深圳</td>
            <td>2017-11-24</td>
        </tr>
    </tbody>
</table>
"""

soup = BeautifulSoup(html,'lxml')

#(1)获取所有的tr标签:
trs = soup.find_all("tr")  # 这是个列表过滤器
for tr in trs:
    print(tr)
    print("*" * 150)

#(2)获取第二个tr标签:
tr = soup.find_all("tr")[1]
print(tr)

#(3)获取获取所有的 class = even 的tr标签:
trs = soup.find_all("tr", class_="even")  # 这里如果直接用class不行 class是作为我们的关键字
# trs = soup.find_all("tr", attrs={"class": "even"})  这两种方式都可
for tr in trs:
    print(tr)
    print("*" * 150)

#(4)获取所有的a标签的href属性:
a_li = soup.find_all("a")
for a in a_li:
    href = a.get("href")
    print(href)

#(5)获取所有的岗位信息:
trs = soup.find_all("tr")[1:] # 将第一个标签过滤掉
for tr in trs:
    tds = tr.find_all("td")
    job_name = tds[0].string
    print(job_name)

a_li = soup.find_all("a") # 两种方式都可以
for a in a_li:
    href = a.string
    print(href)

6.select()方法:

我们也可以通过CSS选择器的方式来提取数据。但是需要注意的是这里面需要我们掌握CSS语法

CSS学习参考:在这里就不做过多讲述了

https://www.w3school.com.cn/cssref/css_selectors.asp

7.修改文档树:(了解)

  • 修改tag的名称和属性
  • 修改string 属性赋值,就相当于用当前的内容替代了原来的内容
  • append() 像tag中添加内容,就好像Python的列表的 .append() 方法
  • decompose() 修改删除段落,对于一些没有必要的文章段落我们可以给他删除掉
"""本地自卫"""

from bs4 import BeautifulSoup

html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""
soup = BeautifulSoup(html_doc, "html.parser")

# 修改tag的名称和属性
tag_p = soup.p
print(tag_p)
tag_p.name = "w"
tag_p["class"] = "content"
print(tag_p)


# 修改string  属性赋值,就相当于用当前的内容替代了原来的内容
tag_p = soup.p
print(tag_p.text)
tag_p.string = "you need python"
print(tag_p.text)

# append() 像tag中添加内容,就好像Python的列表的 .append() 方法
tag_p = soup.p
print(tag_p)
tag_p.append("真的!")
print(tag_p)

# decompose() 修改删除段落,对于一些没有必要的文章段落我们可以给他删除掉
r = soup.title
print(r)
r.decompose()
print(soup)

8.csv模块(必须学会)

CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本格式,用以存储表格数据,包括数字或者字符。很多程序在处理数据时都会碰到csv这种格式的文件。

csv模块的使用:

导入模块:csv模块是内置库,不用我们去安装,直接导入使用即可

import csv

注意: csv文件用WPS打开不会出现乱码

写入csv文件:

1.通过创建writer对象,主要用到2个方法。一个是writerow,写入一行。另一个是writerows写入多行
2.使用DictWriter可以使用字典的方式把数据写入进去

读取csv文件:

1.通过reader()读取到的每一条数据是一个列表。可以通过下标的方式获取具体某一个值
2.通过DictReader()读取到的数据是一个字典。可以通过Key值(列名)的方式获取数据

示例代码:

"""csv写入文件"""

# 方式一
import csv

persons = [('温轻舟', 20, 185), ('舟舟', 22, 183), ('欣欣', 20, 175)]
headers = ('name', 'age', 'heigth')  # 表头
with open('persons.csv', mode='w', encoding='utf-8',newline="")as f:
    writer = csv.writer(f)  # 创建writer对象
    writer.writerow(headers)  # 将表头写入进去

    """通过for循环的方式写入数据"""
    # for i in persons:  # 遍历每一条数据
    #     writer.writerow(i)  # 将列表中的值写入进去

    writer.writerows(persons)


# 方式二(用的更多)
# 通过 DictWriter 写入字典数据格式
import csv

persons = [
    {
   'name': '温轻舟', 'age': 18, 'gender': '男'},
    {
   'name': '舟舟', 'age': 18, 'gender': '男'},
    {
   'name': '欣欣', 'age': 18, 'gender': '女'}
]

headers = ('name', 'age', 'gender')
with open('person2.csv', mode='w', encoding='utf-8',newline="")as f:
    writer = csv.DictWriter(f, headers)  # 创建writer对象
    writer.writeheader()  # 写入表头
    writer.writerows(persons)


"""csv读取文件"""
# 方式一
import csv
with open('persons.csv',mode='r',encoding='utf-8',newline="")as f:
    reader = csv.reader(f)  # 读取对象
    print(reader)   # <_csv.reader object at 0x0000021D7424D5F8>
    for i in reader:
        print(i)

# 方式二
# 通过 DictReader 的方式进行读取
import csv
with open('person2.csv', mode='r', encoding='utf-8',newline="")as f:
    reader = csv.DictReader(f)
    print(reader)  # <_csv.reader object at 0x0000021D7424D5F8>
    for i in reader:
        print(i)
        for j, k in i.items():  # 遍历字典当中的键值对
            print(j, k)

9:bs4项目实战:

爬取全国所有城市的温度(最低气温) 并保存到csv文件中:

"""
需求:爬取全国所有天气,并保存到csv文件中

思路分析:
(1)保存格式:以字典的形式保存 —— {'城市':'xxx','温度':'yyy'}
(2)url分析:
    华北:http://www.weather.com.cn/textFC/hb.shtml
    东北:http://www.weather.com.cn/textFC/db.shtml
    华东:http://www.weather.com.cn/textFC/hd.shtml
    华中:http://www.weather.com.cn/textFC/hz.shtml
    华南:http://www.weather.com.cn/textFC/hn.shtml
    西北:http://www.weather.com.cn/textFC/xb.shtml
    西南:http://www.weather.com.cn/textFC/xn.shtml
    港澳台:http://www.weather.com.cn/textFC/gat.shtml

    经过分析得出模板url为:
        http://www.weather.com.cn/textFC/{}.shtml

(3)获取网络源码然后创建soup对象:
(4)使用bs4语法获取目标数据(需要分析网络源码):
        4.1 先找到整页的div class = 'conMidtab'标签
        4.2 接下来找到它下面的每一个省或者是直辖市的table标签
        4.3 对拿到的tables数据进行过滤 找到table标签下面所有的tr标签 需要注意,要把前2个tr标签过滤掉(去掉表头)
        4.4 再找到tr标签里面所有的td标签(第0个就是城市 倒数第二个就是温度)
(5)将获取的目标数据进行存储:
(6)代码实现:
    1.定义一个函数用于获取网页源代码并解析数据
        def Getjiexi():
            pass
    2.定义一个函数用于保存数据
        def Baocun():
            pass
    3.定义一个主函数用于各个函数执行
        def main():
            pass
    4.程序主入口:
        if __name__ = '__main__':
            main()
"""
import requests
from bs4 import BeautifulSoup
import csv


# 1.定义一个函数用于获取网页源代码并解析数据
def Getjiexi(url):
    # 请求头信息
    headers = {
   
        "Accept": "*/*",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Connection": "keep-alive",
        "^Cookie": "f_city=^%^E8^%^8B^%^8F^%^E5^%^B7^%^9E^%^7C101190401^%^7C; Hm_lvt_080dabacb001ad3dc8b9b9049b36d43b=1721155272,1721155919; HMACCOUNT=F3D5996C93543DEC; Hm_lpvt_080dabacb001ad3dc8b9b9049b36d43b=1721156639^",
        "Referer": "http://www.weather.com.cn/",
        "Upgrade-Insecure-Requests": "1",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
        "If-Modified-Since": "Thu, 18 Mar 2010 07:03:16 GMT",
        "^If-None-Match": "^\\^4ba1d034-f1^^^",
        "^sec-ch-ua": "^\\^Not/A)Brand^^;v=^\\^8^^, ^\\^Chromium^^;v=^\\^126^^, ^\\^Google",
        "sec-ch-ua-mobile": "?0",
        "^sec-ch-ua-platform": "^\\^Windows^^^",
        "Sec-Fetch-Dest": "image",
        "Sec-Fetch-Mode": "no-cors",
        "Sec-Fetch-Site": "cross-site",
        "^Intervention": "^<https://www.chromestatus.com/feature/5718547946799104^>; level=^\\^warning^^^",
        "Referer;": "",
        "If-None-Match": "765c1d94b5f52566796427f2fccf3ac2",
        "X-Requested-With": "XMLHttpRequest"
    }
    response = requests.get(url, headers=headers)
    response.encoding = 'utf-8'
    # 获取网络源码
    html = response.text
    # print(html)

    # 1.创建soup对象,然后进行解析
    # soup = BeautifulSoup(html,'lxml')
    soup = BeautifulSoup(html,'html5lib')

    # 2 先找到整页的div class = 'conMidtab'标签
    conMidtab = soup.find('div', class_='conMidtab')  # 在这里以 html 为基准去寻找标签
    # print(conMidtab)

    # 3 接下来找到它下面的每一个省或者是直辖市的table标签
    tables = conMidtab.find_all('table')  # 在这里以 conMidtab 为基准去寻找标签,将大盒子处理成了小盒子,保证了数据的准确性
    # print(tables)

    # 4对拿到的tables数据进行过滤,找到table标签下面所有的tr标签(需要注意,要把前2个tr标签过滤掉)

    # 定义一个列表 将字典数据进行存储 然后准备写入csv
    templist = []

    for table in tables:
        trs = table.find_all('tr')[2:]  # 把前2个tr标签过滤掉
        # print(trs)
        for index, tr in enumerate(trs):
            # print(index,tr)
            # 在找到tr标签里面所有的td标签(第0个就是城市 倒数第二个就是温度)
            tds = tr.find_all('td')
            # print(tds)
            # 获取城市存在的td标签
            city_td = tds[0]

            # 写判断的原因是因为需要对第一个tr的城市进行判断
            if index == 0:
                city_td = tds[1]
            # print(city_td)

            # 定义一个字典用于保存数据  城市和温度
            tempdict = {
   }

            # 获取城市文本数据
            city = list(city_td.stripped_strings)[0]
            # print(city)
            # 获取最低温度
            temp_td = tds[-2]
            temp = list(temp_td.stripped_strings)[0]
            # print(temp)

            tempdict['city'] = city
            tempdict['temp'] = temp
            # 将字典数据添加到列表中
            templist.append(tempdict)
    # print(templist)  # 通过打印发现 {'city': '河北', 'temp': '20'} 这个根本不存在
    '''
        如果是直辖市你取第0个td标签没有问题,所有的数据也是正常的
        如果是省你不能取第0个td标签了(省的名字),取第一个td标签,但是所有的都取第一个td那么这样其它城市又不对了。因为其它的城市都是第0个td标签
        我们只需要做一个判断,什么时候取第0个td 什么时候取第一个td
    '''
    # 将获取的数据进行返回 用于下一步进行数据的存储
    return templist

# 2.定义一个函数用于保存数据
def Baocun(alltemplist):
    header = ('city', 'temp')
    with open('weather.csv', mode='w', encoding='utf-8', newline='')as f:
        # 创建写入对象
        writer = csv.DictWriter(f, header)
        # 写入表头
        writer.writeheader()
        # 写入数据
        writer.writerows(alltemplist)


# 3.定义一个主函数用于各个函数执行
def main():
    # url = 'http://www.weather.com.cn/textFC/hb.shtml'
    # templist = Getjiexi(url)
    # print(templist)

    # 定义一个列表保存全国城市的温度
    alltemplist = []
    model_url = "http://www.weather.com.cn/textFC/{}.shtml"  # 模板url
    # 定义一个列表 用于保存八大地区的url

    urlkey_list = ["hb", "db", "hd", "hz", "hn", "xb", "xn", "gat"]
    for i in urlkey_list:
        every_url = model_url.format(i)
        templist = Getjiexi(every_url)
        print(templist)
        alltemplist += templist
        # print(len(alltemplist))  # 这里我们会发现数据不对,是因为 lxml 解析器不适合,换成 html5lib 即可
    Baocun(alltemplist)

# 4.程序主入口:
if __name__ == '__main__':
    main()
目录
相关文章
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习的魔法:如何用神经网络解锁数据的奥秘
在人工智能的璀璨星空中,深度学习犹如一颗最亮的星,它以其强大的数据处理能力,改变了我们对世界的认知方式。本文将深入浅出地介绍深度学习的核心概念、工作原理及其在不同领域的应用实例,让读者能够理解并欣赏到深度学习技术背后的奇妙和强大之处。
15 3
|
9天前
|
数据采集 存储 JavaScript
如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取
在现代网页开发中,复杂的HTML结构给爬虫技术带来挑战。传统的解析库难以应对,而Cheerio和jsdom在Node.js环境下提供了强大工具。本文探讨如何在复杂HTML结构中精确提取数据,结合代理IP、cookie、user-agent设置及多线程技术,提升数据采集的效率和准确性。通过具体示例代码,展示如何使用Cheerio和jsdom解析HTML,并进行数据归类和统计。这种方法适用于处理大量分类数据的爬虫任务,帮助开发者轻松实现高效的数据提取。
如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取
|
1天前
|
机器学习/深度学习 人工智能 TensorFlow
深入骨髓的解析:Python中神经网络如何学会‘思考’,解锁AI新纪元
【9月更文挑战第11天】随着科技的发展,人工智能(AI)成为推动社会进步的关键力量,而神经网络作为AI的核心,正以其强大的学习和模式识别能力开启AI新纪元。本文将探讨Python中神经网络的工作原理,并通过示例代码展示其“思考”过程。神经网络模仿生物神经系统,通过加权连接传递信息并优化输出。Python凭借其丰富的科学计算库如TensorFlow和PyTorch,成为神经网络研究的首选语言。
7 1
|
2天前
|
存储 SQL 安全
网络安全的盾牌:漏洞防御与加密技术解析
【9月更文挑战第9天】在数字时代,网络安全的重要性日益凸显,它不仅是保护个人隐私和数据安全的屏障,也是维护社会稳定和经济繁荣的关键。本文将深入探讨网络安全中的漏洞防御策略、加密技术的运用以及提升公众安全意识的必要性,旨在通过知识分享,增强大众对网络威胁的防范能力,共同构建更安全的网络环境。
|
7天前
|
存储 安全 网络安全
云计算与网络安全:如何保护您的数据在云端
【9月更文挑战第4天】在数字化时代,云计算已成为企业和个人存储和处理数据的首选方式。然而,随着云服务的普及,网络安全问题也日益凸显。本文将探讨云计算的基本原理,网络安全的重要性,以及如何在使用云服务时保护数据安全。我们将从云服务的基本概念出发,深入讨论网络安全的关键技术,最后提供一些实用的建议,帮助您在使用云服务时确保数据安全。
30 6
|
10天前
|
XML JSON API
淘宝京东商品详情数据解析,API接口系列
淘宝商品详情数据包括多个方面,如商品标题、价格、图片、描述、属性、SKU(库存量单位)库存、视频等。这些数据对于买家了解商品详情以及卖家管理商品都至关重要。
|
11天前
|
数据采集 JavaScript 前端开发
构建简易Python爬虫:抓取网页数据入门指南
【8月更文挑战第31天】在数字信息的时代,数据抓取成为获取网络资源的重要手段。本文将引导你通过Python编写一个简单的网页爬虫,从零基础到实现数据抓取的全过程。我们将一起探索如何利用Python的requests库进行网络请求,使用BeautifulSoup库解析HTML文档,并最终提取出有价值的数据。无论你是编程新手还是有一定基础的开发者,这篇文章都将为你打开数据抓取的大门。
|
4天前
|
存储 JSON API
Python编程:解析HTTP请求返回的JSON数据
使用Python处理HTTP请求和解析JSON数据既直接又高效。`requests`库的简洁性和强大功能使得发送请求、接收和解析响应变得异常简单。以上步骤和示例提供了一个基础的框架,可以根据你的具体需求进行调整和扩展。通过合适的异常处理,你的代码将更加健壮和可靠,为用户提供更加流畅的体验。
21 0
|
8天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:保护数据的关键策略
在数字化时代,网络安全和信息安全成为维护个人隐私和企业资产的前沿防线。本文深入探讨了网络安全漏洞的根源、加密技术的应用以及提升安全意识的重要性。通过分析最新的网络攻击案例和防御措施,我们旨在为读者提供一套实用的知识体系,以识别和防范潜在的网络威胁。
|
11天前
|
开发者 图形学 API
从零起步,深度揭秘:运用Unity引擎及网络编程技术,一步步搭建属于你的实时多人在线对战游戏平台——详尽指南与实战代码解析,带你轻松掌握网络化游戏开发的核心要领与最佳实践路径
【8月更文挑战第31天】构建实时多人对战平台是技术与创意的结合。本文使用成熟的Unity游戏开发引擎,从零开始指导读者搭建简单的实时对战平台。内容涵盖网络架构设计、Unity网络API应用及客户端与服务器通信。首先,创建新项目并选择适合多人游戏的模板,使用推荐的网络传输层。接着,定义基本玩法,如2D多人射击游戏,创建角色预制件并添加Rigidbody2D组件。然后,引入网络身份组件以同步对象状态。通过示例代码展示玩家控制逻辑,包括移动和发射子弹功能。最后,设置服务器端逻辑,处理客户端连接和断开。本文帮助读者掌握构建Unity多人对战平台的核心知识,为进一步开发打下基础。
32 0

热门文章

最新文章

推荐镜像

更多