为什么我无法从本网站的超链接中抓取网址?

克里斯蒂安·埃文·布迪亚万

我试图从这个网站的超链接中提取 URL:https : //riwayat-file-covid-19-dki-jakarta-jakartagis.hub.arcgis.com/

我使用了以下 Python 代码:

import requests
from bs4 import BeautifulSoup

url = "https://riwayat-file-covid-19-dki-jakarta-jakartagis.hub.arcgis.com/"
req = requests.get(url, headers)
soup = BeautifulSoup(req.content, 'html.parser')
print(soup.prettify())

links = soup.find_all('a')

for link in links:
    if "href" in link.attrs:
        print(str(link.attrs['href'])+"\n")

问题是此代码不返回任何 URL。

我想获得所有这些网址:
我想获得所有这些网址

西多

您无法解析它,因为数据是动态加载的。如下图所示,当您下载 HTML 源代码时,写入页面的 HTML 数据实际上并不存在。JavaScript 稍后会解析window.__SITE变量并从中提取数据:

代码截图

但是,我们可以在 Python 中复制它。下载页面后:

import requests

url = "https://riwayat-file-covid-19-dki-jakarta-jakartagis.hub.arcgis.com/"
req = requests.get(url)

您可以使用re(regex) 提取编码的页面源:

import re

encoded_data = re.search("window\.__SITE=\"(.*)\"", req.text).groups()[0]

之后,您可以使用urllibURL 解码文本,并json解析 JSON 字符串数据:

from urllib.parse import unquote
from json import loads

json_data = loads(unquote(encoded_data))

然后,您可以解析 JSON 树以获取 HTML 源数据:

html_src = json_data["site"]["data"]["values"]["layout"]["sections"][1]["rows"][0]["cards"][0]["component"]["settings"]["markdown"]

此时,您可以使用自己的代码来解析 HTML:

soup = BeautifulSoup(html_src, 'html.parser')
print(soup.prettify())

links = soup.find_all('a')

for link in links:
    if "href" in link.attrs:
        print(str(link.attrs['href'])+"\n")

如果你把它们放在一起,这是最终的脚本:

import requests
import re
from urllib.parse import unquote
from json import loads
from bs4 import BeautifulSoup

# Download URL
url = "https://riwayat-file-covid-19-dki-jakarta-jakartagis.hub.arcgis.com/"
req = requests.get(url)

# Get encoded JSON from HTML source
encoded_data = re.search("window\.__SITE=\"(.*)\"", req.text).groups()[0]

# Decode and load as dictionary
json_data = loads(unquote(encoded_data))

# Get the HTML source code for the links
html_src = json_data["site"]["data"]["values"]["layout"]["sections"][1]["rows"][0]["cards"][0]["component"]["settings"]["markdown"]

# Parse it using BeautifulSoup
soup = BeautifulSoup(html_src, 'html.parser')
print(soup.prettify())

# Get links
links = soup.find_all('a')

# For each link...
for link in links:
    if "href" in link.attrs:
        print(str(link.attrs['href'])+"\n")

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我无法抓取这个网站?

无法使用beautifulsoup抓取日本网站

我无法抓取新闻网站的网址

从网站上抓取的链接超链接中获取 HTML

为什么超链接无法在新标签页中打开?

Beautifulsoup - 为什么无法抓取此网站?

我无法点击我网站上的超链接

为什么我的链接没有变成实际的超链接?

为什么 Phantomjs 不适用于本网站?

为什么我在Excel中的超链接更改为漫游文件夹?

从特定网址中抓取链接

为什么我的linkExtractor在抓抓的蜘蛛缝上无法抓取允许的链接?

为什么我的本地网站无法在IIS中工作

为什么我不能用 jQuery 替换超链接内容?

为什么Cabal没有超链接我的资源?

为什么我的超链接转到错误的目录?

为什么我在beautifulsoup 中的find 方法在抓取coursera 网站时返回None?

无法抓取网址不变的网站页面-python

为什么Python Beautiful Soup从抓取的网址中剥离参数

本网站使用什么技术?

使用 bash 从网站上抓取特定的超链接

将我的导航放在代码中时,它会将我的整个页面变成超链接,为什么?

无法点击我网站中的任何链接

为什么scrapy没有抓取我的链接以进行提取

为什么在我的网址中需要首页?

使用请求无法抓取网站链接

Scrapy无法抓取链接-vnexpress网站的评论

Zillow 刮板:为什么我无法从 Zillow 搜索中抓取完整列表

Scrapy:抓取网站上的所有文本,但不抓取超链接的文本