我对网络抓取完全陌生。我试着按照这个问题Web Scraper for dynamic forms in python中找到的代码片段
我正在用http://www.goodlifefitness.com/fitness-classes/find-a-class/进行类似的搜索。填写省、市、类名,查询日程。在
但我还是坚持第一步,检索一份省份名单
#!/usr/bin/env python
import re
import mechanize
from bs4 import BeautifulSoup
br = mechanize.Browser()
br.open('http://www.goodlifefitness.com/fitness-classes/find-a-class/')
br.select_form('aspnetForm')
ctl = br.form.find_control('ctl00$Copy$ddlRegion')
但我似乎连下拉列表里的东西都找不到
^{pr2}$但是当我检查网页上的元素时,很明显第一个下拉列表中有值
<select name="ctl00$Copy$ddlRegion" id="ctl00_Copy_ddlRegion" title="Select a Province" class="dropdown" onchange="comboBoxSearch_onChange(this);">
<option value="">Select a Province</option><option value="Alberta">Alberta</option><option value="British Columbia">British Columbia</option><option value="Manitoba">Manitoba</option><option value="New Brunswick">New Brunswick</option><option value="Newfoundland">Newfoundland</option><option value="Nova Scotia">Nova Scotia</option><option value="Ontario">Ontario</option><option value="Saskatchewan">Saskatchewan</option></select>
为什么ctl.get_items()
没有返回任何内容?
任何建议都将不胜感激。在
正如您在Firefox中查看源代码时所看到的,您要查找的项并不在服务器发送的原始HTML标记中。实际上,它们是在页面加载后由JavaScript添加的。Mechanize不运行JavaScript,因此它看不到这些项;它只看到HTML中的内容。在
顺便说一句,这种完全不必要的JavaScript的使用是现代Web开发中的一个瘟疫,它会让你做一些你想做的事情比他们应该做的要困难得多。(不过,也许这就是他们这么做的原因。)
总之,要从页面中获取这些信息,您需要使用在真正的Web浏览器中实际加载页面的东西,比如Selenium。在
您链接的另一个SO问题是不同的,因为当您从菜单中选择时,目标站点实际上会发送一个httppost,并收到一个全新的HTTP页面。这一页没有这样做。在
相关问题 更多 >
编程相关推荐