hahawangzi 发表于 2020-4-22 15:15

Python 关于微软更新补丁网页爬去问题!?

想爬取微软更新补丁网站的 KB号和内部版本号发现
我在开发工具里看到的代码和爬取的代码完全是两个源代码,直接爬取的
#_*_ coding="utf-8" _*_

import re
import sys,os
import requests
from bs4 import BeautifulSoup

#--------------------------------------------
url = 'https://support.microsoft.com/zh-cn/help/4529964/windows-10-update-history'
headers={
         'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
         #'Referer':"https://www.manhuadb.com/author/370"
         
      }
web = requests.get(url,headers=headers)
gengxin = BeautifulSoup(web.text,'lxml')
dav = gengxin.find_all('script',type="text/javascript")
for i in dav.find(re.compile("minorVersions+?")):
    print(i)
上述 源码 我发现 版本号都在一个JavaScript里面,跟开发者工具看到的完全不一样,按照find_all('div',ng-class=)查找是空值。
是不是因为这个网页是动态网页的缘故,是不是要运用到Selenium的用法
这种。请教下各位老师,指点迷津

dayer 发表于 2020-4-22 15:33

他在<script>标签里面藏着,你给提取出来就行
<script type="text/javascript">
      //JSLL initialization. See reference documentation at https://osgwiki.com/wiki/JSLLv4



      awa.init({
            coreData: {
                appId: 'JS:support.microsoft.com',
            },
            autoCapture: {
                awaTags: true,
                lineage: true,
                jsError: true,
                pageView: false
            },
            syncMuid: false,
            mscomCookies: true
      });
    </script>


      <script type="text/javascript">


var microsoft = microsoft || {};
microsoft.support = microsoft.support || {};

microsoft.support.prefetchedArticle = (function() {
    return { 'zh-cn/4529964' : {
"sideNav": "4000816",
"releaseInfo": {
    "releaseDate": "2019-11-12T00:00:00",
    "releaseVersion": "Windows 10, version 1909 and Windows Server, version 1909"
},
"releaseNoteRelationship": {
    "isMinorRelease": false,
    "minorVersions": [
      {
      "id": "4550945",
      "locale": "en",
      "heading": "April 21, 2020—KB4550945 (OS Builds 18362.815 and 18363.815)",
      "releaseDate": "2020-04-21T00:00:00",
      "releaseVersion": "1903-OS Build 18362.815 and 1909-OS Build 18363.815"
      },
      {
      "id": "4549951",
      "locale": "zh-hans",
      "heading": "2020 年 4 月 14 日 - KB4549951(操作系统内部版本 18362.778 和 18363.778)",
      "releaseDate": "2020-04-14T00:00:00",
      "releaseVersion": "1903-OS Build 18362.778 and 1909-OS Build 18363.778"
      },
      {
      "id": "4554364",
      "locale": "zh-hans",
      "heading": "2020 年 3 月 30 日 - KB4554364(操作系统内部版本 18362.753 和 18363.753)",
      "releaseDate": "2020-03-30T00:00:00",
      "releaseVersion": "1903-OS Build 18362.753 and 1909-OS Build 18363.753"
      },
      {
      "id": "4541335",
      "locale": "zh-hans",
      "heading": "2020 年 3 月 24 日 - KB4541335(操作系统内部版本 18362.752 和 18363.752)",
      "releaseDate": "2020-03-24T00:00:00",
      "releaseVersion": "1903-OS Build 18362.752 and 1909-OS Build 18363.752"
      },
      {
      "id": "4551762",
      "locale": "zh-hans",
      "heading": "2020 年 3 月 12 日 - KB4551762(操作系统内部版本 18362.720 和 18363.720)",
      "releaseDate": "2020-03-12T00:00:00",
      "releaseVersion": "1903-OS Build 18362.720 and 1909-OS Build 18363.720"
      },
      {
      "id": "4540673",
      "locale": "zh-hans",
      "heading": "2020 年 3 月 10 日 - KB4540673(操作系统内部版本 18362.719 和 18363.719)",
      "releaseDate": "2020-03-10T00:00:00",
      "releaseVersion": "1903-OS Build 18362.719 and 1909-OS Build 18363.719"
      },
      {
      "id": "4535996",
      "locale": "zh-hans",
      "heading": "2020 年 2 月 27 日 - KB4535996(操作系统内部版本 18362.693 和 18363.693)",
      "releaseDate": "2020-02-27T00:00:00",
      "releaseVersion": "1903-OS Build 18362.693 and 1909-OS Build 18363.693"
      },
      {
      "id": "4532693",
      "locale": "zh-hans",
      "heading": "2020 年 2 月 11 日 - KB4532693(操作系统内部版本 18362.657 和 18363.657)",
      "releaseDate": "2020-02-11T00:00:00",
      "releaseVersion": "1903-OS Build 18362.657 and 1909-OS Build 18363.657"
      },
      {
      "id": "4532695",
      "locale": "zh-hans",
      "heading": "2020 年 1 月 28 日 - KB4532695(操作系统内部版本 18362.628 和 18363.628)",
      "releaseDate": "2020-01-28T00:00:00",
      "releaseVersion": "1903-OS Build 18362.628 and 1909-OS Build 18363.628"
      },
      {
      "id": "4528760",
      "locale": "zh-hans",
      "heading": "2020 年 1 月 14 日 - KB4528760(操作系统内部版本 18362.592 和 18363.592)",
      "releaseDate": "2020-01-14T00:00:00",
      "releaseVersion": "1903-OS Build 18362.592 and 1909-OS Build 18363.592"
      },
      {
      "id": "4530684",
      "locale": "zh-hans",
      "heading": "2019 年 12 月 10 日 - KB4530684(操作系统内部版本 18362.535 和 18363.535)",
      "releaseDate": "2019-12-10T00:00:00",
      "releaseVersion": "1903-OS Build 18362.535 and 1909-OS Build 18363.535"
      },
      {
      "id": "4524570",
      "locale": "zh-hans",
      "heading": "2019 年 11 月 12 日 - KB4524570(操作系统内部版本 18362.476 和 18363.476)",
      "releaseDate": "2019-11-12T00:00:00",
      "releaseVersion": "1903-OS Build 18362.476 and 1909-OS Build 18363.476"
      }
    ]
},
"details": {
    "subType": "release-notes",
    "heading": "Windows 10 更新历史记录",
    "description": "了解有关 Windows 10 版本 1909 更新的更多信息,包括改进和修补程序、任何已知问题以及如何获取更新。",
    "body": [
      {
      "meta": {
          "type": "single-column",
          "products": [],
          "supportAreaPaths": []
      },
      "title": "Windows 10 版本 1909 和 Windows Server 版本1909 的更新",
      "content": [
          "<p><span>Windows 10 是一项服务,这意味着通过定期软件更新可以完善它。</span></p>\n\n<div><span>好消息是你通常不需要做任何事情! 如果启用了自动更新,则只要新的更新可用就会自动下载并安装,因此你不必考虑它。</span></div>\n\n<div>&nbsp;</div>\n\n<div>在本页面的左侧,你将找到针对此版本的 Windows 发布的所有更新。 你还可以找到有关版本和任何已知问题的更多信息。 安装最新的更新可确保你还获得任何你可能错过的以前更新,包括任何重要的安全修补程序。</div>\n\n<div>&nbsp;</div>\n\n<div>\n<p><strong><span>有关更新以及如何获取更新的详细信息,请参阅:</span></strong></p>\n\n<ul>\n\t<li><a href=\"https://aka.ms/how-to-get-1909\" managed-link=\"\"><span>如何获取 Windows 10 2019 年 11 月更新</span></a></li>\n\t<li><a href=\"https://aka.ms/1909mechanics\" managed-link=\"\"><span>Windows 10 版本 1909 交付选项</span></a></li>\n\t<li><span><a href=\"https://aka.ms/whats-new-in-1909\" managed-link=\"\">Windows 10 版本 1909 中适用于 IT 专业人员的新增内容</a> </span></li>\n\t<li><a href=\"https://docs.microsoft.com/zh-cn/windows/release-information/\" managed-link=\"\"><span>Windows 10 版本信息 <span> </span></span></a></li>\n\t<li><a href=\"https://support.microsoft.com/zh-cn/help/13853/windows-lifecycle-fact-sheet\" managed-link=\"\"><span>Windows 生命周期说明书</span><span> </span></a></li>\n</ul>\n</div>\n"
      ]
      },
      {
      "meta": {
          "type": "single-column",
          "products": [],
          "supportAreaPaths": []
      },
      "title": "Windows 10 版本 1909 和 Windows 10 版本 1903 发行说明中的新增内容",
      "content": [
          "<p><span>Windows 10 版本 1903 和 1909 共享一个常见的核心操作系统和一组相同的系统文件。 因此,Windows 10 版本 1909 中的新功能随附在最近的 Windows 10 版本 1903 (2019 年 10 月 8 日发布)的月度质量更新中,但目前处于休眠状态。 这些新功能会一直处于休眠状态,直到使用<em>启用程序包</em>将其打开,该程序包是一个小型、可快速安装的&ldquo;主开关&rdquo;,可便捷地激活 Windows 10 版本 1909 的功能。</span></p>\n\n<p><span>为了反映这一变更,Windows 10 版本 1903 和 Windows 10 版本 1909 的发行说明将共享更新历史记录页。 每个发布页面都将包含 1903 和 1909 版本的已解决问题列表。 请注意,1909 版本将始终包含 1903 版本的修补程序;但 1903 版本将不包含 1909 版本的修补程序。 此页将为你提供 1909 和1903 版本的内部版本号,以便在遇到问题时更容易获得为你提供帮助支持。</span></p>\n\n<p><span>有关启用包以及如何获取功能更新的更多详细信息,请参阅 <a href=\"https://aka.ms/1909mechanics\" managed-link=\"\"><span>Windows 10 版本 1909 交付选项</span></a>博客。 </span></p>\n"
      ]
      },
      {
      "meta": {
          "type": "single-column",
          "products": [],
          "supportAreaPaths": []
      },
      "title": "Windows 版本 1909 和 Windows Server 版本 1909 的当前状态",
      "content": [
          "<p><span>有关 Windows 和 Windows Server 已知问题的最新信息,请转到 <a data-content-id=\"\" data-content-type=\"\" href=\"https://docs.microsoft.com/zh-cn/windows/release-information/status-windows-10-1909\" managed-link=\"\" target=\"_blank\" title=\"https://aka.ms/whrd-002\">Windows 版本运行状况仪表板</a>。</span></p>\n"
      ]
      },
      {
      "meta": {
          "type": "single-column",
          "products": [],
          "supportAreaPaths": []
      },
      "title": "疑难解答",
      "content": [
          "<p>如果你有任何问题或者需要有关激活或对 Windows 进行故障排除的帮助,请参阅我们的以下帮助主题:</p>\n\n<ul>\n\t<li>有关如何更新的信息,请参阅<a data-content-id=\"4027667\" data-content-type=\"ia\" href=\"\" managed-link=\"\">更新 Windows 10</a>。</li>\n\t<li>如果你对手动安装或删除更新有疑问,请参阅 <a bookmark-id=\"trouble\" data-content-id=\"12373\" data-content-type=\"article\" href=\"null#trouble\" managed-link=\"\">Windows 更新: 常见问题解答</a>。</li>\n\t<li>更新时收到错误消息? 请参阅<a data-content-id=\"4089834\" data-content-type=\"article\" href=\"\" managed-link=\"\">解决更新 Windows 10 时遇到的问题</a>。</li>\n\t<li>如果需要激活 Windows,请参阅 <a data-content-id=\"12440\" data-content-type=\"article\" href=\"\" managed-link=\"\">Windows 10 中的激活</a>。 如果你在激活时遇到问题,请参阅<a data-content-id=\"10738\" data-content-type=\"article\" href=\"\" managed-link=\"\">获取有关 Windows 激活错误的帮助</a>。</li>\n\t<li><span>要获取 Windows 10 最新的重大更新,请参阅<a href=\"https://support.microsoft.com/zh-cn/help/4028685/\" managed-link=\"\">获取 Windows 10 2018 年 10 月更新</a>。</span></li>\n</ul>\n"
      ]
      },
      {
      "meta": {
          "type": "single-column",
          "products": [],
          "supportAreaPaths": []
      },
      "title": "相关信息",
      "content": [
          "<p><span><span><span><span asset=\"4001838\" contenteditable=\"false\" props=\"{&quot;size&quot;:&quot;full&quot;}\" readonly=\"true\" unselectable=\"on\">4001838</span></span></span><span> </span></span></p>\n\n<p>&nbsp;</p>\n\n<p>&nbsp;</p>\n"
      ]
      },
      {
      "meta": {
          "type": "single-column",
          "products": [],
          "supportAreaPaths": []
      }
      }
    ],
    "urltitle": "windows-10-update-history",
    "urlTitleSuffix": "Windows Help",
    "autotitle": false,
    "keywords": [
      "Windows 10 update history",
      "kbcrowd"
    ],
    "keywordsLower": [
      "windows 10 update history",
      "kbcrowd"
    ],
    "type": "article",
    "id": "4529964",
    "locale": "zh-hans",
    "title": "Windows 10 更新历史记录",
    "titleLower": "windows 10 更新历史记录",
    "published": true,
    "createdOn": "2019-11-15T13:35:21.2212782Z",
    "publishedOn": "2019-11-15T13:39:06.7088072Z",
    "version": 1,
    "eolProject": "EOL-WindowsUpdate",
    "isMachineTranslated": false,
    "supportAreaPaths": [
      "439ffd0b-4e2d-81f5-0675-d8a8d927f225",
      "e89722c2-7df6-4257-f51f-d2daef5a24ce"
    ],
    "supportAreaPathNodes": [
      {
      "id": "439ffd0b-4e2d-81f5-0675-d8a8d927f225",
      "parent": "6ae59d69-36fc-8e4d-23dd-631d98bf74a9",
      "name": "Windows 10, version 1909, all editions",
      "type": "productversion",
      "tree": []
      },
      {
      "id": "e89722c2-7df6-4257-f51f-d2daef5a24ce",
      "parent": "7ff57180-2b05-67aa-2c03-ab46c7848b89",
      "name": "Windows Server version 1909",
      "type": "productname",
      "tree": []
      }
    ],
    "disableVAPopup": false,
    "primarySupportAreaPath": [
      {
      "id": "439ffd0b-4e2d-81f5-0675-d8a8d927f225",
      "parent": "6ae59d69-36fc-8e4d-23dd-631d98bf74a9",
      "name": "Windows 10, version 1909, all editions",
      "type": "productversion",
      "tree": []
      },
      {
      "id": "6ae59d69-36fc-8e4d-23dd-631d98bf74a9",
      "parent": "1267d68d-d9f7-6020-0726-166b153ccbeb",
      "name": "Windows 10",
      "type": "productname",
      "tree": []
      },
      {
      "id": "1267d68d-d9f7-6020-0726-166b153ccbeb",
      "name": "Windows",
      "type": "productfamily",
      "tree": []
      }
    ],
    "isContentLocaleFallback": false,
    "contentLocale": "zh-hans"
},
"assetReferences": [
    "4001838"
],
"_ts": 0
}}
})();;
      </script>

wysyz 发表于 2020-4-22 15:40

楼上大佬,这个是javascript,刚学python,不会提取。给个思路或代码

hahawangzi 发表于 2020-4-22 15:40

这个里面 我 已经抠出来了 到那时 如何单独提取其中的某个元素,有没有执教?
"id": "4528760",
      "locale": "zh-hans",
      "heading": "2020 年 1 月 14 日 - KB4528760(操作系统内部版本 18362.592 和 18363.592)",
      "releaseDate": "2020-01-14T00:00:00",
      "releaseVersion": "1903-OS Build 18362.592 and 1909-OS Build 18363.592"
      },
比如取中心这个 搞不懂

dayer 发表于 2020-4-22 16:44

一般情况下用正则表达式提取。不过我不擅长正则。用字符串截取吧。

ymhld 发表于 2020-4-22 19:22

hahawangzi 发表于 2020-4-22 15:40
这个里面 我 已经抠出来了 到那时 如何单独提取其中的某个元素,有没有执教?
"id": "4528760",
         ...

这不就是字典嘛,加上大括号的话

hahawangzi 发表于 2020-4-23 09:48

但是你要从里面抠出来,就有点麻烦了 ,只有用正则表达式,但我不知道怎么搞

Small_Google 发表于 2020-4-23 10:02

"minorVersions": [
      {
      "id": "4550945",
      "locale": "en",
      "heading": "April 21, 2020—KB4550945 (OS Builds 18362.815 and 18363.815)",
      "releaseDate": "2020-04-21T00:00:00",
      "releaseVersion": "1903-OS Build 18362.815 and 1909-OS Build 18363.815"
      },
      {
      "id": "4549951",
      "locale": "zh-hans",
      "heading": "2020 年 4 月 14 日 - KB4549951(操作系统内部版本 18362.778 和 18363.778)",
      "releaseDate": "2020-04-14T00:00:00",
      "releaseVersion": "1903-OS Build 18362.778 and 1909-OS Build 18363.778"
      },
      {
      "id": "4554364",
      "locale": "zh-hans",
      "heading": "2020 年 3 月 30 日 - KB4554364(操作系统内部版本 18362.753 和 18363.753)",
      "releaseDate": "2020-03-30T00:00:00",
      "releaseVersion": "1903-OS Build 18362.753 and 1909-OS Build 18363.753"
      },
      {
      "id": "4541335",
      "locale": "zh-hans",
      "heading": "2020 年 3 月 24 日 - KB4541335(操作系统内部版本 18362.752 和 18363.752)",
      "releaseDate": "2020-03-24T00:00:00",
      "releaseVersion": "1903-OS Build 18362.752 and 1909-OS Build 18363.752"
      },
      {
      "id": "4551762",
      "locale": "zh-hans",
      "heading": "2020 年 3 月 12 日 - KB4551762(操作系统内部版本 18362.720 和 18363.720)",
      "releaseDate": "2020-03-12T00:00:00",
      "releaseVersion": "1903-OS Build 18362.720 and 1909-OS Build 18363.720"
      },
      {
      "id": "4540673",
      "locale": "zh-hans",
      "heading": "2020 年 3 月 10 日 - KB4540673(操作系统内部版本 18362.719 和 18363.719)",
      "releaseDate": "2020-03-10T00:00:00",
      "releaseVersion": "1903-OS Build 18362.719 and 1909-OS Build 18363.719"
      },
      {
      "id": "4535996",
      "locale": "zh-hans",
      "heading": "2020 年 2 月 27 日 - KB4535996(操作系统内部版本 18362.693 和 18363.693)",
      "releaseDate": "2020-02-27T00:00:00",
      "releaseVersion": "1903-OS Build 18362.693 and 1909-OS Build 18363.693"
      },
      {
      "id": "4532693",
      "locale": "zh-hans",
      "heading": "2020 年 2 月 11 日 - KB4532693(操作系统内部版本 18362.657 和 18363.657)",
      "releaseDate": "2020-02-11T00:00:00",
      "releaseVersion": "1903-OS Build 18362.657 and 1909-OS Build 18363.657"
      },
      {
      "id": "4532695",
      "locale": "zh-hans",
      "heading": "2020 年 1 月 28 日 - KB4532695(操作系统内部版本 18362.628 和 18363.628)",
      "releaseDate": "2020-01-28T00:00:00",
      "releaseVersion": "1903-OS Build 18362.628 and 1909-OS Build 18363.628"
      },
      {
      "id": "4528760",
      "locale": "zh-hans",
      "heading": "2020 年 1 月 14 日 - KB4528760(操作系统内部版本 18362.592 和 18363.592)",
      "releaseDate": "2020-01-14T00:00:00",
      "releaseVersion": "1903-OS Build 18362.592 and 1909-OS Build 18363.592"
      },
      {
      "id": "4530684",
      "locale": "zh-hans",
      "heading": "2019 年 12 月 10 日 - KB4530684(操作系统内部版本 18362.535 和 18363.535)",
      "releaseDate": "2019-12-10T00:00:00",
      "releaseVersion": "1903-OS Build 18362.535 and 1909-OS Build 18363.535"
      },
      {
      "id": "4524570",
      "locale": "zh-hans",
      "heading": "2019 年 11 月 12 日 - KB4524570(操作系统内部版本 18362.476 和 18363.476)",
      "releaseDate": "2019-11-12T00:00:00",
      "releaseVersion": "1903-OS Build 18362.476 and 1909-OS Build 18363.476"
      }
    ]
},

先把这里这正则出来,然后转换成list或者dict 然后就可以很好的提取了。
比如用re
re.findall(re.compile('"minorVersions": [(.*?)    ]'), 内容)
然后打印一下看看取到了没有。

hahawangzi 发表于 2020-4-23 11:21

i=re.findall(re.compile('"minorVersions": [(.*?)    ]'), dav)
File "C:\Users\liming\AppData\Local\Programs\Python\Python38\lib\re.py", line 239, in findall
    return _compile(pattern, flags).findall(string)
TypeError: expected string or bytes-like object
奇怪报错了 抠不出来 救救

hahawangzi 发表于 2020-4-24 15:30

Small_Google 发表于 2020-4-23 10:02
"minorVersions": [
      {
      "id": "4550945",


求教Traceback (most recent call last):
File "C:\Users\liming\Desktop\python\新建文件夹\shishi.py", line 26, in <module>
    print(re.findall(re.compile('"minorVersions": [(.*?)    ]'),i))
File "C:\Users\liming\AppData\Local\Programs\Python\Python38\lib\re.py", line 239, in findall
    return _compile(pattern, flags).findall(string)
TypeError: expected string or bytes-like object
>>>
页: [1] 2
查看完整版本: Python 关于微软更新补丁网页爬去问题!?