使用selenium抓取网页内容

      关于适用selenium抓文档的一个简单记录,以百度文库为例。selenium的原理大概是:利用javascript语句与浏览器驱动交互,从而控制浏览器操作网页的行为。

      而使用selenium实现爬虫一般是因为网页是动态加载的,目标内容需要经过一定操作才能在元素审查中出现。以百库文库为例(https://wenku.baidu.com/view/217d303c76eeaeaad0f33075.html),较大的文档的展示一般是通过分页展示,并且每一页的内容不会全部加载,要在浏览到当前页才会加载当前几页的内容。像这个文档,一次显示五十页,但是只会加载当前浏览进度处的三叶内容。因此要自动抓取这个内容需要实现滚动功能。

selenium有两种滚动方式:

第一种,滚动到特定位置“:

driver.execute_script('var q=document.body.scrollTop=3500') 滚动到页面的3500像素处(从上往下)(通过网页审查可以看到整个网页的像素大小)
第二种,以当前位置为参照,滚动一定距离:
 
  
driver.execute_script('window.scrollBy(0, 1000)') 从当前位置向下滚动1000像素。
第三种,定位到特定的元素:
 
  
element = driver.find_element_by_xpath("//span[@class='fc2e']") 先找到特定的web元素(与beautifulsoup中的元素概念不同)。
 
  
driver.execute_script('arguments[0].scrollIntoView();',element) 把特定的元素滚动到页面的顶部/底部,但不一定能被点击到。
实现点击: element .click()
值得注意的是:目标元素经常会被一些内容遮挡,另外注意设置等待时间。
网页的解析还是使用beautifulsoup:
html = driver.page_source
    bf1 = BeautifulSoup(html, 'lxml')
    result = bf1.find_all(class_='ie-fix')
    for each_result in result:
        for singlecell in each_result.find_all('p'):
            if 'left:907px' in str(singlecell['style']):
                f.write('\n')
            f.write(singlecell.string+'#')
 
  
 
  

你可能感兴趣的:(使用selenium抓取网页内容)