python爬虫1
《1》什么是爬虫网络爬虫?
网络爬虫(又被称为网页蜘蛛,网络机器人), 是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
《2》爬虫的基本原理:
我们把互联网比喻为一张大网,网络爬虫我们想象为网上的蜘蛛,网页与网页之间的连接我们理解为节点,爬虫就相当于是访问网页,获取网页的信息,又通过节点可以爬取另一个网站,然后不停的通过一个个节点即访问一个个网页,这样网站的数据就可以被我们获取下来了。
《3》爬虫的分类:网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种
1
通用爬虫
:通用网络爬虫 是 捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。
2
聚焦爬虫
:聚焦爬虫,是"面向特定主题需求"的一种网络爬虫程序,它与通用搜索引擎爬虫的区别在于:聚焦爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。
urllib库
三个方面:
request: 它是最基本的HTTP请求模块,可以用来模拟发送请求,就像在浏览器中输入网址,然后敲击回车键一样,使用的时候只需要给库方法传入相关的URL和相关的参数即可.
error: 异常处理模块,如果出现请求错误,我们可以使用这个模块来捕获异常,然后进行重试或者其他操作,保证程序不会意外终止.
parse: 这是一个工具模块,提供了许多url的处理方法,比如拆分,解析,合并等等.
参数序列化:
1
parse_qs()
将url编码格式的参数反序列化为字典类型
2
quote()
可以将中文转换为URL编码格式
3
unquote:
可以将URL编码进行解码
4
urljoin()
传递一个基础链接,根据基础链接可以将某一个不完整的链接拼接为一个完整链接
5
urlparse()
实现URL的识别和分段
6
urlunparse()
可以实现URL的构造
正则表达式
实际上爬虫一共就四个主要步骤:
* 明确目标 (要知道你准备在哪个范围或者网站去搜索)
* 爬 (将所有的网站的内容全部爬下来)
* 取 (去掉对我们没用处的数据)
* 处理数据(按照我们想要的方式存储和使用)
常用的正则匹配规则:
单字符撇匹配
* \d : 匹配数字0-9
* \D: 匹配非数字 [^\d] [^0-9]
* \w: 匹配单词字符[a-zA-Z0-9_]
* \W: 匹配非单词字符 [^\w]
* \s: 匹配空白字符 (空格、\t....)
* \S: 匹配非空白字符 [^\s]
* . 匹配除了换行符'\n'之外的任意字符
多字符匹配(贪婪:尽可能多的匹配)
* 匹配*前的正则表达式,任意次数
? 匹配?前的正则表达式,0次或1次
+ 匹配+前的正则表达式,至少一次
{n,m} 匹配{n,m}前的正则表达式, n到m次
{n} 匹配{n}前的正则表达式, n次
非贪婪匹配 (非贪婪匹配:尽可能少的匹配)
*?
??
+?
其他:
== | 或:匹配左边和右边的正则表达式之一==
== () 分组==
^ 匹配字符串开头
== $ 匹配字符串结尾==
re 模块
1. compile 方法: 将正则表达式的字符串形式编译为一个 Pattern 对象
2. match 方法:从起始位置开始匹配符合规则的字符串,单次匹配,匹配成功,立即返回Match对象,未匹配成功则返回None
3. search 方法:从整个字符串中匹配符合规则的字符串,单次匹配,匹配成功,立即返回Match对象,未匹配成功则返回None
4. findall 方法:匹配所有合规则的字符串,匹配到的字符串放到一个列表中,未匹配成功返回空列表
5. finditer 方法:匹配所有合规则的字符串,匹配到的字符串放到一个列表中,匹配成功返回
6. split 方法:根据正则匹配规则分割字符串,返回分割后的一个列表
7. sub 方法:替换匹配成功的指定位置字符串
XPath选择器
<1>什么是XPath?
- XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历。
<2>XPath最常用的路径表达式:
- /从根节点选取。
- //从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
- .选取当前节点。
- …选取当前节点的父节点。
- @选取属性。
- bookstore选取 bookstore 元素的所有子节点。
- /bookstore选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!
- bookstore/book选取属于 bookstore 的子元素的所有 book 元素。
- //book选取所有 book 子元素,而不管它们在文档中的位置。
- bookstore//book选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
- //@lang选取名为 lang 的所有属性。
- /bookstore/*选取 bookstore 元素的所有子元素。
- //*选取文档中的所有元素。html/node()/meta/@*选择html下面任意节点下的meta节点的所有属性
- //title[@*]选取所有带有属性的 title 元素。
CSS 选择器:BeautifulSoup4
- 注:和 lxml 一样,Beautiful Soup 也是python的一个HTML/XML的解析器,用它可以方便的从网页中提取数据。
- BeautifulSoup 用来解析 HTML 比较简单,API非常人性化,支持CSS选择器、Python标准库中的HTML解析器,也支持 lxml 的 XML解析器。
官方文档:http://beautifulsoup.readthedocs.io/zh_CN/v4.4.0