爬取前需要安装 Selenium&PhantomJS
Selenium 是一个 Web 的自动化测试工具, 最初是为网站自动化测试而开发的, 类型像我们玩游戏用的按键精灵, 可以按指定的命令自动操作, 不同是 Selenium 可以直接运行在浏览器上, 它支持所有主流的浏览器(包括 PhantomJS 这些无界面的浏览器) 。Selenium 可以根据我们的指令, 让浏览器自动加载页面, 获取需要的数据, 甚至页面截屏, 或者判断网站上某些动作是否发生。Selenium 自己不带浏览器, 不支持浏览器的功能, 它需要与第三方浏览器结合在一起才能使用。 但是我们有时候需要让它内嵌在代码中运行, 所以我们可以用一个叫 PhantomJS的工具代替真实的浏览器。
可以从 PyPI 网站下载 Selenium 库 https://pypi.python.org/simple/selenium , 也可以用第三方管理器 pip 用命令安装: pip install selenium==2.48.0
Selenium 官方参考文档: http://selenium-python.readthedocs.io/index.html
PhantomJS phantom: 美 ['fæntəm], 鬼怪, 幽灵。
PhantomJS 是一个基于 Webkit 的“无界面”(headless)浏览器, 它会把网站加载到内存并执行页面上的 JavaScript, 因为不会展示图形界面, 所以运行起来比完整的浏览器要高效。如果我们把 Selenium 和 PhantomJS 结合在一起, 就可以运行一个非常强大的网络爬
虫了, 这个爬虫可以处理 JavaScrip、 Cookie、 headers, 以及任何我们真实用户需要做的事情。注意: PhantomJS 只能从它的官方网站 http://phantomjs.org/download.html) 下载。 因为PhantomJS 是一个功能完善(虽然无界面)的浏览器而非一个 Python 库, 所以它不需要像 Python 的其他库一样安装, 但我们可以通过 Selenium 调用 PhantomJS 来直接使用。下载--解压, 然后,设置环境变量: C:\Users\cz\Downloads\phantomjs-2.1.1-windows\bin打开终端命令行, 输入: phantomjs, 能够进行到 phantomjs 命令行, 则表示安装成功
#无界面浏览器 from selenium import webdriver #xpath 提取数据 from lxml import etree #登录界面 url='http://login.kaixin001.com/?url=https%3A%2F%2Fsecurity.kaixin001.com' #CTRL+单击PhantonJs,可更改位置 drive=webdriver.PhantomJS() #获取url drive.get(url) #输出页面 # print(drive.page_source) #使用登录和密码框的name属性 drive.find_element_by_id('userinput').send_keys('账号') drive.find_element_by_id('passwordinput').send_keys('密码') #截图 drive.save_screenshot('kaixin.png') #找到登录按钮的id,单击 drive.find_element_by_id('btn_dl').click() #将文件写入kaixin.html with open('kaixin.html','w',encoding='utf-8') as file: file.write(drive.page_source) # # #如果登录页面有验证码需要用截图来查看验证码来进行登录 # #读取页面 # with open('kaixin.html','r',encoding='utf-8') as file: # html=file.read() # #利用xpath找到验证码的图片连接 # srr=etree.HTML(html) # imgg=srr.xpath('//div[@class="l"]/img/@src') # print(imgg) # # sa=input('输入验证码:') # #清除输入框中的信息 # drive.find_element_by_id('userinput').clear() # drive.find_element_by_id('passwordinput').clear() # #重新输入用户名密码和验证码并单级 # drive.find_element_by_id('userinput').send_keys('账号') # drive.find_element_by_id('passwordinput').send_keys('密码') # drive.find_element_by_id('code').send_keys(sa) # drive.find_element_by_id('btn_dl').click() # # drive.save_screenshot('kaixin3.png') # #验证码格式 # # http://www.kaixin001.com/interface/getcaptcha.php?key=1539574548166&keytype=login # # http://www.kaixin001.com/interface/getcaptcha.php?key=1539575201279&keytype=login
登录人人网
#爬虫 登录人人网案例 import requests session=requests.session() url='http://www.renren.com/PLogin.do' data={ 'email':'账号', 'password':'密码' } response=session.post(url,data) html=session.get(url='http://www.renren.com/968293374/profile') with open('renren.html','w',encoding='utf-8') as ff: ff.write(html.text)