大家好,博主最近学习python,有疑惑也有感悟,之前有过VC、IOS等开发经验,在此将自己的学习系统的整理下来,如果大家有兴趣学习python爬虫,可以将这些文章作为参考,也欢迎大家分享学习经验,请跟随我一起踏上爬虫学习的打怪升级之路吧!
开始之前,从我的学习经历来看,有必要先给大家做一些名词解释
爬虫是什么?
网络爬虫:(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
为什么我们需要学习爬虫?
google、百度等搜索引擎已经帮我们抓取了互联网上的大部分信息了,为什么还要自己写爬虫呢?这是因为,需求是多样的。比如在企业中,爬取下来的数据可以作为数据挖掘的数据源。比如有人为了炒股,专门抓取股票信息;有人为了分析房价,抓取房产中介的数据;有人为了欣赏美女图片,抓取美女图片网站。。。。。。(其他用途,自行脑补)
为什么选择python3?
python版本主要为3.6,主要是python3发展迅速,各种库及时跟进,而且python2在不久的将来就要停止维护了,所以大家还是把学习的重心放在python3上。
好多没听过的名词和库?
学习python之前,大家可能是零基础,也可能有过其他语言、平台等的开发经验,python一个很大的优点就是有各种成熟的库可以使用,先介绍一下用的比较多的库、框架等。
Selenium:是一个强大的网络数据采集工具,其最初是为网站自动化测试而开发的。近几年,它还被广泛用于获取精确的网站快照,因为它们可以直接运行在浏览器上。Selenium 库是一个在WebDriver 上调用的API。WebDriver 有点儿像可以加载网站的浏览器,但是它也可以像BeautifulSoup对象一样用来查找页面元素,与页面上的元素进行交互(发送文本、点击等),以及执行其他动作来运行网络爬虫。
安装方式与其他Python第三方库一样。
$pip3 install Selenium
Selenium 自己不带浏览器,它需要与第三方浏览器结合在一起使用。例如,如果你在Firefox 上运行Selenium,可以直接看到一个Firefox 窗口被打开,进入网站,然后执行你在代码中设置的动作。虽然这样可以看得更清楚,但不适用于我们的爬虫程序,爬一页就打开一页效率太低,所以我们用一个叫PhantomJS的工具代替真实的浏览器。
PhantomJS:是一个“无头”(headless)浏览器。它会把网站加载到内存并执行页面上的JavaScript,但是它不会向用户展示网页的图形界面。把Selenium和PhantomJS 结合在一起,就可以运行一个非常强大的网络爬虫了,可以处理cookie、JavaScript、header,以及任何你需要做的事情。PhantomJS并不是Python的第三方库,不能用pip安装。它是一个完善的浏览器,所以你需要去它的官方网站下载,然后把可执行文件拷贝到Python安装目录的Scripts文件夹。
BeautifulSoup:是一个可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。Beautiful Soup会帮你节省数小时甚至数天的工作时间。
安装比较简单:
$pip3 install beautifulsoup4
headless firefox\chrome:以前都用PhantomJS来进行无界面模式的自动化测试,或者爬取某些动态页面。但是最近selenium更新以后,'Selenium support for PhantomJS has been deprecated, please use headless '提示不支持PhantomJs,请使用headless模式。HeadLess模式因为没有图形化界面(GUI),所以加载速度是非常快的,相同场景下,可以运行很多个浏览器,这是其中的一个优势,而另一个优势,就是浏览器本身提供了一个官方的标准接口,让市场上所有的工具或者第三方库都有了标准,而不是各家一套标准,同时由于有了这些接口,我们自己可以利用接口写自动化测试工具了,比如调用浏览器提供的接口(打开URL)就能够将这个URL内容抓取到并且获取里面的数据。
XPath:全称为XML Path Language 一种小型的查询语言,XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。
说XPath是门语言,不得不说它所具备的优点:
1) 可在XML中查找信息
2) 支持HTML的查找
3) 通过元素和属性进行导航
python开发使用XPath条件: 由于XPath属于lxml库模块,所以首先要安装库lxml,安装方式:
pip3 install lxml
urllib:urllib库是Python内置的HTTP请求库,也就是说不需要额外安装即可使用。
它包含如下4个模块。
1)request:它是最基本的HTTP请求模块,可以用来模拟发送请求。就像在浏览器里输入网址然后回车一样,只需要给库方法传入URL以及额外的参数,就可以模拟实现这个过程了。
2)error:异常处理模块,如果出现请求错误,我们可以捕获这些异常,然后进行重试或其他操作以保证程序不会意外终止。
3)parse:一个工具模块,提供了许多URL处理方法,比如拆分、解析、合并等。
4)robotparser:主要是用来识别网站的robots.txt文件,然后判断哪些网站可以爬,哪些网站不可以爬,它其实用得比较少。
正则表达式:正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同;但不用担心,不被支持的语法通常是不常用的部分。
这些只是为了让你对python爬虫有个最初步的认知,以后各种库、框架的使用我们会一步一步共同学习。
最后,通过一个小例子感受一下:
抓取csdn侧边栏导航
#导入urllib中的urlopen函数
from urllib.request import urlopen
#导入BeautifulSoup对象
from bs4 import BeautifulSoup
#解决ssl报错
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
#打开url 获取网页内容
html = urlopen('https://www.csdn.net')
#将网页内容传给BeautifulSoup对象
bs_obj = BeautifulSoup(html.read(), 'html.parser')
#找出id=nav的侧边栏中的所有a标签
text_list = bs_obj.find(id="nav").find_all("a")
for text in text_list:
#打印标签中的文本
print(text.get_text())
html.close()
'''在python3中当用urllib.request.urlopen或者urllib.request.urlretrieve打开一个 https 的时候会验证一次 SSL 证书,
当目标使用的是自签名的证书时就会爆出一个
URLError: urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)的错误消息;
解决方法:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
'''
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有