受同学委托,帮忙爬新浪微博的微博和评论内容。
发现这是一个动态网站,我前端技术不行,搞不懂它的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”)