我对网页抓取是完全陌生的。我正在尝试按照此问题Web Scraper中的代码片段获取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')
但似乎我什至无法从下拉列表中得到任何东西
>>> items=ctl.get_items()
>>> items
[<Item name='' id=None selected='selected' contents='' value='' label=''>]
但是当我检查网页上的元素时,第一个下拉列表中显然有值
<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问题是不同的,因为当您从菜单中进行选择时,目标站点实际上会发送HTTP POST,并返回一个全新的HTTP页面。此页面不执行此操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句