首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中不带数据的返回html。

中不带数据的返回html。
EN

Stack Overflow用户
提问于 2022-08-27 12:41:36
回答 2查看 61关注 0票数 1

举个例子,我有这样的代码:

代码语言:javascript
复制
import requests
from bs4 import BeautifulSoup

def get_data(url):
    r = requests.get(url).text
    soup = BeautifulSoup(r, 'html.parser')
    word = soup.find(class_='mdl-cell mdl-cell--11-col')
    print(word)


get_data('http://savodxon.uz/izoh?sher')

我不知道为什么,但当我把字打印出来,就什么都没有了

如下所示:

代码语言:javascript
复制
<h2 class="mdl-cell mdl-cell--11-col" id="definition_l_title"></h2>

但应该是这样:

代码语言:javascript
复制
<h2 id="definition_l_title" class="mdl-cell mdl-cell--11-col">acha</h2>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-27 14:47:10

现代页面有一个常见的问题:这个页面使用JavaScript添加/更新元素,但是BeautifulSoup/lxmlrequests/urllib不能运行JavaScript

您可能需要来控制真正的web浏览器,它可以运行JS。或者使用(手动) DevTools / Firefox/Chrome (选项卡Network)来查看JavaScript是否从某个URL读取数据。并尝试在requests中使用此URL。JS通常获得JSON,这可以很容易地转换为Python字典(没有BS)。您还可以检查页面是否为程序员提供(免费) API

使用DevTools,我发现它从其他URL读取数据(使用post)

http://savodxon.uz/api/search

定义

他们以JSON数据的形式给出结果,所以不需要beautifulsoup

代码语言:javascript
复制
import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:98.0) Gecko/20100101 Firefox/98.0',
    'X-Requested-With': 'XMLHttpRequest',
}

# ---- suggestions ---

url = 'http://savodxon.uz/api/search'

payload = {
    'keyword': 'sher',
    'names': '[object HTMLInputElement]',
}

response = requests.post(url, data=payload, headers=headers)
data = response.json()
#print(data)

# ---

print('--- suggestions ---')
for word in data['suggestions']:
    print('-', word)

# --- definitons ---

url = 'http://savodxon.uz/api/get_definition'

payload = {
    'word': 'sher',
}

response = requests.post(url, data=payload, headers=headers)
data = response.json()
#print(data.keys())

print('--- definitons ---')

for item in data['definition']:
    for meaning in item['meanings']:
        print(meaning['text'])
        for example in meaning['examples']:
            print('-', example['text'], f"({example['takenFrom']})")

结果:

代码语言:javascript
复制
--- suggestions ---

- sher
- sherboz
- sherdil
- sherik
- sherikchilik
- sheriklashmoq
- sheriklik
- sherlanmoq
- sherobodlik
- sherolgʻin
- sheroz
- sheroza
- sherqadamlik
- shershikorlik
- sherst

--- definitons ---

Mushuksimonlar oilasiga mansub, kalta va sargʻish yungli (erkaklari esa qalin yolli) yirik sutemizuvchi yirtqich hayvon; arslon.
- Ovchining zoʻri sher otadi, Dehqonning zoʻri yer ochadi. (Maqol)
- Oʻzingni er bilsang, oʻzgani sher bil. (Maqol)
- Bular [uch ogʻayni botirlar] tushgan toʻqayning narigi tomonida bir sherning makoni bor edi. (Ertaklar)
Shaxsni sherga nisbatlab ataydi (“azamat“, “botir“ polvon maʼnosida).
- Bu hujjatni butun rayonga tarqatmoqchimiz, sher, obroʻying oshib, choʻqqiga koʻtarilayotganingni bilasanmi? (I. Rahim, Ixlos)
- — Balli, sher, xatni qoʻlingizdan kim oldi? — Bir chol. (A. Qodiriy, Oʻtgan kunlar)
- Yoppa yov-lik otga mining, sherlarim. (Yusuf va Ahmad)
- Figʻon qilgan bunda sherlar, Yoʻlbars, qoplon, bunda erlar (Bahrom va Gulandom)

顺便说一下:

您也可以在没有标题的情况下运行它。

下面是视频示例(没有声音)如何使用DevTools

如何在火狐中使用DevTools查找EpicGames.com - YouTube中的JSON数据

票数 2
EN

Stack Overflow用户

发布于 2022-08-27 14:38:40

您在页面上看到的数据是通过JavaScript从外部URL加载的,因此beautifulsoup无法看到它。要加载数据,可以使用requests模块:

代码语言:javascript
复制
import requests

api_url = "https://savodxon.uz/api/get_definition"
data = requests.post(api_url, data={"word": "sher"}).json()
print(data)

指纹:

代码语言:javascript
复制
{
    "core": "",
    "definition": [
        {
            "meanings": [
                {
                    "examples": [
                        {
                            "takenFrom": "Maqol",
                            "text": "Ovchining zoʻri sher otadi, Dehqonning zoʻri yer ochadi.",
                        },
                        {
                            "takenFrom": "Maqol",
                            "text": "Oʻzingni er bilsang, oʻzgani sher bil.",
                        },
                        {
                            "takenFrom": "Ertaklar",
                            "text": "Bular [uch ogʻayni botirlar] tushgan toʻqayning narigi tomonida bir sherning makoni bor edi.",
                        },
                    ],
                    "reference": "",
                    "tags": "",
                    "text": "Mushuksimonlar oilasiga mansub, kalta va sargʻish yungli (erkaklari esa qalin yolli) yirik sutemizuvchi yirtqich hayvon; arslon.",
                },
                {
                    "examples": [
                        {
                            "takenFrom": "I. Rahim, Ixlos",
                            "text": "Bu hujjatni butun rayonga tarqatmoqchimiz, sher, obroʻying oshib, choʻqqiga koʻtarilayotganingni bilasanmi?",
                        },
                        {
                            "takenFrom": "A. Qodiriy, Oʻtgan kunlar",
                            "text": "— Balli, sher, xatni qoʻlingizdan kim oldi? — Bir chol.",
                        },
                        {
                            "takenFrom": "Yusuf va Ahmad",
                            "text": "Yoppa yov-lik otga mining, sherlarim.",
                        },
                        {
                            "takenFrom": "Bahrom va Gulandom",
                            "text": "Figʻon qilgan bunda sherlar, Yoʻlbars, qoplon, bunda erlar",
                        },
                    ],
                    "reference": "",
                    "tags": "koʻchma",
                    "text": "Shaxsni sherga nisbatlab ataydi (“azamat“, “botir“ polvon maʼnosida).",
                },
            ],
            "phrases": [
                {
                    "meanings": [
                        {
                            "examples": [
                                {
                                    "takenFrom": "Gazetadan",
                                    "text": "Ichkilikning zoʻridan sher boʻlib ketgan Yazturdi endi koʻcha harakati qoidasini unutib qoʻygan edi.",
                                },
                                {
                                    "takenFrom": "H. Tursunqulov, Hayotim qissasi",
                                    "text": "Balli, azamat, bugun jang vaqtida sher boʻlib ketding.",
                                },
                            ],
                            "reference": "",
                            "tags": "ayn.",
                            "text": "Sherlanmoq.",
                        }
                    ],
                    "tags": "",
                    "text": "Sher boʻlmoq",
                }
            ],
            "tags": "",
        }
    ],
    "isDerivative": False,
    "tailStructure": "",
    "type": "ot",
    "wordExists": True,
}

编辑:获取单词:

代码语言:javascript
复制
import requests

api_url = "https://savodxon.uz/api/search"
d = {"keyword": "sher", "names": "[object HTMLInputElement]"}
data = requests.post(api_url, data=d).json()
print(data)

指纹:

代码语言:javascript
复制
{
    "success": True,
    "matchFound": True,
    "suggestions": [
        "sher",
        "sherboz",
        "sherdil",
        "sherik",
        "sherikchilik",
        "sheriklashmoq",
        "sheriklik",
        "sherlanmoq",
        "sherobodlik",
        "sherolgʻin",
        "sheroz",
        "sheroza",
        "sherqadamlik",
        "shershikorlik",
        "sherst",
    ],
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73511109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档