首页 > 解决方案 > 检索搜索结果 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

标签级别如何在li内的示例 在此处输入图像描述

以及未检索到的结果的 html 脚本示例 在此处输入图像描述

编辑 2

请求的页面源

https://pastebin.com/D11YpHGQ

标签: pythonhtmlseleniumweb-scrapingbeautifulsoup

解决方案


许多网站不会在页面加载时显示所有搜索结果,而是仅在需要时显示它们,例如访问者不断滚动表示他们想要查看更多内容。

我们可以使用 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))

推荐阅读