【问题标题】:Selecting HTML objects with Python and Bs4使用 Python 和 Bs4 选择 HTML 对象
【发布时间】:2017-05-10 00:29:41
【问题描述】:

我目前正在使用 python 和 bs4 训练代码,并且正在测试从该站点选择对象:http://www.metal-archives.com/lists/

我想使用以下代码获取包含 Band、Country、Genre 和 Status 列的表格:

import requests
from bs4 import BeautifulSoup
r = requests.get('http://www.metal-archives.com/lists/A')
soup = BeautifulSoup(r.content, 'lxml')

print([a.text for a in soup.select('td.sorting_1 a')])

但是没有任何反应,没有显示任何信息。

我已经尝试过很多不同的方法,比如“soup.find_all”等。当我用 Chrome 检查网站时,表格“bandListAlpha”在那里,但是当我用 Bs4 解析时,什么也没有发生。

我认为这应该是“请求”方法没有带来整页的东西,但我需要一些关于如何获取这些信息的建议,我需要学习什么?谢谢各位。

【问题讨论】:

    标签: python beautifulsoup python-requests


    【解决方案1】:

    这个页面使用JavaScript来获取数据,真正的数据在这个URL中:

    http://www.metal-archives.com/browse/ajax-letter/l/A/json/1?sEcho=1&iColumns=4&sColumns=&iDisplayStart=0&iDisplayLength=500&mDataProp_0=0&mDataProp_1=1&mDataProp_2=2&mDataProp_3=3&iSortCol_0=0&sSortDir_0=asc&iSortingCols=1&bSortable_0=true&bSortable_1=true&bSortable_2=true&bSortable_3=false&_=1482634713018
    

    您可以向该 URL 发出请求并返回 json 数据。

    【讨论】:

    • 谢谢!上周我花了一些时间研究 HTML 结构和其他东西,因为这是我在网络报废中的发展所缺少的。
    【解决方案2】:

    浏览器使用金属存档 AJAX API 来获取页面上所需的数据。有不同的方法可以解决这个问题,例如,通过selenium 启动一个真实的浏览器,或者在代码中自己模仿这些额外的 AJAX 请求。

    但您也可以重用 github 上已有的东西 - 有一个名为 metallum 的“金属档案”Python API 包装器,您可以直接从 github 安装它:

    pip install git+https://github.com/lcharlick/python-metallum
    

    以下是使用此库的示例代码:

    In [2]: from metallum import band_search
    
    In [3]: s = band_search('metallica')
    
    In [4]: b = s[0].get()
    
    In [5]: print(b.name, b.country, b.status, b.genres)
    ('Metallica', 'United States', 'Active', ['Thrash Metal (early)', 'Hard Rock/Heavy/Thrash Metal (later)'])
    

    【讨论】:

    • 你做得很好。通过您的回答,我了解了代码本身,以及通过 github 安装 python 的 API。此时我正在研究该金属的变体。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    相关资源
    最近更新 更多