python - MechanicalSoup 棘手的 html 表格

标签 python html web-scraping python-requests mechanicalsoup

我对 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。

非常感谢您的帮助!

最佳答案

select_form 的参数是 CSS 选择器。如果您只有一种形式,那么 "form" 就可以解决问题(MechanicalSoup 的下一版本实际上会将其作为默认参数)。否则,请使用浏览器的开发人员工具,例如 Firefox 具有右键单击 -> 检查元素 -> 右键单击​​ -> 复制 -> CSS 选择器,这可能是一个很好的起点。

就您而言,即使有一个有趣的布局,也只有一种形式,所以:

browser.select_form("form")

不幸的是,您指向的页面部分是由 JavaScript 生成的(您正在搜索的 select 元素不会出现在通过解析页面获得的 soup 对象中)。查看 MechanicalSoup 从您的页面看到的内容

browser.launch_browser()

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

关于python - MechanicalSoup 棘手的 html 表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46634416/

相关文章:

python - 此表达式在 Python 中为真 : {}. keys().insert(0, "") == None。为什么?

python - 在我的项目中添加 profile.html 页面

python - fbprophet 年度季节性值太高

html - 100% 宽的元素不会拉伸(stretch)超过视口(viewport)宽度

PHP 网页抓取

python - 如何用命令yield url让scrapy抓取

python - 正则表达式:如何按 "="拆分而不是按 "!="拆分

jquery - 在 URL 哈希更改上应用 CSS 类

javascript - html5 将 <div> 拖放到相应位置

javascript - 不使用模块从另一个网站抓取数据