专栏名称: 数盟
数盟(数据科学家联盟)隶属于北京数盟科技有限公司,数盟致力于成为培养与发现“数据科学家”的黄埔军校。 数盟服务包括:线下活动、大数据培训。 官网:http://dataunion.org,合作:[email protected]
目录
相关文章推荐
软件定义世界(SDX)  ·  与孙正义对话,Sam ... ·  2 天前  
天池大数据科研平台  ·  谷歌反击,最强Gemini ... ·  昨天  
大数据分析和人工智能  ·  DeepSeek找到了未来最赚钱的6个行业 ·  3 天前  
玉树芝兰  ·  对科研工作者来说,OpenAI Deep ... ·  3 天前  
51好读  ›  专栏  ›  数盟

手把手教你写网络爬虫(5):PhantomJS实战

数盟  · 公众号  · 大数据  · 2018-05-22 22:00

正文

本系列:

《手把手教你写网络爬虫(1):网易云音乐歌单》

《手把手教你写网络爬虫(2):迷你爬虫架构》

《手把手教你写网络爬虫(3):开源爬虫框架对比》

《手把手教你写网络爬虫(4):Scrapy入门》

大家好!从今天开始,我要与大家一起打造一个属于我们自己的分布式爬虫平台,同时也会对涉及到的技术进行详细介绍。大家如果有什么好的想法请多留言,多提意见,一起来完善我们的爬虫平台。在正式介绍平台之前,先用一些篇幅对基础篇做一点补充。模拟滚动

这次的目标是爬一个众筹网站的所有项目,项目列表页如下:https://www.kaistart.com/project/more.html。打开后进行分析,页面显示出10个项目:

如果想看到更多项目,并不能像网易云音乐那样点“下一页”翻页,而是需要向下拉滚动条或者向下滚动鼠标滚轮来触发异步请求。爬虫该如何应对这种情况呢?我们可以使用selenium的api执行js代码将屏幕内容滚动到指定位置。

下面这段代码会一直向下滚动项目页,一直到滚不动为止:

# 一直滚动到最底部

js1 = ‘return document.body.scrollHeight’

js2 = ‘window.scrollTo(0, document.body.scrollHeight)’

old_scroll_height = 0

while browser.execute_script(js1) >= old_scroll_height:

old_scroll_height = browser.execute_script(js1)

browser.execute_script(js2)

time.sleep(1)

scrollTo() 方法可把内容滚动到指定的坐标:

参数 描述
xpos 必需。要在窗口文档显示区左上角显示的文档的 x 坐标。
ypos 必需。要在窗口文档显示区左上角显示的文档的 y 坐标。

这里用到了scrollHeight,它和ClientHeight还有OffsetHeight有什么区别呢?

browser = webdriver.PhantomJs()

url = ‘https://www.kaistart.com/project/more.html’

try:

browser.get(url)

wait = ui.WebDriverWait(browser, 20)

wait.until(lambda dr: dr.find_element_by_class_name(‘project-detail’).is_displayed())

# 一直滚动到最底部

js1 = ‘return document.body.scrollHeight’

js2 = ‘window.scrollTo(0, document.body.scrollHeight)’

old_scroll_height = 0

while browser.execute_script(js1) >= old_scroll_height:

old_scroll_height = browser.execute_script(js1)

browser.execute_script(js2)

time.sleep(1)

sel = Selector(text=browser.page_source)

proj_list = sel.xpath(‘//li[@class=”project-li”]’)

browser.save_screenshot(debug.png’)

这样就会把图片保存在项目目录,打开看看:

browser = webdriver.Chrome()

再次运行程序,不出所料,Chrome浏览器弹出来,不仅能够正确显示页面,还一直在滚动:

项目全都刷出来了,想爬什么就爬吧!什么?你问我在Linux服务器上怎么爬?纯命令行的那种吗?







请到「今天看啥」查看全文