网页内容抓取 php(以百库文库为例()的一个简单记录,以百度文库 )

优采云 发布时间: 2021-09-12 02:05

  网页内容抓取 php(以百库文库为例()的一个简单记录,以百度文库

)

  简单记录一下使用selenium抓取文档,以百度文库为例。 selenium的原理大致是:使用javascript语句与浏览器交互,控制浏览器操作网页的行为。

  使用selenium来实现爬虫一般是因为网页是动态加载的,目标内容需要一定的操作才能出现在元素评论中。以白库文库为例(),较大文档的显示一般是分页显示,不会完全加载每个页面的内容,只有在浏览当前页面时才会加载当前页面的内容。像这个文档一样,一次显示五十页,但只会加载当前浏览进度的三叶内容。因此,要自动抓取此内容,需要实现滚动功能。

  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+'#')

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线