【问题标题】:MechanicalSoup tricky html tablesMechanicalSoup 棘手的 html 表格
【发布时间】:2017-10-08 18:11:07
【问题描述】:

我完全不喜欢 MechanicalSoup 和网络抓取。 我一直在努力解析 html 时间表并将其制成 icalendar (ics) 文件以在移动设备上获取它。 (我已经成功完成了,耶)。

现在为了让它工作,我在选择了我的时间表后下载了时间表网站的 html。现在我需要使用 Python 来实际导航到时间表。

到目前为止,这是我的代码(我被卡住了,因为 HTML 太乱了,我不知道该怎么做,而且 MechanicalSoup 的文档还没有那么大):

    import argparse
    import mechanicalsoup
    from getpass import getpass
    browser = mechanicalsoup.StatefulBrowser(
        soup_config={'features': 'lxml'},
        raise_on_404=True,
        user_agent='MyBot/0.1: mysite.example.com/bot_info',
     )
    browser.open("http://keaplan.kea.dk/sws/prodE2017/default.aspx")
    browser.select_form(WHAT TO SELECT :D)

在此处查看 HTML :( http://keaplan.kea.dk/sws/prodE2017/default.aspx 我想做以下事情:

    td class=“FilterPanel” #go to the table containing this td
    div id = pFilter  #set value to BYG 
    div id = pObject #set value to BAKINT-2l
    submit (which will redirect to the timetable i need)

并从提交的重定向中下载 html。

非常感谢您的帮助!

【问题讨论】:

  • “MechanicalSoup 的文档还没有那么大”:当您发布您的问题时,这是非常正确的。现在少了:MechanicalSoup 的文档还没有那么大):

标签: python html web-scraping python-requests mechanicalsoup


【解决方案1】:

select_form 的参数是一个 CSS 选择器。如果您只有一个表单,那么"form" 可以解决问题(下一个版本的 MechanicalSoup 实际上会将其作为默认参数)。否则,请使用浏览器的开发工具,例如 Firefox 有 Right-Click -> Inspect Element -> Right Click -> Copy -> CSS selector,这可能是一个很好的起点。

在你的情况下,即使有一个有趣的布局,也只有一种形式,所以:

browser.select_form("form")

很遗憾,您所指向的页面部分是使用 JavaScript 生成的(您正在搜索的 select 元素没有出现在通过解析页面获得的汤对象中)。查看 MechanicalSoup 从您的页面看到的内容

browser.launch_browser()

:-(。您可以通过使用new_control 自己创建缺少的控件来解决此问题。

【讨论】:

    猜你喜欢
    • 2018-07-31
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    相关资源
    最近更新 更多