所以,我试图在一些餐馆的Yelp页面上找到“便利设施和更多”部分。问题是,我可以从餐厅的yelp页面首先显示的设施。不过,它有“n more”按钮,单击该按钮可提供更多便利设施。在网页url中使用BeautifulSoup和selenium以及在请求中使用BeautifulSoup都会得到完全相同的结果,在我的代码中使用BeautifulSoup之前,我一直在思考如何打开整个便利设施。下面两张图片显示了单击按钮前后发生的情况。
下面是使用selenium/beautifulsoup的代码
import selenium
from selenium import webdriver
from bs4 import BeautifulSoup
URL ='https://www.yelp.com/biz/ziggis-coffee-longmont'
driver =
webdriver.Chrome(r"C:\Users\Fariha\AppData\Local\Programs\chromedriver_win32\chromedriver.exe")
driver.get(URL)
yelp_page_source_page1 = driver.page_source
soup = BeautifulSoup(yelp_page_source_page1,'html.parser')
spans = soup.find_all('span')
结果:“跨度”中有990个元素。我只展示与我的问题相关的内容:
另一种方法是直接从站点上的JSON api提取数据。这可以在不增加selenium开销的情况下完成,如下所示:
这将为您提供以下条目:
这是如何解决的?
您最好的朋友是您的浏览器的网络开发工具。有了它,您可以查看获取信息的请求。正常的处理流程是下载初始HTML页面,这将运行javascript并请求更多数据以进一步填充页面
诀窍是首先定位您想要的数据所在的位置(通常以JSON的形式返回),然后确定重新创建请求所需的参数所需的内容
要进一步理解此代码,请使用
print()
。打印所有内容,它将显示每个部分如何构建在下一个部分上。剧本就是这样写的,一次一点使用Selenium的方法允许javascript工作,但大多数情况下这并不需要,因为它只是发出请求并格式化数据以供显示
相关问题 更多 >
编程相关推荐