python - 检索搜索结果 selenium python bs4
问题描述
我成功地编写了一个脚本来从 Linkedin 的销售导航器中检索搜索结果。以下是脚本,使用python、selenium和bs4。
browser = webdriver.Firefox(executable_path=r'D:\geckodriver\geckodriver.exe')
url1 = "https://www.linkedin.com/sales/search/company?companySize=E&geoIncluded=emea%3A0%2Ceurope%3A0&industryIncluded=6&keywords=AI&page=1&searchSessionId=zreYu57eQo%2BSZiFskdWJqg%3D%3D"
browser.get(url1)
time.sleep(15)
parsed = browser.find_element_by_tag_name('html').get_attribute('innerHTML')
soup = BeautifulSoup(parsed, 'html.parser')
search_results = soup.select('dt.result-lockup__name a')
print(len(search_results))
time.sleep(5)
browser.quit()
无论结果数量如何,答案始终为 10(即)仅返回 10 个结果。在进一步调查来源后,我注意到以下内容:
前 10 个结果以不同的级别表示,其余的位于 div 标签下,样式类名为deferred area。尽管所有搜索结果(result-lockup__name)的dt 类名称都相同,但由于级别的变化,我无法访问/检索它。
在这种情况下检索所有结果的正确方法是什么?
编辑 1
编辑 2
请求的页面源
解决方案
许多网站不会在页面加载时显示所有搜索结果,而是仅在需要时显示它们,例如访问者不断滚动表示他们想要查看更多内容。
我们可以使用 javascript 为我们滚动到页面底部window.scrollTo(0,document.body.scrollHeight)
,(如果您期望有数百个结果,您可能希望循环此操作)强制页面上的所有结果,之后我们可以抓取 HTML。
下面应该做的伎俩。
browser = webdriver.Firefox(executable_path=r'D:\geckodriver\geckodriver.exe')
url1 = "https://www.linkedin.com/sales/search/company?companySize=E&geoIncluded=emea%3A0%2Ceurope%3A0&industryIncluded=6&keywords=AI&page=1&searchSessionId=zreYu57eQo%2BSZiFskdWJqg%3D%3D"
browser.get(url1)
time.sleep(15)
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
time.sleep(15)
parsed = browser.find_element_by_tag_name('html').get_attribute('innerHTML')
soup = BeautifulSoup(parsed, 'html.parser')
search_results = soup.select('dt.result-lockup__name a')
print(len(search_results))
推荐阅读
- osmnx - OSMnx - 如何绘制邻域
- vue.js - Nuxt 动态资产未加载
- scala - 将 Doobie 流从数据库保存到文件
- php - PHP 致命错误:未捕获的错误:在 null 上调用成员函数 appendChild()
- winforms - Powershell/Forms - 如何在选项卡控件中锚定列表视图?
- python - 从 pandas.DataFrame.isin 获取单个 True/Flase 值
- mysql - A connection attempt failed because the connected party did not properly respond after a period of time - VB
- apl - 是否曾经有一个 APL-ASCII 音译方案获得了重大采用?
- sql-server - T-SQL 使用触发器或函数创建自定义列
- webpack - 在 webpack 配置中禁用部分 babelrc