检索搜索结果selenium python bs4

时间:2019-03-13 12:26:15

标签: python html selenium web-scraping beautifulsoup

我成功地组合了一个脚本,以从Linkedin中的销售导航器检索搜索结果。以下是使用python,selenium和bs4的脚本。

    with tf.compat.v1.variable_scope('backbone', reuse=tf.compat.v1.AUTO_REUSE):
      net = tf.compat.v1.layers.separable_conv2d(inputs, 16, 3, 1, 'same',
                                     activation=tf.nn.elu,
                                     depthwise_initializer=tf.keras.initializers.glorot_normal(),
                                     pointwise_initializer=tf.keras.initializers.glorot_normal(),
                                     name='conv1')
      net = tf.compat.v1.layers.max_pooling2d(net, 2, 2, padding='same')
      net = tf.compat.v1.layers.separable_conv2d(net, 32, 3, 1, 'same',
                                     activation=tf.nn.elu,
                                     depthwise_initializer=tf.keras.initializers.glorot_normal(),
                                     pointwise_initializer=tf.keras.initializers.glorot_normal(),
                                     name='conv2')

与结果数无关,答案始终为10(即)仅返回10个结果。在对消息来源进行进一步调查后,我注意到以下内容:

enter image description here

前10个结果以不同的级别表示,其余的则在div标签下,其样式类为 deferred area 。尽管对于所有搜索结果(result-lockup__name) dt类名都是相同的,但是由于级别的变化,我无法访问/检索它。

在这种情况下检索所有结果的正确方法是什么?

编辑1

li 内标签级别的示例 enter image description here

以及未获取结果的html脚本示例 enter image description here

编辑2

请求的页面来源

https://pastebin.com/D11YpHGQ

1 个答案:

答案 0 :(得分: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))