如何从 div 容器中抓取数据?

问题描述 投票:0回答:1

我正在尝试使用 requests_html 和 CSS 选择器从 This Website 中抓取应用程序名称(存在于网站底部),但它返回空列表,您能帮忙解释一下吗? 代码:

import requests_html
from requests_html import HTMLSession

s = HTMLSession()

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

url = 'https://www.workato.com/integrations/salesforce'

r = s.get(url, headers=headers)

r.html.render(sleep=4)

apps = r.html.find('#__layout > div > div > div > div > div > main > article.apps-page__section.apps-page__section_search > div > div > div.apps-page__integrations > div > ul')

print(apps)

我试过以下方法:

for app in apps:
    print(app)

我也用过

.text

但输出总是:

[]
python web-scraping beautifulsoup css-selectors python-requests-html
1个回答
0
投票

您要查找的数据嵌入在一个外部 JavaScript 文件中(因此标准

beautifulsoup
在这里无济于事)。

要一次将所有应用程序加载到 pandas DataFrame 中,您可以使用下一个示例:

import re
import requests
import pandas as pd
from ast import literal_eval

url = 'https://cdn.marie.awsprod.workato.com/mktg-assets/c8ce8de9.js'

html_doc = requests.get(url).text
data = re.search(r'JSON\.parse\(\'(.*?)\'\)', html_doc).group(1)
data = literal_eval(data)
df = pd.DataFrame.from_dict(data, orient='index')
print(df.head())

印花:

姓名 标题 建筑类型 类别 别名 网址名称
kissmetrics kissmetrics Kissmetrics 不支持 ['即将到来']
热情 热情 热情 定制 ['人力资源管理', '员工管理', '时间和费用']
adobeexpmgr adobeexpmgr Adobe 体验管理器 不支持 ['销售']
综合 综合 综合 不支持 ['销售']
团队合作 团队合作 团队合作 不支持 ['销售']
© www.soinside.com 2019 - 2024. All rights reserved.