鱼C论坛

 找回密码
 立即注册
查看: 831|回复: 0

[技术交流] 分享一下关于动态加载网页的爬取

[复制链接]
发表于 2018-9-28 14:47:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
昨天,我在论坛上发布的关于马蜂窝网站游记爬取的问题求助有关蚂蜂窝网站爬虫的问题,很荣幸得到了塔利班、wongyusing等前辈的指导,在此表示感谢。
而后,在查阅相关资料并深入研究马蜂窝网站的架构之后,发现网页是动态加载的,这也就是为什么单纯的进行文本爬取时,总是不能得到完整的文本结果。

对游记页面进行滚动条下拉操作时,每当滚动条触及底部,都会上跳并缩短滚动条长度。根据十月狐狸在其博文《python爬虫:使用Selenium模拟浏览器行为》中的解释可知,
这种现象是是由于DOM元素动态加载到了html文档的一个表现。动态加载无非就是ajax请求,而ajax本质上就是XMLHttpResquest请求(简称:xhr)。可以通过开发者工具的Network来监测xhr请求。

博文链接地址:python爬虫:使用Selenium模拟浏览器行为
在综合考虑wongyusing提出的修改参数与请求头以获取网页全部内容方法和模拟浏览器行为触发xhr的抉择中,我选择了后者。通过selenium调用Firefox继而获取全部文本。
具体的代码如下,小白代码还请各位前辈赐教:

  1. import time
  2. from selenium import webdriver
  3. from bs4 import BeautifulSoup

  4. browser = webdriver.Firefox()
  5. driver = browser.get("http://www.mafengwo.cn/i/9444273.html")
  6. time.sleep(5)

  7. for i in range(1,10):
  8.     browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
  9.     time.sleep(1)

  10. html = BeautifulSoup(browser.page_source,"lxml")
  11. t1 = html.find('div',class_="main")
  12. t2 = t1.find('div',class_="view clearfix")
  13. t3 = t1.find('div',class_="view_con")
  14. t4 = t3.find('div',class_="vc_article")
  15. t5 = t4.find('div', class_='va_con _j_master_content')
  16. t6 = t5.find('div', class_='_j_content_box')
  17. t7 = t6.find_all('p',class_='_j_note_content _j_seqitem')   
  18.    
  19. for t in t7:
  20.     h2 = t.get_text()
  21.     print(h2)
  22.     time.sleep(1)
复制代码

最后,非常感谢小甲鱼工作室能提供这个平台让我学习交流,也对各位指导过我的童鞋表示感谢。
本人正在使用爬虫获取数据以进行研究学习,非常希望能和大家一起交流~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-6 02:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表