在介绍爬虫及爬取网页或图片之前,大家需要知道如何使用pip快速方便的安装第三方Python库。
上节中我们介绍了Python的安装及基础知识,其中安装Python时程序已经默认安装了pip模块。如果你还没有安装和配置Python,请查看此系列文章part1的内容介绍,注意:老版本的python中只有easy_install,没有pip。
win7系统下,pip的使用方法:
在cmd命令下输入pip help按回车键会显示pip命令的一些帮助,如下:
1)安装库
pip install <package_name>
pip install <package_name>==<version>
如安装numpy,在cmd命令中输入
在光标处输入:pip install numpy 按Enter回车键即开始安装numpy库,这个numpy版本会和你系统安装的Python版本保持一致。
2)升级库 (如果不提供version版本号,升级到最新版本)
pip install --upgrade <package_name>>=<version>
pip install -U <package_name>>=<version>
如pip升级自己:
pip install --upgrade pip
pip install -U pip
3)卸载库
pip uninstall <package_name>
如卸载numpy库:pip install
numpy
4)查看已经安装了那些第三方库
pip list
如下:
pip freeze
注
:
Python第三方库的下载地址:
http://www.lfd.uci.edu/~gohlke/pythonlibs/
在这里找到相应的第三方的及对应的Python版本的库文件下载并通过pip安装成功率更高!
通过Ctrl + F 查找相应的包,如numpy
通过浏览器或迅雷把numpy‑1.11.3+mkl‑cp27‑cp27m‑win_amd64.whl下载下来。
在cmd中输入:
pip install
numpy‑1.11.3+mkl‑cp27‑cp27m‑win_amd64.whl
按Enter回车即开始安装。
正式进入爬虫讲解:
下面写一个示例,抓取网页和图片
这节课所依赖的包有:httplib2 、urllib 、selenium
安装方法如下:
pip install httplib2
pip install selenium
其中httplib2中包含urllib库
如安装httplib2
或是通过第三方网站下载相应的包,安装如下
安装selenium库:
安装成功后输入:exit 按Enter退出cmd。
以上Python第三方库安装成功后,开始编写下载网页和图片的脚本
下载网页代码如下:
# coding=utf-8
import urllib
import httplib2
import webbrowser
#以爬取百度网站为例
url = "http://www.baidu.com/"
html = urllib.urlopen(url).read()
open("baidu.html","w").write(html)
#浏览并打开该网站
webbrowser.open_new_tab("baidu.html")
调用的是urllib库里面的urlopen方法,传入一个URL(网址),这个网址是百度首页,协议是HTTP协议,当然你也可以把HTTP换做ftp、file、https 等等,只是代表了一种访问控制协议,urlopen一般接受三个参数,它的参数如下:
urlopen(url, data, timeout)
第一个参数url即为URL,且必填;后两个参数可选。
第二个参数data是访问URL时要传送的数据。
第三个timeout是设置超时时间。
注:data默认为空None,timeout默认为 socket._GLOBAL_DEFAULT_TIMEOUT。
在这个例子里面我们传送了百度首页网址URL,执行urlopen(url)方法之后,返回一个response对象,response对象有一个read()方法,可以返回获取到的网页内容,即通过response.read()方法读取。
webbrowser是Python库的内置模块,webbrowser模块提供了展示基于web文档的高层接口。多数情况下, 简单地调用open() 函数即可。open一般接受三个参数,它的参数如下:
webbrowser.open(url, new=0, autoraise=True)
使用默认的浏览器访问url。如果new等于0,则url会在尽量在已有浏览器窗口打开。如果new等于1, 则打开新的浏览器窗口。new等于2,尽量在浏览器打开新标签(tab)。如果autoraise为True,则浏览器窗口显示在最前面(注意在多数窗口管理器会这样)。
webbrowser.open_new(url) #使用默认的浏览器打开url,尽量只有一个窗口。
webbrowser.open_new_tab(url) #使用默认的浏览器的新tab中打开url。
运行上述脚本:
获取的网页本地保存为"baidu.html",通过默认浏览器打开如下图所示:
下载图片的代码编写,首先要找到图片的url,如下图百度的logo,可以通过Firefox浏览器右键"查看页面源代码"、"查看元素"或按快捷键"F12"来进行定位,不同的浏览器可能不太一样。
在HTML源代码中可以通过Ctrl + F 定位元素位置,定位URL后,再通过urllib库中的函数urlretrieve()直接将远程数据下载到本地。
代码如下:
# coding=utf-8
import os
import urllib
import httplib2
import webbrowser
#爬取在线网站
url = "http://www.baidu.com/"
html = urllib.urlopen(url).read()
open("baidu.html","w").write(html)
#浏览求打开网站
webbrowser.open_new_tab("baidu.html")
#下载图片
logo_url = "https://www.baidu.com/img/bd_logo1.png"
logo_name = os.path.basename(logo_url) #删除路径获取logo图片名字
urllib.urlretrieve(logo_url, logo_name)
运行结果:
运用Selenium库编写简单爬虫,代码如下:
# coding=utf-8
import os
import urllib
# 引入WebDriver包
from selenium import webdriver
# 获取Firefox浏览器对象
driver = webdriver.Firefox()
# 获取Chrome浏览器对象
#driver = webdriver.Chrome()
# 获取IE浏览器对象
#driver = webdriver.Ie()
# 调用get方法来打开百度的url地址
driver.get("https://www.baidu.com/")
print u'当前浏览的URL:'
print driver.current_url # 打印当前浏览的URL网址
print u'\n网页标题:'
print driver.title # 打印当前浏览器页面中的title
# 通过id方式定位界面元素
print u'\n定位元素id:'
txt1 = driver.find_element_by_id("u1").text
print txt1
# 通过xpath表达式定位元素
print u'\n定位元素xpath:'
txt2 = driver.find_element_by_xpath("//div[@id='u1']/a")
print txt2.text
# 退出并关闭浏览器窗口程序
driver.quit()
按F5运行会报错:
Geckodriver executable needs to be in PATH。
Geckodirver的下载地址:https://github.com/mozilla/geckodriver/releases
本机是win7_64bit 所以下载对应的win64版本
报错内容:
WebDriverException:Message:'geckodriver'executable needs to be in Path
geckodriver是一原生态的第三方浏览器,对于selenium3.x版本都会使用geckodriver来驱动firefox,所以需要下载geckodriver.exe。放置在Path 环境变量可以访问到的地方。例如 C:\python2712(本机Python安装的目录)
然后再运行该脚本即可运行成功!结果如下图所示:
下回见,( ^_^ )/~~拜拜!