我成功地编写了一个脚本来从Linkedin中的sales navigator中检索搜索结果。以下是使用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))