【问题标题】:Returning Empty list while getting text from span tag (Web scraping)从跨度标签获取文本时返回空列表(网络抓取)
【发布时间】:2021-07-22 09:41:42
【问题描述】:

我正在尝试从this URL 获取产品价格和名称。

当我检查 HTML 元素时,产品的价格在 span 标签下,类名为 c13VH6

但是,我得到一个空字符串。

下面是我的代码。

import requests

from bs4 import BeautifulSoup

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}


html_text=requests.get('https://www.daraz.com.np/televisions/? 
spm=a2a0e.11779170.cate_3.1.287d2d2bmERvcc',headers=headers).text

soup=BeautifulSoup(html_text, 'lxml')
#soup = BeautifulSoup(html_text, 'html5lib')

string1=soup.find('span',class_='c13VH6')
print(soup.find('span', class_='c13VH6'))
print(string1)

【问题讨论】:

  • HTML 中没有class="c13VH6"
  • 您要查找的元素是由 JavaScript 动态添加的。你需要使用 Selenium WebDriver 之类的东西。

标签: python web web-scraping beautifulsoup


【解决方案1】:

网站是动态加载的,因此requests 模块不支持它。但是,数据以 JSON 格式嵌入到网站中,您可以使用内置的re(正则表达式)模块查找数据,并将其转换为 Python 字典(dict) 并访问key/@ 987654327@ 使用内置的json 模块。

例如,打印所有产品名称和价格:

import json
import re
import requests
from bs4 import BeautifulSoup


headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
}
url = "https://www.daraz.com.np/televisions/?spm=a2a0e.11779170.cate_3.1.287d2d2bmERvcc"
soup = BeautifulSoup(requests.get(url, headers=headers).content, "lxml")

json_data = json.loads(re.search("window\.pageData=({.*})", str(soup)).group(1))

# To view all the JSON data:
# print(json.dumps(json_data, indent=3))

for data in json_data["mods"]["listItems"]:
    print(data["name"])
    print(data["priceShow"].split()[1])
    print("-" * 80)

输出:

SONY  Klv-32W602D 32 Class Hdr Led Smart Tv - (Black)"
59,500
--------------------------------------------------------------------------------
SONY  Bravia Klv32R302E 32" Hd Led Tv
48,000
--------------------------------------------------------------------------------
Samsung  Ua49N5300Arshe 49 Inch Full Hd Smart Led Tv - Black
87,290
--------------------------------------------------------------------------------
X96 Mini, Android Box, Make Your Any TV Smart & 4K
4,200
--------------------------------------------------------------------------------
Sansui 43S803A 43 Inch Screen 1080P Led Tv
50,369
--------------------------------------------------------------------------------
Samsung  Ua49Nu7100Rshe 49 Inch 4K Ultra Hd Smart Led Tv - Black
128,690
--------------------------------------------------------------------------------
...
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多