Selenium + phantomJS 爬取动态网站

来源:互联网 发布:单片机外部存储器 编辑:程序博客网 时间:2024/06/05 05:46

受同学委托,帮忙爬新浪微博的微博和评论内容。

发现这是一个动态网站,我前端技术不行,搞不懂它的ajax接口,所以不能直接用requests包爬了。

后来了解到Selenium可以模拟浏览器(Firefox, phantomJS等)的点击,然后用Beautifulsoup解析HTML,Selenium是爬动态网站的神器!

phantomJS是一个没有界面的浏览器,用来爬虫最合适了。

把Selenium用到的一些接口总结一下吧。

常用的接口

以sina微博登录为例,

    from selenium import webdriver    from bs4 import BeautifulSoup    import time    browser = webdriver.PhantomJS()   # 创建phantomJS浏览器对象    browser.get(“http://login.sina.com.cn”)   # 访问网站    elem_user = browser.find_element_by_name("username”)  # 定位到用户名元素    elem_user.send_keys(‘username’)  # 输入用户名    elem_pwd = browser.find_element_by_name("password")    elem_pwd.send_keys(‘password’)  # 密码    elem_sub = browser.find_element_by_xpath("//input[@class='W_btn_a btn_34px']")  # 定位到提交元素    elem_sub.click()  # 点击登陆    time.sleep(10)  # 等待10s    current_url = browser.current_url  # 当前页面的url    print current_url    browser.get(“http://other/page/of/sina”)  # 跳转到你要爬取的页面    time.sleep(10)    html = browser.page_source  # 获得当前页面的html字符串    # 可以开始解析html,获得你要的数据了    html = BeautifulSoup(html, ‘lxml’)  # 转换成BeautifulSoup对象,用于后续解析

如果用FireFox浏览器,会看到浏览器自己再动。

    browser = webdriver.Firefox(executable_path=“path/to/geckodriver”)

文档

http://selenium-python.readthedocs.io/

原创粉丝点击