我试图从《季节性食品指南》中搜集有关食品季节性的数据,但遇到了一个障碍。该网站的URL结构相当简单:
https://www.seasonalfoodguide.org/produce_name/state_name
我已经能够使用Selenium
和Beautiful Soup
成功地从一个页面中获取季节性信息,但是在随后的循环中,我要查找的文本部分实际上没有加载,所以我得到了AttributeError: 'NoneType' object has no attribute 'text'
。我知道这是因为months_list_raw
返回空的,因为页面的'wheel-months-list'
部分没有加载到第二个循环中。代码如下。有什么想法吗?你知道吗
for ingredient in produce_list:
for state in state_list:
# grab page content
search_url = 'https://www.seasonalfoodguide.org/{}/{}'.format(ingredient,state)
driver.get(search_url)
page_soup = soup(driver.page_source, 'lxml')
# grab list of months
months_list_raw = page_soup.find('p',{'id':'wheel-months-list'})
months_list = months_list_raw.text
该页在客户端呈现,这意味着当您打开该页时,会向后端服务器发出另一个请求,以根据您选择的筛选器获取数据。所以问题是,当您打开页面并阅读HTML时,内容还没有完全加载。你可以做的最简单的事情就是在用Selenium打开页面后睡眠一段时间,等待页面完全加载。我通过在
driver.get(search_url)
之后插入time.sleep(3)
来测试您的代码,它运行得很好。你知道吗为了防止错误发生并继续循环,您需要检查
months_list_raw
元素何时不是None
。似乎有些product页面没有任何状态的数据,所以您需要在程序中按自己的方式处理这些数据。你知道吗相关问题 更多 >
编程相关推荐