开发者学堂课程【Python网络爬虫实战:Python网络爬虫简介与表达式基础】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/531/detail/7144
Python网络爬虫简介与表达式基础
内容介绍:
一、Python网络爬虫课程体系简介
二、Python网络爬虫是什么
三、正则表达式基础实战
四、Xpath表达式基础实战
一、Python网络爬虫课程体系简介
1.Python网络爬虫简介与表达式基础(本节)
2.Urllib爬虫项目编写实战
3.抓包分析技术精讲
4.Requests爬虫项目编写实战
5.Scrapy爬虫项目编写实战
6.前程无忧招聘信息爬虫项目开发实战
7.淘宝网商品信息爬虫项目开发实战
8.知乎网信息爬虫项目开发实战(含登录)
9.爬虫常见的反爬策略与反爬攻克手段
10.分布式爬虫编写实战
Python基础课程: https://edu.aliyun.com/course/154
二、Python网络爬虫是什么
网络爬虫是一种互联网信息的自动化采集程序,主要作用是代替人工对互联网中的数据进行自动采集与整理,以快速地、批量地获取目标数据。
如下所示,是网络爬虫可以做的一些事情:
1.批量采集某个领域的招聘数据,对某个行业的招聘情况进行分析
2.批量采集某个行业的电商数据,以分析出具体热销商品,进行商业决策
3.采集目标客户数据,以进行后续营销
4.批量爬取腾讯动漫的漫画,以实现脱网本地集中浏览
5.开发一款火车票抢票程序,以实现自动抢票
......
三、正则表达式基础实战
网络爬虫程序在将网页爬下来之后,其中还有一个关键的步骤就是需要对我们关注的目标信息进行提取,而表达式一般就是用于信息筛选提取的工具。
正则表达式是一种功能强大的表达式,并且非常好用,所以建议掌握。
打开idle实验。
基础1:
全局匹配函数使用格式 re.compile(正则表达式) .findall(源字符串)
普通字符 正常匹配
\n 匹配换行符
\t 匹配制表符
\w 匹配字母、数字、下划线
\W 匹配除字母、数字、下划线
\d 匹配十进制数字
\D 匹配除十进制数字
\s 匹配空白字符
\S 匹配除空白字符
[ab89x] 原子表,匹配ab89x中的任意一个
[^ab89x] 原子表,匹配除ab89x中的任意一个
实例1:
源字符串:"aliyunedu"正则表达式:"yu"匹配出什么? yu
源字符串:"""aliyun
edu""" //出现了换行
正则表达式:“yun\n”匹配出什么? yun\n
源字符串:"aliyu89787nedu"正则表达式:"\w\d\w\d\d\w"匹配出什么? u89787
源字符串:"aliyu89787nedu"正则表达式:"\w\d[nedu]\w"匹配出什么? 87ne
运行代码示例:
import re
string="aliyunedu"
pat="yu"
re.comp ile(pat).findall (string)
输出结果[ 'yu']
基础2:
. 匹配除换行外任意一个字符
^ 匹配开始位置
$ 匹配结束位置
* 前一个字符出现o\1\多次
? 前一个字符出现0\1次
+ 前一个字符出现1\多次
{n} 前一个字符恰好出现n次
{n,} 前一个字符至少n次
{n,m} 前一个字符至少n,至多m次
| 模式选择符或
() 模式单元,通俗来说就是:想提取出什么内容,就在正则中用小括号将其括起来
实例2:
源字符串:"aliyunnnnji87362387aoyubaidu""
正则表达式:"ali..."
匹配出什么? aliyun
正则表达式:"^li..."
匹配出什么? None
正则表达式:"^ali..."
匹配出什么? aliyun
正则表达式:"bai..$"
匹配出什么? baidu
正则表达式:"ali.*"
匹配出什么?aliyunnnnji87362387aoyubaidu
Tips:默认贪婪,即默认尽可能多地进行匹配
正则表达式:"aliyun+"
匹配出什么? aliyunnnn
正则表达式:"aliyun?"
匹配出什么? aliyun
正则表达式:"yun{1,2}"
匹配出什么? yunn
正则表达式:"^al(i..)."
匹配出什么? iyu
基础3:
贪婪模式:尽可能多地匹配
懒惰模式:尽可能少地匹配,精准模式
默认贪婪模式
如果出现如下组合,则代表为懒惰模式;
*?
+?
实例3:
源字符串: "poythonyhjskisa"
正则表达式:"p.*y"
匹配出什么? poxtphony
为什么? 默认贪婪模式
源字符串:"poythonyhjskisa"
正则表达式:"p.*?y”
匹配出什么? ['poy', 'phony"]
为什么? 懒惰模式,精准匹配
基础4:
模式修正符:在不改变正则表达式的情况下通过模式修正符使匹配结果发生更改
re.S 让.也可以匹配多行
re.l 让匹配时忽略大小写(默认情况下正则表达式严格区分大小写)
实例4:
源字符串:"Python"
正则表达式:“pyt"
匹配方式:re.compile("pyt").findall("Python")
匹配结果:[]
源字符串:"Python"
正则表达式:"pyt"
匹配方式:re.compile("pyt" ,re.l).findall("Python")
匹配结果:Pyt
源字符串:string="Python"
正则表达式:"pyt"
匹配方式:re.compile("pyt",re.l).findall("Python")
匹配结果:Pyt
源字符串: string="""我是阿里云大学
欢迎来学习
Python 网络爬虫课程
"""
正则表达式:pat="阿里.*?Python"
匹配方式:re.compile(pat).findall(string)
匹配结果:[]
源字符串: string="""我是阿里云大学
欢迎来学习
Python网络爬虫课程
"""
正则表达式: pat="阿 里. * ?Python"
匹配方式:re.compile(pat,re.S)findall(string)
匹配结果: ['阿里云大学\n欢迎来学习\nPython']
四、Xpath表达式基础实战
除了正则表达式之外,还有一些非常好用的信息筛选的工具,比如XPath表达式、BeautifulSoup等等,不可能也不需要都进行掌握,讲解一下XPath表达式。
/ 逐层提取
text() 提取标签下面的文本
//标签名** 提取所有名为**的标签
//标签名[@属性='属性值'] 提取属性为XX的标签
@属性名 代表取某个属性值
实例:
<html>
<head>
<title>
主页
</title>
</head>
<body>
<p>abc</p>
<p>bbbvb</p>
<a href="//gd.alibaba.com/go/v/pcdetail" target="_top">安全推荐</a>
<a href="//ad.alibaba. com/go/v/pcdetail" target="_top">安全推荐2</a>
<div class="J_AsyncDC" data-type="dr">
<div id="official-remind">明月几时有
</div>
</div>
</body>
提取标题:/html/head/title/text()
提取所有的div标签://div
提取div中<div class="tools">标签的内容:
//div[ @class='tools']/text()